Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 1: Line 1:
===开发Qt程序===
+
[[NanoPi M4|English]]
 +
==介绍==
 +
[[File:NanoPi M4-01B.jpg|thumb|Overview]]
 +
[[File:NanoPi M4-A01.jpg|thumb|Front]]
 +
[[File:NanoPi M4-B01.jpg|thumb|Back]]
 +
*NanoPi M4是基于RK3399 SoC设计的一款尺寸和接口与树莓派B3+兼容的嵌入式开发板。它的尺寸只有85x56mm,接口丰富, 布局紧凑, 非常适合二次开发, 并方便嵌入到最终产品中去。
 +
*NanoPi M4除了有4个USB3.0 A型主口, 一个千兆以太网口, 一个HDMI 2.0 A型口, 一个3.5mm耳机输出, 和一个Type-C等标准接口外, 还板载2.4G & 5G双频WiFi蓝牙模组, 和丰富的扩展接口,包括双MIPI-CSI(其中一路可做DSI), PCIex2, USB2.0, eMMC Socket, I2C, UART,SPI, 八通道I2S,PWM,RTC, GPIO等。M4没有板载eMMC, 默认通过SD启动系统, 但也可通过eMMC Socket外扩eMMC, 实现eMMC启动。
 +
*NanoPi M4有4GB LPDDR3和2GB DDR3两个版本。支持运行Android 7.1和Lubuntu Desktop两种系统,它们均带有GPU和VPU加速处理。
  
FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持GPU硬件加速的OpenGL ES 2.0,只是调用方式不同,描述如下:<br>
+
==硬件特性==
* KMS – 使用Linux内核的DRM显示接口来渲染界面<br>
+
* 主控芯片: Rockchip RK3399
* EGLFS – 使用OpenGL ES接口来渲染界面<br>
+
** CPU: big.LITTLE大小核架构,双Cortex-A72大核(up to 2.0GHz)+四Cortex-A53小核结构(up to 1.5GHz)
* XCB – 在X11服务器上运行,并集成到X11窗口环境<br>
+
** GPU: Mali-T864 GPU,支持OpenGL ES1.1/2.0/3.0/3.1, OpenVG1.1, OpenCL, DX11, 支持AFBC(帧缓冲压缩)
<br>
+
** VPU: 支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps, 双VOP显示等视频编解码功能
三种插件所支持的Qt特性会有所不同,请根据你的需求来选择: <br>
+
* 电源管理单元: RK808-D PMIC, 搭配独立DC/DC, 支持动态调压, 软件关机, 按键开机, RTC唤醒, 睡眠唤醒等功能
 +
* 内存: 双通道4GB LPDDR3-1866, 或 双通道2GB DDR3-1866
 +
* Flash: 支持扩展eMMC模块
 +
* 有线网络: 原生千兆以太网
 +
* Wi-Fi/蓝牙: 802.11a/b/g/n/ac, Bluetooth 4.1 双频Wi-Fi蓝牙模块, 双天线
 +
* 视频输入:  1个或2个4线MIPI-CSI, 双ISP像素处理能力高达13MPix/s,支持双路摄像头数据同时输入
 +
* 视频输出
 +
** HDMI: HDMI 2.0a, 支持4K@60Hz显示,支持HDCP 1.4/2.2
 +
** LCD Interface: 一个4线MIPI-DSI
 +
* Audio Out: 3.5mm 双通道耳机接口, 或者通过HDMI输出
 +
* Audio In: 2.54mm排针形式(默认不焊)的麦克风接口
 +
* USB 3.0: 4个USB 3.0 Host A型接口
 +
* USB Type-C: 支持USB2.0 OTG 和 5V电源输入
 +
* microSD Slot x 1
 +
* 40Pin GPIO 扩展接口:
 +
** 2 X 3V/1.8V I2C, up to 1 x 3V UART, 1 X 3V SPI, 1 x SPDIF_TX, up to 8 x 3V GPIOs
 +
** 1 x 1.8V 8通道 I2S
 +
* 24Pin 扩展接口:
 +
** 2个独立的原生USB 2.0 Host
 +
** PCIe x2
 +
** PWM x1, PowerKey
 +
* 调试串口: 4 Pin 2.54mm 调试串口, 3V电平, 波特率为1500000
 +
* LED: 1 x power LED and 1 x GPIO Controled LED
 +
* RTC电池座子: 2 Pin 1.27/1.25mm RTC备份电池接口
 +
* 供电电源: DC 5V/3A
 +
* PCB: 8 Layer, 85 mm x 56 mm
 +
* 环境工作温度: 0℃ to 80℃
 +
 
 +
==接口布局和尺寸==
 +
===接口布局===
 +
[[File:NanoPi M4-4GB-1807-IF-01.jpg |thumb|600px|NanoPi M4 Layout]]
 +
[[File:NanoPi M4-2GB-1807-IF-01.jpg |thumb|600px|NanoPi M4 Layout]]
 +
* '''40 Pin GPIO1 引脚定义'''
 
::{| class="wikitable"
 
::{| class="wikitable"
 
|-
 
|-
  | 插件名称
+
|'''Pin#''' || '''Assignment'''          ||'''Pin#'''  || '''Assignment'''   
  | OpenGL ES
+
  | QtWebEngine
+
  | QtMultimedia
+
  | 视频硬解播放
+
  | 双屏异显
+
 
|-
 
|-
  | KMS
+
|1    || VCC3V3_SYS  ||2    || VDD_5V
  | <b>Yes</b>
+
  | No
+
  | <b>Yes</b>
+
  | No
+
  | <b>Yes</b>
+
 
|-
 
|-
  | EGLFS
+
|3    || I2C2_SDA(3V)      ||4    || VDD_5V
  | <b>Yes</b>
+
|-
  | No
+
|5    || I2C2_SCL(3V)      ||6    || GND
  | <b>Yes</b>
+
  | No
+
  | No
+
 
|-
 
|-
   | XCB
+
|7    || GPIO1_A0(3V)      ||8    || GPIO4_C1/I2C3_SCL(3V)
   | <b>Yes</b>
+
|-
   | <b>Yes</b>
+
|9    || GND          ||10    || GPIO4_C0/I2C3_SDA(3V)
   | <b>Yes</b>
+
|-
   | <b>Yes</b>
+
|11   || GPIO1_A1(3V)      ||12    || GPIO1_C2(3V)
   | <b>Yes</b>
+
|-
 +
|13   || GPIO1_A3(3V)      ||14    || GND
 +
|-
 +
|15   || GPIO1_A4(3V)      ||16    || GPIO1_C6(3V)
 +
|-
 +
|17   || VCC3V3_SYS ||18    || GPIO1_C7(3V)
 +
|-
 +
|19  || SPI1_TXD/UARM4_TX(3V)    ||20    || GND
 +
|-
 +
|21   || SPI1_RXD/UARM4_RX(3V)    ||22    || GPIO1_D0(3V)
 +
|-
 +
|23   || SPI1_CLK(3V)    ||24    || SPI1_CSn0(3V)
 +
|-
 +
|25  || GND          ||26    || GPIO4_C5/SPDIF_TX(3V)
 +
|-
 +
|27  || I2C2_SDA(1.8V)      ||28    || I2C2_SCL(1.8V)
 +
|-
 +
|29  || I2S0_LRCK_RX(1.8V)      ||30    || GND
 +
|-
 +
|31  ||I2S0_LRCK_TX(1.8V)    ||32    || I2S_CLK(1.8V)
 +
|-
 +
|33  || I2S0_SCLK(1.8V)      ||34    || GND
 +
|-
 +
|35  || I2S0_SDI0(1.8V)    ||36    || I2S0_SDO0(1.8V)
 +
|-
 +
|37  || I2S0_SDI1SDO3(1.8V)    ||38    || I2S0_SDI2SDO2(1.8V)
 +
|-
 +
|39  || GND          ||40    || I2S0_SDI3SDO1(1.8V)
 
|}
 
|}
建议使用 KMS或XCB 插件。<br><br>
+
 
为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:
+
* '''24 Pin GPIO2 引脚定义'''
 
::{| class="wikitable"
 
::{| class="wikitable"
 
|-
 
|-
|脚本文件名||作用
+
|'''Pin#''' || '''Assignment'''          ||'''Pin#'''  || '''Assignment'''   
 
|-
 
|-
|/usr/bin/setqt5env-kms||设置kms插件所需要的环境变量
+
|1    || VCC5V0_SYS  ||2    || VCC5V0_SYS
 
|-
 
|-
|/usr/bin/setqt5env-eglfs||设置eglfs插件所需要的环境变量 
+
|3    || PCIE_RX1_P      ||4    || PCIE_TX1P
 
|-  
 
|-  
|/usr/bin/setqt5env-xcb||设置xcb插件所需要的环境变量
+
|5    || PCIE_RX1_N      ||6    || PCIE_TX1N
 +
|-
 +
|7    || GND      ||8    || GND
 +
|-
 +
|9    || PCIE_RX0_P          ||10    || PCIE_TX0P
 +
|-
 +
|11  || PCIE_RX0_N      ||12    || PCIE_TX0N
 +
|-
 +
|13  || GND      ||14    || GND
 +
|-
 +
|15  || PCIE_REF_CLKP      ||16    || HOST0_DM
 +
|-
 +
|17  || PCIE_REF_CLKN ||18    || HOST0_DP
 +
|-
 +
|19  || GND    ||20    || GND
 +
|-
 +
|21  || PWR_KEY    ||22    || HOST1_DM
 +
|-
 +
|23  || GPIO4_C6/PWM1(3V)    ||24    || HOST1_DP
 +
|}
 +
 
 +
* '''MIPI-CSI接口引脚定义'''
 +
:: 0.5mm FPC 连接器
 +
:: MIPI-CSI2也可作为MIPI-DSI接口连接LCD显示屏
 +
::{| class="wikitable"
 +
|-
 +
|'''Pin#''' ||  '''MIPI-CSI1'''  ||  '''MIPI-CSI2'''  ||  '''Description ''' 
 +
|-
 +
|1    ||  VCC5V0_SYS  || VCC5V0_SYS  ||  5V Power ouput
 +
|-
 +
|2    ||  VCC5V0_SYS || VCC5V0_SYS    || 5V Power ouput
 
|-  
 
|-  
|/usr/bin/setqt5env-nogui||仅供无界面的Qt程序使用
+
|3    ||    GND    ||  GND          ||  Return current path
 +
|-
 +
|4    || VCC_CSI_AF2.8V || VCC_CSI_AF2.8V || 2.8V Power for VCM
 +
|-
 +
|5    || VCC_CSI_1.2V  || VCC_CSI_1.2V  || 1.2V Power for image sensor core circuit
 +
|-
 +
|6    ||  VCC1V8_CAM  ||  VCC1V8_CAM  || 1.8V power for I/O circuit
 +
|-
 +
|7    ||  VCC_CSI_2.8V || VCC_CSI_2.8V || 2.8V power for image sensor analog circuit
 +
|-
 +
|8    ||  VCC_CSI_1.0V || VCC_CSI_1.0V || 1.0V Power for image sensor core circuit
 +
|-
 +
|9    || I2C1_SCL ||  I2C2_SCL        || 1.8V I2C clock signal
 +
|-
 +
|10    || I2C1_SDA || I2C2_SDA        ||  1.8V I2C data signal
 +
|-
 +
|11    || MIPI_CSI0_RST || MIPI_CSI1_RST || reset  camera module
 +
|-
 +
|12    || MIPI_CSI0_PWN || MIPI_CSI1_PWN  || Power down camera module
 +
|-
 +
|13    ||  GND          ||      GND          || Return current path
 +
|-
 +
|14    || GPIO2_B3_CIF_CLKOUTA || GPIO2_B3_CIF_CLKOUTA || MCLK to camera module
 +
|-
 +
|15      || GND          ||    GND            || Return current path
 +
|-
 +
|16    ||  MIPI_RX0_D3P  || MIPI_TX1/RX1_D3P  || MIPI CSI positive differential data line transceiver output
 +
|-
 +
|17    ||  MIPI_RX0_D3N || MIPI_TX1/RX1_D3N    || MIPI CSI negative differential data line transceiver output
 +
|-
 +
|18    ||  GND    || GND                      || Return current path
 +
|-
 +
|19    || MIPI_RX0_D2P || MIPI_TX1/RX1_D2P  || MIPI CSI positive differential data line transceiver output
 +
|-
 +
|20    || MIPI_RX0_D2N || MIPI_TX1/RX1_D2N    || MIPI CSI negative differential data line transceiver output
 +
|-
 +
|21    || GND || GND    || Return current path
 +
|-
 +
|22    ||  MIPI_RX0_D1P  || MIPI_TX1/RX1_D1P  || MIPI CSI positive differential data line transceiver output
 +
|-
 +
|23    || MIPI_RX0_D1N || MIPI_TX1/RX1_D1N    || MIPI CSI negative differential data line transceiver output
 +
|-
 +
|24    || GND || GND    || Return current path
 +
|-
 +
|25    || MIPI_RX0_CLKP || MIPI_TX1/RX1_CLKP  || MIPI CSI positive differential clock line transceiver output
 +
|-
 +
|26    || MIPI_RX0_CLKN || MIPI_TX1/RX1_CLKN    || MIPI CSI negative differential clock line transceiver output
 +
|-
 +
|27    || GND ||  GND  || Return current path
 +
|-
 +
|28    || MIPI_RX0_D0P || MIPI_TX1/RX1_D0P || MIPI CSI positive differential data line transceiver output
 +
|-
 +
|29    || MIPI_RX0_D0N || MIPI_TX1/RX1_D0N  || MIPI CSI negative differential data line transceiver output
 +
|-
 +
|30    || GND      ||  GND    || Return current path
 +
|}
 +
 
 +
* '''eMMC Socket接口引脚定义'''
 +
::{| class="wikitable"
 +
|-
 +
|'''Pin#''' || '''Assignment'''          ||'''Pin#'''  || '''Assignment'''   
 +
|-
 +
|1    || EMMC_D0  ||2    || EMMC_D1
 +
|-
 +
|3    || EMMC_D2    ||4    || EMMC_D3
 +
|-
 +
|5    || EMMC_D4      ||6    || EMMC_D5
 +
|-
 +
|7    || EMMC_D6    ||8    || EMMC_D7
 +
|-
 +
|9    || EMMC_STRB          ||10    || GND
 +
|-
 +
|11  || EMMC_CMD      ||12    || EMMC_CLKO
 +
|-
 +
|13  || N/C    ||14    || GND
 +
|-
 +
|15  || N/C    ||16    || VCC1V8_S3
 +
|-
 +
|17  || eMMC_RST  ||18    || VCC3V3_S3
 +
|-
 +
|19  || GND    ||20    || GND
 +
|}
 +
 
 +
* '''调试串口引脚定义'''
 +
:: 3V电平, 波特率1500000bps
 +
::{| class="wikitable"
 +
|-
 +
|'''Pin#''' ||'''Assignment''' ||  '''Description ''' 
 +
|-
 +
|1    || GND                || 0V
 +
|-
 +
|2    || VCC5V0_SYS          || 5V power output
 +
|-
 +
|3    || UART2DBG_TX        || output
 +
|-
 +
|4    || UART2DBG_RX        || intput
 +
|}
 +
 
 +
*'''USB接口'''
 +
::USB 3.0 接口具有2A过流保护功能.
 +
 
 +
*'''RTC'''
 +
::我们实测的RTC备份电流为27uA.
 +
::连接器型号: Molex 53398-0271
 +
:'''其他说明'''
 +
::#只能从Type-C或40Pin GPIO接口的第2和第4脚给板子供电, 电压范围4.7~5.5V
 +
::#板子原理图: [http://wiki.friendlyarm.com/wiki/images/d/dd/NanoPi-M4-2GB-1807-Schematic.pdf NanoPi-M4-2GB-1807-Schematic.pdf] [http://wiki.friendlyarm.com/wiki/images/7/7a/NanoPi-M4-4GB-1807-Schematic.pdf NanoPi-M4-4GB-1807-Schematic.pdf]
 +
 
 +
===尺寸===
 +
[[File:NanoPi M4_1807_Drawing.png|frameless|800px|NanoPi M4 Dimensions]]
 +
 
 +
::PCB dxf文件, 仅供做产品时结构设计使用: [http://wiki.friendlyarm.com/wiki/images/e/e4/NanoPi-M4-1807_Drawing%28dxf%29.zip NanoPi-M4-1807-Drawing(dxf).zip]
 +
 
 +
==快速入门==
 +
===准备工作===
 +
要开启你的NanoPi-M4,请先准备好以下硬件:
 +
* NanoPi-M4主板
 +
* Type-C数据线
 +
* TF卡: Class10或以上的8GB microSD卡
 +
* USB转串口适配器(可选,用于调试或PC上进行操作)
 +
* 一个5V/3A或以更大功率的电源适配器
 +
* 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
 +
* 一套USB键盘鼠标,同时连接更多USB的设备时还需要USB HUB
 +
* 一台电脑,需要联网,建议使用<b>Ubuntu 18.04 64位系统</b>
 +
 
 +
===快速从SD卡启动===
 +
首先访问[http://download.friendlyarm.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} 此处的下载地址]下载需要的固件文件:<br />
 +
* 您需要准备一张8G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。 <br />
 +
{| class="wikitable"
 +
|-
 +
  | colspan=2 | Image Files
 +
|-
 +
  | rk3399-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.zip
 +
  | FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core
 +
|-
 +
  | rk3399-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip
 +
  | LUbuntu桌面版固件,自带X Window图形界面
 +
|-
 +
  | colspan=2 | Flash Utility:
 +
|-
 +
  | win32diskimager.rar
 +
  | Windows utility. Under Linux users can use "dd"
 +
|-
 +
|}
 +
*将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
 +
*当制作完成 SD 卡后,拔出 SD 卡插入卡槽,上电启动即可。<br />
 +
 
 +
 
 +
===串口调试===
 +
如果你想查看NanoPi-M4启动时更多详细的信息,或者更直接的对其进行控制,建议连接并使用调试串口。<br />
 +
* 使用准备好的USB转串口适配器和连接线(需另购),连接开发板:
 +
:{| class="wikitable"
 +
|-
 +
|'''Pin#''' ||'''开发板调试串口''' ||  '''USB转串口适配器''' 
 +
|-
 +
|1    || GND                || GND
 +
|-
 +
|2    || VCC5V0_SYS          || NC (不需要连接) <br /> 注: Matrix USB2UART适配器,请将5V ON/OFF切换到OFF
 +
|-
 +
|3    || UART2DBG_TX        || RX
 +
|-
 +
|4    || UART2DBG_RX        || TX
 
|}
 
|}
setqt5env-* 脚本的用法,例如设置KMS:
+
* 将USB转串口适配器连接到PC Linux,通常会识别为ttyUSB0,或使用以下命令来确定设备名字:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
. setqt5env-kms
+
dmesg | grep ttyUSB
./apps
+
ls -l /dev/ttyUSB*
 
</syntaxhighlight>
 
</syntaxhighlight>
(注: .与字母s之间有个空格)
+
* 在PC Linux安装minicom,运行minicom,配置串口设备和参数(1500000 Bps, 8N1, 流控无)
 +
<syntaxhighlight lang="bash">
 +
sudo apt-get install minicom
 +
minicom -s
 +
</syntaxhighlight>
 +
'''注意''': RK3399调试串口的波特率缺省是'''1500000''',有些适配器可能达不到此速率,还有可能因USB延长线或连接到USB hub出现异常(如乱码),需检查并更换。
  
====Qt开发环境搭建====
+
==Android7系统的使用==
FriendlyELEC为RK3399平台提供了两种交叉编译Qt程序的方法:
+
 
* 方法1:使用Docker容器,详细可参考github页面:http://github.com/friendlyarm/friendlyelec-ubuntu18-docker
+
[[File:rk3399-android7-home.png|thumb|rk3399-android7-home]]
* 方法2: 搭建本地交叉编译环境,本地需要安装 Ubuntu 18.04 64位系统,其环境搭建方法请参考:[[How to Build and Install Qt Application for FriendlyELEC Boards/zh]]
+
[[File:rk3399-android7-icons.png|thumb|rk3399-android7-icons]]
 +
 
 +
我们为 '''NanoPi-M4''' 提供了完善的Android7.1 BSP,代码使用 gitlab.com 平台管理,完全开源,支持GPU加速和VPU硬件加速。
 +
===使用MIPI摄像头进行拍照和录像===
 +
 
 +
NanoPi-M4在Android系统下,可以搭配 MIPI摄像头CAM1320 进行拍照和录像,操作比较简单,连接摄像头到NanoPi-M4的MIPI接口,开机进入 Android 系统,用系统自带的 Camera 应用即可完成拍照和录像,操作跟 Android 手机是一样的。<br />
 +
 
 +
NanoPi-M4板上共有两个MIPI接口可以连接两个摄像头分别对应前置摄像头和后置摄像头,其对应关系如下表所示:<br />
 +
::{| class="wikitable"
 +
|-
 +
|接口位置 || 摄像头位置
 +
|-
 +
|MIPI-CSI1    || Android 后置摄像头
 +
|-
 +
|MIPI-CSI2    || Android 前置摄像头
 +
|}
 +
 
 +
===HDMI显示设置===
 +
 
 +
如果连接了HDMI显示设备,可进入 Android 的 Settings -> Display -> HDMI 进行设置。
 +
::{| class="wikitable"
 +
|-
 +
|HDMI Resolution || 缺省为 Auto,可手动设置显示分辨率,最高可支持 4K 分辨率
 +
|-
 +
|Screen Zoom    || 用户可观察红色边框的显示,点击中间的4个箭头按钮来进行缩放调节
 +
|-
 +
|HDMI Rotation  || 可进行横竖屏切换
 +
|}
  
====Qt示例====
+
{{FriendlyCoreGeneral/zh|NanoPi-M4}}
FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,如下所示:
+
==如何编译系统==
* <b>Qt QML示例:CinematicExperience</b>
+
===搭建编译环境===
CinematicExperience是一个用Qt QML实现的专辑列表界面。<br />
+
搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。
例子演示了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例非常能体现硬件性能与软件优化的差异,在RK3399平台上非常流畅。<br />
+
CinematicExperience的运行命令:<br />
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/Qt5_CinematicExperience
+
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
./run.sh
+
sudo apt-get install flex curl libncurses5-dev libssl-dev zlib1g-dev gawk minicom
 +
sudo apt-get install openjdk-8-jdk
 +
sudo apt-get install exfat-fuse exfat-utils device-tree-compiler liblz4-tool
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
更多说明可查看 https://source.android.com/source/initializing.html 。
  
运行截图:<br />
+
===安装交叉编译器===
[[File:Cinematicsexperience.jpg|frameless|480px]]<br />
+
====安装aarch64-linux-gcc 6.4====
 +
首先下载并解压编译器:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/prebuilts.git
 +
sudo mkdir -p /opt/FriendlyARM/toolchain
 +
sudo tar xf prebuilts/gcc-x64/aarch64-cortexa53-linux-gnu-6.4.tar.xz -C /opt/FriendlyARM/toolchain/
 +
</syntaxhighlight>
  
* <b>QQt WebEngine示例:网页浏览器</b>
+
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。<br />
+
这里示例展示的网页浏览器是 Qt5 自带的Demo,示例运行命令:<br />
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/qt5-brower
+
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH
./run.sh
+
export GCC_COLORS=auto
 
</syntaxhighlight>
 
</syntaxhighlight>
  
运行截图:<br />
+
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
[[File:qt5-brower.jpg|frameless|480px]]<br />
+
<syntaxhighlight lang="bash">
 +
. ~/.bashrc
 +
</syntaxhighlight>
  
注:Qt WebEngine在FriendlyCore平台上需要使用Xcb插件来运行。
+
这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:
 +
<syntaxhighlight lang="bash">
 +
aarch64-linux-gcc -v
 +
Using built-in specs.
 +
COLLECT_GCC=aarch64-linux-gcc
 +
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/6.4-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/6.4.0/lto-wrapper
 +
Target: aarch64-cortexa53-linux-gnu
 +
Configured with: /work/toolchain/build/aarch64-cortexa53-linux-gnu/build/src/gcc/configure --build=x86_64-build_pc-linux-gnu
 +
--host=x86_64-build_pc-linux-gnu --target=aarch64-cortexa53-linux-gnu --prefix=/opt/FriendlyARM/toolchain/6.4-aarch64
 +
--with-sysroot=/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++
 +
--enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-cpu=cortex-a53
 +
...
 +
Thread model: posix
 +
gcc version 6.4.0 (ctng-1.23.0-150g-FA)
 +
</syntaxhighlight>
  
* <b>Qt 双屏异显示例</b>
+
===编译Android7源代码===
这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容:
+
====下载Android7源代码====
 +
NanoPi-M4 源代码托管在 gitlab 上,使用以下命令进行下载:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/qt5-multi-screen-demo
+
git clone https://gitlab.com/friendlyelec/rk3399-nougat.git
./run.sh
+
 
</syntaxhighlight>
 
</syntaxhighlight>
运行截图:<br />
 
[[File:qt5-multi-screen.jpg|frameless|480px]]<br />
 
  
* <b>Qt Multimedia: 硬解播放器qt5-player</b>
+
====编译并生成Image文件====
qt5-player播放器已经适配Rockchip的gstreamer插件rkximagesink,支持4K视频的硬解播放,由于rkximagesink插件只支持输出图像到X11窗口,因此 Qt 播放器程序需要使用 XCB 的显示插件来运行。<br />
+
使用以下命令编译 Android7:
示例运行命令:<br />
+
先在开发板上执行命令
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/qt5-player
+
cd rk3399-nougat
./run.sh
+
./build-nanopc-t4.sh -F -M
 
</syntaxhighlight>
 
</syntaxhighlight>
运行截图:<br />
 
[[File:qt5-player.gif|frameless|480px]]<br />
 
  
* <b>QQt WebGL示例: nmapper</b>
+
====更新系统为自已编译的Image====
Qt WebGL允许你将一个QML应用显示在其他设备的网页游览器上,这个特性让你做一些远程控制的应用变得很简单。<br />
+
编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 NanoPi-M4上: <br />
开发板需要连接网络,在开发版本执行以下命令,即可以WebGL的方式运行Qt程序:<br />
+
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区; <br />
 +
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的  nougat 目录; <br />
 +
3) 将SD卡插入NanoPi-M4,重新烧写Andorid系统即可; <br />
 +
== 硬件资源访问==
 +
===串口访问===
 +
 
 +
如下表所示,仅 UART4 可供应用程序开发使用:
 +
 
 +
::{| class="wikitable"
 +
|-
 +
|串口设备 || 串口资源占用情况
 +
|-
 +
|UART0  || 已被蓝牙占用
 +
|-
 +
|UART1  ||  已被千兆以太网占用 
 +
|-
 +
|UART2  ||  已被作为调试串口
 +
|-
 +
|UART3  ||  已被千兆以太网占用
 +
|-
 +
|UART4  ||  空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
 +
|}
 +
 
 +
===烧写系统到eMMC(需购买eMMC模块)===
 +
FriendlyELEC推出的基于RK3399的开发板,支持三种方式烧写系统到eMMC:
 +
* 方法1)SD卡脱机烧写,用SD卡启动开发板,通过EFlasher工具进行烧写 <b>(推荐使用此方法)</b>
 +
* 方法2)通过USB Type-C数据线,在Windows下用Rockchip提供的工具进行烧写
 +
* 方法3)通过USB Type-C数据线,在Linux下用Rockchip提供的工具进行烧写
 +
建议采用第一种方法进行烧写。
 +
 
 +
====使用SD卡脱机烧写====
 +
 
 +
访问[http://download.friendlyarm.com/NanoPi-M4 此处的下载地址]下载SD卡脱机烧写所需的文件及工具:<br />
 +
{| class="wikitable"
 +
|-
 +
  | colspan=2 | Image Files
 +
|-
 +
  | rk3399-eflasher-YYYYMMDD-android.img.zip
 +
  | Android7.1.2 系统固件
 +
|-
 +
  | rk3399-eflasher-YYYYMMDD-friendly-core-arm64.img.zip
 +
  | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建
 +
|-
 +
  | rk3399-eflasher-YYYYMMDD-lubuntu.img.zip
 +
  | Lubuntu桌面版固件 (内置Qt 5.10.0)
 +
|-
 +
  | colspan=2 | Flash Utility:
 +
|-
 +
  | win32diskimager.rar
 +
  | Windows utility. Under Linux users can use "dd"
 +
|}
 +
 
 +
详细操作步骤如下:<br />
 +
* 准备一张8G或以上容量的SDHC卡;
 +
* 下载并解压 固件文件rk3399-eflasher-YYYYMMDD-XXXX.img.zip 和 工具win32diskimager;
 +
* 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的EFlasher固件,点击 Write 按钮烧写到SD卡;
 +
* 或者在 Linux下使用 dd 命令将 rk3399-eflasher-YYYYMMDD-XXXX..img 写入 SD卡;
 +
* 将SD卡从电脑端弹出,插入NanoPi-M4的microSD卡槽;
 +
* 给NanoPi-M4连接好 12V/2A 的DC接口电源及HDMI显示设备,长按NanoPi-M4上的Power键直到板上的PWR灯亮,系统会从SD卡启动,稍等片刻(约15秒)后会在显示设备上看到EFlasher工具的界面;
 +
* 通过USB鼠标,或者触摸屏,在EFlasher工具界面上选择你要烧写的系统进行烧写;
 +
* 烧写完成后,轻按Power键关机,从NanoPi-M4端弹出SD卡;
 +
* 长按Power开机,会从eMMC启动你刚刚烧写的系统;
 +
 
 +
====Windows下通过Type-C数据线进行烧写====
 +
 
 +
访问[http://download.friendlyarm.com/NanoPi-M4 此处的下载地址]下载Windows下使用Type-C数据线烧写所需的文件及工具:<br />
 +
{| class="wikitable"
 +
|-
 +
  | colspan=2 | Image Files
 +
|-
 +
  | android-nougat-images.tgz
 +
  | Android 7.1.2固件
 +
|-
 +
  | core-qte-arm64-images.tgz
 +
  | FriendlyCore固件,内置Qt5.10
 +
|-
 +
  | lubuntu-desktop-images.tgz
 +
  | Lubuntu桌面版固件,自带X Window图形界面
 +
|-
 +
  | colspan=2 | Flash Utility:
 +
|-
 +
  | AndroidTool_Release_v2.42.7z
 +
  | Rockchip提供的Windows下通过Type-C数据线烧写系统的工具
 +
|-
 +
  | DriverAssitant_v4.5.tgz
 +
  | Rockchip提供的Windows下的USB驱动,使用AndroidTool烧写系统时需要安装此驱动
 +
|-
 +
|}
 +
 
 +
详细操作步骤如下:<br />
 +
* 初次使用时,请先下载DriverAssitant_v4.5.tgz,解压后安装USB驱动;
 +
* 根据自己的需要下载images-for-eflasher下的系统固件并解压,如Android 7的固件文件是android-nougat-images.tgz,其中固件解压后的文件idbloader.img和info.conf,使用AndroidTool时可忽略。
 +
* 下载AndroidTool_Release_v2.42.7z 并解压,以管理员身份运行AndroidTool.exe
 +
* 可根据Android开发工具手册.pdf,导入分区配置即固件中的parameter.txt,然后指定各分区的烧写文件路径,如下图所示:
 +
[[File:AndroidTools_DI_01.png]]
 +
* 连接好12V/2A的DC接口电源及HDMI显示设备,连接Type-C数据线到PC,按住Recovery键再长按(1.5秒以上)Power键开机,AndroidTool会显示“发现一个LOADER设备”<br />a) 如果eMMC没有烧写过系统或eMMC的系统被擦除或损坏则会显示为MASKROM设备;<br />b) 您也可以按住BOOT键再长按Power键开机,同时持续按住BOOT键5秒以上强制进入MASKROM模式;<br />c) 如果显示“没有发现设备”,请先检查是否已成功安装驱动,检查Type-C数据线然后按上述方法重新开机,或按住Recovery键再按Reset键;<br />d) 另外,如果已成功启动系统,可通过串口、adb或ssh等方式在板子上运行reboot loader重启板子并进入LOADER模式。<br />
 +
* 点击执行即可下载固件到eMMC,请耐心等待,烧写成功结束后将自动重启。
 +
* 如果需要更换系统,例如eMMC已经安装了Linux而现在需要烧写Android,需要先对eMMC进行一些擦写操作:<br />
 +
你需要在界面上选择 “升级固件”-〉界面上选择固件 “MiniLoaderAll.bin“,然后点击“擦除Flasher”。
 +
[[File:Rk-clean-emmc.png]]
 +
 
 +
====Linux下通过Type-C数据线进行烧写====
 +
 
 +
可访问[http://download.friendlyarm.com/NanoPi-M4 此处的下载地址]下载需要的固件文件及工具。<br />
 +
{| class="wikitable"
 +
|-
 +
  | colspan=2 | Image Files
 +
|-
 +
  | android-nougat-images.tgz
 +
  | Android 7.1.2固件
 +
|-
 +
  | core-qte-arm64-images.tgz
 +
  | FriendlyCore固件,内置Qt5.10
 +
|-
 +
  | lubuntu-desktop-images.tgz
 +
  | LUbuntu桌面版固件,自带X Window图形界面
 +
|-
 +
  | colspan=2 | Flash Utility:
 +
|-
 +
  | Linux_Upgrade_Tool_1.27.rar
 +
  | Rockchip提供的Linux下通过Type-C数据线更新系统的工具
 +
|-
 +
|}
 +
 
 +
Linux_Upgrade_Tool是Rockchip提供的Linux下的命令行工具,用于通过Type-C数据线来升级eMMC中的固件,同时还提供了如擦除eMMC、直接读/写eMMC等功能。
 +
* 安装upgrade_tool: 下载Linux_Upgrade_Tool_1.27.rar后解压即可获得upgrade_tool,然后复制并设置权限
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/qt5-nmapper
+
sudo cp upgrade_tool /usr/local/sbin
./run-with-webgl.sh
+
sudo chown root:root /usr/local/sbin/upgrade_tool
 +
sudo chmod 0755 /usr/local/sbin/upgrade_tool
 +
</syntaxhighlight>
 +
* 根据自己的需要下载images-for-eflasher下的系统固件并解压,如Lubuntu的固件文件是lubuntu-desktop-images.tgz
 +
* 参考“使用AndroidTool”,启动板子并进入LOADER或MASKROM模式;
 +
* 运行以下命令即可烧写Lubuntu系统并重启:
 +
<syntaxhighlight lang="bash">
 +
sudo upgrade_tool ul MiniLoaderAll.bin
 +
sudo upgrade_tool di -p parameter.txt
 +
sudo upgrade_tool di uboot uboot.img
 +
sudo upgrade_tool di trust trust.img
 +
sudo upgrade_tool di resource resource.img
 +
sudo upgrade_tool di kernel kernel.img
 +
sudo upgrade_tool di boot boot.img
 +
sudo upgrade_tool di rootfs rootfs.img
 +
sudo upgrade_tool RD
 
</syntaxhighlight>
 
</syntaxhighlight>
然后在电脑或者手机上打开网页游览器,敲入开发板的IP地址,应该就能看到Qt界面了,如下图所示:<br />
 
[[File:qtwebgl.gif|frameless|480px]]<br />
 
  
* <b>Qt VNC示例: 智能家居控制界面</b>
+
* 如果想烧写Android 7到eMMC,可下载固件文件并解压后运行以下命令:
Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和使用你的Qt程序,支持QtWidgets和QML应用。<br />
+
先在开发版本执行以下命令,以webgl的方式运行应用Qt应用:<br />
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /opt/qt5-smarthome
+
sudo upgrade_tool ul MiniLoaderAll.bin
./run-with-vnc.sh
+
sudo upgrade_tool di -p parameter.txt
 +
sudo upgrade_tool di uboot uboot.img
 +
sudo upgrade_tool di trust trust.img
 +
sudo upgrade_tool di misc misc.img
 +
sudo upgrade_tool di resource resource.img
 +
sudo upgrade_tool di kernel kernel.img
 +
sudo upgrade_tool di boot boot.img
 +
sudo upgrade_tool di recovery recovery.img
 +
sudo upgrade_tool di system system.img
 +
sudo upgrade_tool RD
 
</syntaxhighlight>
 
</syntaxhighlight>
然后在电脑或者手机打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到智能家居控制界面了,如下图所示:<br />
+
 
[[File:qt5smarthomevnc.png|frameless|480px]]<br />
+
如果固件中的MiniLoaderAll.bin版本不同,或烧写与eMMC中不同的系统,则可能会遇到无法成功启动的情况,需要擦除eMMC。<br />
 +
先启动板子并进入LOADER,运行以下命令可删除eMMC,如程序显示"Download Boot Start"后超过10s无变化可按Reset键,然后再运行一次以下命令。
 +
<syntaxhighlight lang="bash">
 +
sudo upgrade_tool EF MiniLoaderAll.bin
 +
</syntaxhighlight>
 +
 
 +
擦除成功结束后将显示"Erase flash ok."
 +
 
 +
== 查看瑞芯微原厂资料==
 +
*[http://opensource.rock-chips.com/images/6/60/Rockchip_RK3399_Datasheet_V1.6-20170301.pdf RK3399 datasheet V1.6]
 +
*[http://opensource.rock-chips.com/images/e/ee/Rockchip_RK3399TRM_V1.4_Part1-20170408.pdf RK3399TRM V1.4]
 +
 
 +
==原理图、尺寸图==
 +
*原理图:  [http://wiki.friendlyarm.com/wiki/images/d/dd/NanoPi-M4-2GB-1807-Schematic.pdf NanoPi-M4-2GB-1807-Schematic.pdf] [http://wiki.friendlyarm.com/wiki/images/7/7a/NanoPi-M4-4GB-1807-Schematic.pdf NanoPi-M4-4GB-1807-Schematic.pdf]
 +
*尺寸图:[http://wiki.friendlyarm.com/wiki/images/e/e4/NanoPi-M4-1807_Drawing%28dxf%29.zip NanoPi-M4-1807-Drawing(dxf).zip]
 +
 
 +
==更新日志==
 +
===2018-08-24===
 +
首页发布

Revision as of 06:50, 24 August 2018

English

1 介绍

Overview
Front
Back
  • NanoPi M4是基于RK3399 SoC设计的一款尺寸和接口与树莓派B3+兼容的嵌入式开发板。它的尺寸只有85x56mm,接口丰富, 布局紧凑, 非常适合二次开发, 并方便嵌入到最终产品中去。
  • NanoPi M4除了有4个USB3.0 A型主口, 一个千兆以太网口, 一个HDMI 2.0 A型口, 一个3.5mm耳机输出, 和一个Type-C等标准接口外, 还板载2.4G & 5G双频WiFi蓝牙模组, 和丰富的扩展接口,包括双MIPI-CSI(其中一路可做DSI), PCIex2, USB2.0, eMMC Socket, I2C, UART,SPI, 八通道I2S,PWM,RTC, GPIO等。M4没有板载eMMC, 默认通过SD启动系统, 但也可通过eMMC Socket外扩eMMC, 实现eMMC启动。
  • NanoPi M4有4GB LPDDR3和2GB DDR3两个版本。支持运行Android 7.1和Lubuntu Desktop两种系统,它们均带有GPU和VPU加速处理。

2 硬件特性

  • 主控芯片: Rockchip RK3399
    • CPU: big.LITTLE大小核架构,双Cortex-A72大核(up to 2.0GHz)+四Cortex-A53小核结构(up to 1.5GHz)
    • GPU: Mali-T864 GPU,支持OpenGL ES1.1/2.0/3.0/3.1, OpenVG1.1, OpenCL, DX11, 支持AFBC(帧缓冲压缩)
    • VPU: 支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps, 双VOP显示等视频编解码功能
  • 电源管理单元: RK808-D PMIC, 搭配独立DC/DC, 支持动态调压, 软件关机, 按键开机, RTC唤醒, 睡眠唤醒等功能
  • 内存: 双通道4GB LPDDR3-1866, 或 双通道2GB DDR3-1866
  • Flash: 支持扩展eMMC模块
  • 有线网络: 原生千兆以太网
  • Wi-Fi/蓝牙: 802.11a/b/g/n/ac, Bluetooth 4.1 双频Wi-Fi蓝牙模块, 双天线
  • 视频输入: 1个或2个4线MIPI-CSI, 双ISP像素处理能力高达13MPix/s,支持双路摄像头数据同时输入
  • 视频输出
    • HDMI: HDMI 2.0a, 支持4K@60Hz显示,支持HDCP 1.4/2.2
    • LCD Interface: 一个4线MIPI-DSI
  • Audio Out: 3.5mm 双通道耳机接口, 或者通过HDMI输出
  • Audio In: 2.54mm排针形式(默认不焊)的麦克风接口
  • USB 3.0: 4个USB 3.0 Host A型接口
  • USB Type-C: 支持USB2.0 OTG 和 5V电源输入
  • microSD Slot x 1
  • 40Pin GPIO 扩展接口:
    • 2 X 3V/1.8V I2C, up to 1 x 3V UART, 1 X 3V SPI, 1 x SPDIF_TX, up to 8 x 3V GPIOs
    • 1 x 1.8V 8通道 I2S
  • 24Pin 扩展接口:
    • 2个独立的原生USB 2.0 Host
    • PCIe x2
    • PWM x1, PowerKey
  • 调试串口: 4 Pin 2.54mm 调试串口, 3V电平, 波特率为1500000
  • LED: 1 x power LED and 1 x GPIO Controled LED
  • RTC电池座子: 2 Pin 1.27/1.25mm RTC备份电池接口
  • 供电电源: DC 5V/3A
  • PCB: 8 Layer, 85 mm x 56 mm
  • 环境工作温度: 0℃ to 80℃

3 接口布局和尺寸

3.1 接口布局

NanoPi M4 Layout
NanoPi M4 Layout
  • 40 Pin GPIO1 引脚定义
Pin# Assignment Pin# Assignment
1 VCC3V3_SYS 2 VDD_5V
3 I2C2_SDA(3V) 4 VDD_5V
5 I2C2_SCL(3V) 6 GND
7 GPIO1_A0(3V) 8 GPIO4_C1/I2C3_SCL(3V)
9 GND 10 GPIO4_C0/I2C3_SDA(3V)
11 GPIO1_A1(3V) 12 GPIO1_C2(3V)
13 GPIO1_A3(3V) 14 GND
15 GPIO1_A4(3V) 16 GPIO1_C6(3V)
17 VCC3V3_SYS 18 GPIO1_C7(3V)
19 SPI1_TXD/UARM4_TX(3V) 20 GND
21 SPI1_RXD/UARM4_RX(3V) 22 GPIO1_D0(3V)
23 SPI1_CLK(3V) 24 SPI1_CSn0(3V)
25 GND 26 GPIO4_C5/SPDIF_TX(3V)
27 I2C2_SDA(1.8V) 28 I2C2_SCL(1.8V)
29 I2S0_LRCK_RX(1.8V) 30 GND
31 I2S0_LRCK_TX(1.8V) 32 I2S_CLK(1.8V)
33 I2S0_SCLK(1.8V) 34 GND
35 I2S0_SDI0(1.8V) 36 I2S0_SDO0(1.8V)
37 I2S0_SDI1SDO3(1.8V) 38 I2S0_SDI2SDO2(1.8V)
39 GND 40 I2S0_SDI3SDO1(1.8V)
  • 24 Pin GPIO2 引脚定义
Pin# Assignment Pin# Assignment
1 VCC5V0_SYS 2 VCC5V0_SYS
3 PCIE_RX1_P 4 PCIE_TX1P
5 PCIE_RX1_N 6 PCIE_TX1N
7 GND 8 GND
9 PCIE_RX0_P 10 PCIE_TX0P
11 PCIE_RX0_N 12 PCIE_TX0N
13 GND 14 GND
15 PCIE_REF_CLKP 16 HOST0_DM
17 PCIE_REF_CLKN 18 HOST0_DP
19 GND 20 GND
21 PWR_KEY 22 HOST1_DM
23 GPIO4_C6/PWM1(3V) 24 HOST1_DP
  • MIPI-CSI接口引脚定义
0.5mm FPC 连接器
MIPI-CSI2也可作为MIPI-DSI接口连接LCD显示屏
Pin# MIPI-CSI1 MIPI-CSI2 Description
1 VCC5V0_SYS VCC5V0_SYS 5V Power ouput
2 VCC5V0_SYS VCC5V0_SYS 5V Power ouput
3 GND GND Return current path
4 VCC_CSI_AF2.8V VCC_CSI_AF2.8V 2.8V Power for VCM
5 VCC_CSI_1.2V VCC_CSI_1.2V 1.2V Power for image sensor core circuit
6 VCC1V8_CAM VCC1V8_CAM 1.8V power for I/O circuit
7 VCC_CSI_2.8V VCC_CSI_2.8V 2.8V power for image sensor analog circuit
8 VCC_CSI_1.0V VCC_CSI_1.0V 1.0V Power for image sensor core circuit
9 I2C1_SCL I2C2_SCL 1.8V I2C clock signal
10 I2C1_SDA I2C2_SDA 1.8V I2C data signal
11 MIPI_CSI0_RST MIPI_CSI1_RST reset camera module
12 MIPI_CSI0_PWN MIPI_CSI1_PWN Power down camera module
13 GND GND Return current path
14 GPIO2_B3_CIF_CLKOUTA GPIO2_B3_CIF_CLKOUTA MCLK to camera module
15 GND GND Return current path
16 MIPI_RX0_D3P MIPI_TX1/RX1_D3P MIPI CSI positive differential data line transceiver output
17 MIPI_RX0_D3N MIPI_TX1/RX1_D3N MIPI CSI negative differential data line transceiver output
18 GND GND Return current path
19 MIPI_RX0_D2P MIPI_TX1/RX1_D2P MIPI CSI positive differential data line transceiver output
20 MIPI_RX0_D2N MIPI_TX1/RX1_D2N MIPI CSI negative differential data line transceiver output
21 GND GND Return current path
22 MIPI_RX0_D1P MIPI_TX1/RX1_D1P MIPI CSI positive differential data line transceiver output
23 MIPI_RX0_D1N MIPI_TX1/RX1_D1N MIPI CSI negative differential data line transceiver output
24 GND GND Return current path
25 MIPI_RX0_CLKP MIPI_TX1/RX1_CLKP MIPI CSI positive differential clock line transceiver output
26 MIPI_RX0_CLKN MIPI_TX1/RX1_CLKN MIPI CSI negative differential clock line transceiver output
27 GND GND Return current path
28 MIPI_RX0_D0P MIPI_TX1/RX1_D0P MIPI CSI positive differential data line transceiver output
29 MIPI_RX0_D0N MIPI_TX1/RX1_D0N MIPI CSI negative differential data line transceiver output
30 GND GND Return current path
  • eMMC Socket接口引脚定义
Pin# Assignment Pin# Assignment
1 EMMC_D0 2 EMMC_D1
3 EMMC_D2 4 EMMC_D3
5 EMMC_D4 6 EMMC_D5
7 EMMC_D6 8 EMMC_D7
9 EMMC_STRB 10 GND
11 EMMC_CMD 12 EMMC_CLKO
13 N/C 14 GND
15 N/C 16 VCC1V8_S3
17 eMMC_RST 18 VCC3V3_S3
19 GND 20 GND
  • 调试串口引脚定义
3V电平, 波特率1500000bps
Pin# Assignment Description
1 GND 0V
2 VCC5V0_SYS 5V power output
3 UART2DBG_TX output
4 UART2DBG_RX intput
  • USB接口
USB 3.0 接口具有2A过流保护功能.
  • RTC
我们实测的RTC备份电流为27uA.
连接器型号: Molex 53398-0271
其他说明
  1. 只能从Type-C或40Pin GPIO接口的第2和第4脚给板子供电, 电压范围4.7~5.5V
  2. 板子原理图: NanoPi-M4-2GB-1807-Schematic.pdf NanoPi-M4-4GB-1807-Schematic.pdf

3.2 尺寸

NanoPi M4 Dimensions

PCB dxf文件, 仅供做产品时结构设计使用: NanoPi-M4-1807-Drawing(dxf).zip

4 快速入门

4.1 准备工作

要开启你的NanoPi-M4,请先准备好以下硬件:

  • NanoPi-M4主板
  • Type-C数据线
  • TF卡: Class10或以上的8GB microSD卡
  • USB转串口适配器(可选,用于调试或PC上进行操作)
  • 一个5V/3A或以更大功率的电源适配器
  • 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
  • 一套USB键盘鼠标,同时连接更多USB的设备时还需要USB HUB
  • 一台电脑,需要联网,建议使用Ubuntu 18.04 64位系统

4.2 快速从SD卡启动

首先访问此处的下载地址下载需要的固件文件:

  • 您需要准备一张8G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
Image Files
rk3399-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.zip FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core
rk3399-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip LUbuntu桌面版固件,自带X Window图形界面
Flash Utility:
win32diskimager.rar Windows utility. Under Linux users can use "dd"
  • 将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
  • 当制作完成 SD 卡后,拔出 SD 卡插入卡槽,上电启动即可。


4.3 串口调试

如果你想查看NanoPi-M4启动时更多详细的信息,或者更直接的对其进行控制,建议连接并使用调试串口。

  • 使用准备好的USB转串口适配器和连接线(需另购),连接开发板:
Pin# 开发板调试串口 USB转串口适配器
1 GND GND
2 VCC5V0_SYS NC (不需要连接)
注: Matrix USB2UART适配器,请将5V ON/OFF切换到OFF
3 UART2DBG_TX RX
4 UART2DBG_RX TX
  • 将USB转串口适配器连接到PC Linux,通常会识别为ttyUSB0,或使用以下命令来确定设备名字:
 dmesg | grep ttyUSB
 ls -l /dev/ttyUSB*
  • 在PC Linux安装minicom,运行minicom,配置串口设备和参数(1500000 Bps, 8N1, 流控无)
 sudo apt-get install minicom
 minicom -s

注意: RK3399调试串口的波特率缺省是1500000,有些适配器可能达不到此速率,还有可能因USB延长线或连接到USB hub出现异常(如乱码),需检查并更换。

5 Android7系统的使用

rk3399-android7-home
rk3399-android7-icons

我们为 NanoPi-M4 提供了完善的Android7.1 BSP,代码使用 gitlab.com 平台管理,完全开源,支持GPU加速和VPU硬件加速。

5.1 使用MIPI摄像头进行拍照和录像

NanoPi-M4在Android系统下,可以搭配 MIPI摄像头CAM1320 进行拍照和录像,操作比较简单,连接摄像头到NanoPi-M4的MIPI接口,开机进入 Android 系统,用系统自带的 Camera 应用即可完成拍照和录像,操作跟 Android 手机是一样的。

NanoPi-M4板上共有两个MIPI接口可以连接两个摄像头分别对应前置摄像头和后置摄像头,其对应关系如下表所示:

接口位置 摄像头位置
MIPI-CSI1 Android 后置摄像头
MIPI-CSI2 Android 前置摄像头

5.2 HDMI显示设置

如果连接了HDMI显示设备,可进入 Android 的 Settings -> Display -> HDMI 进行设置。

HDMI Resolution 缺省为 Auto,可手动设置显示分辨率,最高可支持 4K 分辨率
Screen Zoom 用户可观察红色边框的显示,点击中间的4个箭头按钮来进行缩放调节
HDMI Rotation 可进行横竖屏切换

6 FriendlyCore的使用

6.1 介绍

FriendlyCore,是一个没有预装X Desktop,基于Ubuntu core构建的系统 (版本: 18.04)。

FriendlyCore的定位是为企业客户提供可直接用于产品的基础OS,Core的含义是指"核心"与"可量产",FriendlyCore与Ubuntu base最小系统的定位不同,FriendlyCore并不只是提供命令行界面,它提供了两种形式的图形界面:
1)针对RK3399优化的Qt 5.10.0,支持GPU和VPU加速,提供QtQuick/QtWebEngine/QtMultimedia/WebGL等Qt模块以及KMS、EGLFS和XCB三种显示插件;
2) 集成Xorg最小系统,可以以最轻量的方式运行X11应用,X11服务器同样支持硬件加速;

FriendlyCore在 RK3399 平台下的其他特性还包括:

  • 支持7寸电容屏HD702,与HDMI同时连接时,可实现双屏异显,或者同步显示
  • 支持 Gstreamer 1.0 多媒体框架
  • 支持命令行和Qt硬解播放器
  • 支持Qt5 WebGL,可以在其他设备上用浏览器上显示Qt界面
  • 支持Qt5 VNC,可以将Qt应用作为VNC Server的形式运行,轻松实现远程控制
  • 支持蓝牙,已预装bluez等相关软件包

6.2 运行FriendlyCore

  • 对于有HDMI接口的板子,如果要在电视上进行操作,您需要连接USB鼠标和键盘。
  • 如果您需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。

NanoPi-M4需要使用USB转串口模块,连接方法如下图所示:
M4usb2serialport.jpg

  • FriendlyCore默认帐户:

普通用户:

   用户名: pi
   密码: pi

Root用户:

   用户名: root
   密码: fa

默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。

  • 更新软件包:
$ sudo apt-get update

6.3 开发Qt程序

FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持OpenGL ES和GPU硬件加速,只是调用方式不同,具体如下:

  • KMS – 使用Linux内核的DRM显示接口来渲染界面
  • EGLFS – 使用OpenGL ES接口来渲染界面
  • XCB – 在X11服务器上运行,并集成到X11窗口环境


三种插件所支持的Qt特性会有所不同,请根据你的需求来选择:

插件名称 OpenGL ES QtWebEngine QtMultimedia 视频硬解播放 双屏异显
KMS Yes No Yes No Yes
EGLFS Yes No Yes No No
XCB Yes Yes Yes Yes Yes

建议使用 KMS或XCB 插件。

为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:

脚本文件名 作用
/usr/bin/setqt5env-kms 设置kms插件所需要的环境变量
/usr/bin/setqt5env-eglfs 设置eglfs插件所需要的环境变量
/usr/bin/setqt5env-xcb 设置xcb插件所需要的环境变量
/usr/bin/setqt5env-nogui 仅供无界面的Qt程序使用

例如要设置用KMS插件来显示程序界面,可以使用以下命令:

. setqt5env-kms
./apps

(注: .与字母s之间有个空格)

6.3.1 Qt开发环境搭建

FriendlyELEC为RK3399平台提供了两种交叉编译Qt程序的方法:

6.3.2 Qt示例演示

FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,下面分别介绍它们:

6.3.3 Qt Quick示例:CinematicExperience


Qt Quick 是 Qt 提供的一种高级用户界面技术,使用它可轻松地为移动和嵌入式设备创建流畅的用户界面。Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你可以用它创建非常炫非常酷非常迷人的界面。
CinematicExperience是一个用Qt Quick实现的影片选择界面。
该例子使用了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例能体现RK3399的硬件性能与软件优化,在RK3399平台上非常流畅。
在命令行执行以下命令启动该示例:

cd /opt/Qt5_CinematicExperience
./run.sh

界面如下所示:
Qt5-cinematicExperience.gif

6.3.4 Qt WebEngine示例:网页浏览器

Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。
示例展示的网页浏览器是 Qt5 自带的Demo,运行命令如下:

cd /opt/qt5-brower
./run.sh

界面如下所示:
Qt5-brower.jpg

注:Qt WebEngine在FriendlyCore平台上需要使用Xcb插件来运行。

6.3.5 Qt 双屏异显示例

这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容, 用以下命令启动:

cd /opt/qt5-multi-screen-demo
./run.sh

双屏异显的效果如下所示:
Qt5-multi-screen.jpg

6.3.6 Qt Multimedia: 硬解播放器qt5-player

qt5-player播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放。
在命令行执行以下命令启动该示例:

cd /opt/qt5-player
./run.sh

播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Qt5-player.gif

6.3.7 Qt WebGL示例: nmapper

Qt WebGL允许你在其他设备的网页游览器查看并远程操作运行在开发板上的Qt程序,这个特性使得实现远程控制变得简单。
在运行示例之前,你的开发板需要先连接网络,然后在开发版本执行以下命令:

cd /opt/qt5-nmapper
./run-with-webgl.sh

然后在电脑或者手机上打开网页游览器,在浏览器的地址栏输入开发板的IP地址,应该就能看到Qt界面了,效果如下所示:
Qtwebgl.gif

6.3.8 Qt VNC示例: 智能家居控制界面

Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和控制,用QtWidgets或者QML编写的应用都是支持的。
执行以下命令启动:

cd /opt/qt5-smarthome
./run-with-vnc.sh

然后在电脑或者手机上安装并打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到界面了,如下图所示:
Qt5smarthomevnc.png

6.3.9 Qt 双USB摄像头示例

本示例演示同时预览两个USB摄像头的图像,请在运行示例之前,先连接好两个USB摄像头和屏幕,一般来说标准的UVC摄像头都可以,不过还是建议使用以下我们测试过的型号:

序号 型号
1 KS2A242
2 罗技C922 Pro

执行以下命令启动:

cd /opt/dual-camera
./run.sh

运行界面以及所使用的摄像头如下图所示:
Qt5dualcamera.jpg

6.4 开机自动运行Qt示例程序

使用npi-config工具进行开启:

sudo npi-config

进入Boot Options -> Autologin -> Qt/Embedded,选择Enable然后重启即可。

6.5 扩展TF卡文件系统

第一次启动FriendlyCore系统时,系统会自动扩展文件系统分区,请耐心等待,TF卡/eMMC的容量越大,需要等待的时间越长,进入系统后执行下列命令查看文件系统分区大小:

df -h

6.6 使用蓝牙传输文件

以传输文件到手机为例进行说明,首先,将你的手机蓝牙设置为可侦测状态,然后执行以下命令开始蓝牙搜索:

hcitool scan


搜索到设备时,结果举例如下:

Scanning ...
    2C:8A:72:1D:46:02   HTC6525LVW

这表示搜索到一台名为HTC6525LVW的手机,我们记下手机名称前面的MAC地址,然后用sdptool命令查看该手机支持的蓝牙服务:

sdptool browser 2C:8A:72:1D:46:02

注:上述命令中的MAC地址请替换成手机实际的蓝牙MAC地址
这个命令会详细列出手机蓝牙所支持的协议,我们需要关心的是一个名为 OBEX Object Push 的文件传输服务,以HTC6525LVW手机为例,其显示结果如下所示:

Service Name: OBEX Object Push
Service RecHandle: 0x1000b
Service Class ID List:
  "OBEX Object Push" (0x1105)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 12
  "OBEX" (0x0008)
Profile Descriptor List:
  "OBEX Object Push" (0x1105)
    Version: 0x0100

从上面的信息可以看到,这个手机的OBEX Object Push服务的所用的频道是12, 我们需要将它传递给obexftp命令,最后发起文件传输请求的命令如下:

obexftp --nopath --noconn --uuid none --bluetooth -b 2C:8A:72:1D:46:02 -B 12 -put example.jpg

注:上述命令中的MAC地址、频道和文件名请替换成实际的

执行上述命令后,请留意手机屏幕,正常情况下手机会弹出配对和接收文件的提示,确定后就开始文件传輪了。

蓝牙常见问题:
1) 开发板上找不到蓝牙设备, 可尝试用以下命令开启蓝牙:

rfkill unblock 0

2) 提示找不到相关命令,可尝试用以下命令安装相关软件:

apt-get install bluetooth bluez obexftp openobex-apps python-gobject ussp-push

6.7 连接WiFi

无论是SD WiFi还是USB WiFi, 它们的连接方式都是一样的。正基科技的APXX系列芯片属于SD WiFi,另外系统默认也已经支持市面上众多常见的USB WiFi,已测试过的USB WiFi型号如下:

序号 型号
1 RTL8188CUS/8188EU 802.11n WLAN Adapter
2 RT2070 Wireless Adapter
3 RT2870/RT3070 Wireless Adapter
4 RTL8192CU Wireless Adapter
5 小米WiFi mt7601
6 5G USB WiFi RTL8821CU
7 5G USB WiFi RTL8812AU

目前使用 NetworkManager 工具来管理网络,其在命令行下对应的命令是 nmcli,要连接WiFi,相关的命令如下:

  • 切换到root账户
$ su root
  • 查看网络设备列表
$ nmcli dev

注意,如果列出的设备状态是 unmanaged 的,说明网络设备不受NetworkManager管理,你需要清空 /etc/network/interfaces下的网络设置,然后重启.

  • 开启WiFi
$ nmcli r wifi on
  • 扫描附近的 WiFi 热点
$ nmcli dev wifi
  • 连接到指定的 WiFi 热点
$ nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0

请将 SSID和 PASSWORD 替换成实际的 WiFi名称和密码。
连接成功后,下次开机,WiFi 也会自动连接。

更详细的NetworkManager使用指南可参考这篇文章: Use NetworkManager to configure network settings

如果你的USB WiFi无法正常工作, 大概率是因为文件系统里缺少了对应的USB WiFi固件。对于Debian系统, 可以在Debian-WiFi里找到并安装USB WiFi芯片的固件。而对于Ubuntu系统, 则可以通过下列命令安装所有的USB WiFi固件:

$ apt-get install linux-firmware

一般情况下, 各种WiFi芯片的固件都存放在/lib/firmware目录下。


6.8 连接以太网

默认插上网线开机,会自动连接并通过DHCP获取IP地址,如需要配置静态IP地址,请参考 NetworkManager 的相关文档: Use NetworkManager to configure network settings

6.9 访问GPIO/I2C/串口等硬件资源

请参考下面的文档:

6.10 定制命令行的欢迎信息(文字LOGO)

欢迎信息主要是这个目录下的脚本来打印的:

/etc/update-motd.d/

比如要修改 FriendlyELEC 的大字LOGO,可以修改/etc/update-motd.d/10-header 这个文件,比如要将LOGO改为HELLO,可将以下行:

TERM=linux toilet -f standard -F metal $BOARD_VENDOR

改为:

TERM=linux toilet -f standard -F metal HELLO

6.11 修改时区

例如更改为Shanghai时区:

sudo rm /etc/localtime
sudo ln -ls /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

6.12 选择系统默认的音频设备

可以通过下面的操作步骤,设置系统默认的音频设备。
可用以下命令查看系统中所有的声卡设备 (注:不同的开发板结果会有所不同):

pi@NanoPi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: realtekrt5651co [realtek,rt5651-codec], device 0: ff880000.i2s-rt5651-aif1 rt5651-aif1-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: rockchiphdmi [rockchip,hdmi], device 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: ROCKCHIPSPDIF [ROCKCHIP,SPDIF], device 0: ff870000.spdif-dit-hifi dit-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

可以看到,硬件上有如下声卡设备:

声卡设备 声卡序号 说明
realtekrt5651co 0 Realtek声卡的缺省输出接口(通过3.5mm耳机输出)
rockchiphdmi 1 HDMI输出
ROCKCHIPSPDIF 2 光纤输出 (注:暂不可用,因为硬件没有引出)

要配置成将音频输出到3.5mm耳机接口,可修改配置文件/etc/asound.conf,修改成如下内容:

defaults.pcm.card 0
defaults.pcm.device 0

要配置成将音频输出到HDMI,则将上面的defaults.pcm.card修改为1。
需要注意的是,有些板子由于没有Realtek声卡 (没有耳机输出接口),所以HDMI设备的序号会是card 0,所以配置时,要以aplay -l命令的结果为准。

6.13 设置PWM风扇的行为

默认情况下,风扇的转速是根据cpu温度动态调整的,如果需要取消温控,让风扇一直处于运行状态,可以把脚本 /usr/bin/start-rk3399-pwm-fan.sh 修改成以下内容来实现:

#!/bin/bash
 
echo 0 > /sys/class/pwm/pwmchip1/export
sleep 1
echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

7 如何编译系统

7.1 搭建编译环境

搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
sudo apt-get install flex curl libncurses5-dev libssl-dev zlib1g-dev gawk minicom
sudo apt-get install openjdk-8-jdk
sudo apt-get install exfat-fuse exfat-utils device-tree-compiler liblz4-tool

更多说明可查看 https://source.android.com/source/initializing.html

7.2 安装交叉编译器

7.2.1 安装aarch64-linux-gcc 6.4

首先下载并解压编译器:

git clone https://github.com/friendlyarm/prebuilts.git
sudo mkdir -p /opt/FriendlyARM/toolchain
sudo tar xf prebuilts/gcc-x64/aarch64-cortexa53-linux-gnu-6.4.tar.xz -C /opt/FriendlyARM/toolchain/

然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:

. ~/.bashrc

这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:

aarch64-linux-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gcc
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/6.4-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/6.4.0/lto-wrapper
Target: aarch64-cortexa53-linux-gnu
Configured with: /work/toolchain/build/aarch64-cortexa53-linux-gnu/build/src/gcc/configure --build=x86_64-build_pc-linux-gnu
--host=x86_64-build_pc-linux-gnu --target=aarch64-cortexa53-linux-gnu --prefix=/opt/FriendlyARM/toolchain/6.4-aarch64
--with-sysroot=/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++
--enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-cpu=cortex-a53
...
Thread model: posix
gcc version 6.4.0 (ctng-1.23.0-150g-FA)

7.3 编译Android7源代码

7.3.1 下载Android7源代码

NanoPi-M4 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone https://gitlab.com/friendlyelec/rk3399-nougat.git

7.3.2 编译并生成Image文件

使用以下命令编译 Android7:

cd rk3399-nougat
./build-nanopc-t4.sh -F -M

7.3.3 更新系统为自已编译的Image

编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 NanoPi-M4上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 nougat 目录;
3) 将SD卡插入NanoPi-M4,重新烧写Andorid系统即可;

8 硬件资源访问

8.1 串口访问

如下表所示,仅 UART4 可供应用程序开发使用:

串口设备 串口资源占用情况
UART0 已被蓝牙占用
UART1 已被千兆以太网占用
UART2 已被作为调试串口
UART3 已被千兆以太网占用
UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)

8.2 烧写系统到eMMC(需购买eMMC模块)

FriendlyELEC推出的基于RK3399的开发板,支持三种方式烧写系统到eMMC:

  • 方法1)SD卡脱机烧写,用SD卡启动开发板,通过EFlasher工具进行烧写 (推荐使用此方法)
  • 方法2)通过USB Type-C数据线,在Windows下用Rockchip提供的工具进行烧写
  • 方法3)通过USB Type-C数据线,在Linux下用Rockchip提供的工具进行烧写

建议采用第一种方法进行烧写。

8.2.1 使用SD卡脱机烧写

访问此处的下载地址下载SD卡脱机烧写所需的文件及工具:

Image Files
rk3399-eflasher-YYYYMMDD-android.img.zip Android7.1.2 系统固件
rk3399-eflasher-YYYYMMDD-friendly-core-arm64.img.zip 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建
rk3399-eflasher-YYYYMMDD-lubuntu.img.zip Lubuntu桌面版固件 (内置Qt 5.10.0)
Flash Utility:
win32diskimager.rar Windows utility. Under Linux users can use "dd"

详细操作步骤如下:

  • 准备一张8G或以上容量的SDHC卡;
  • 下载并解压 固件文件rk3399-eflasher-YYYYMMDD-XXXX.img.zip 和 工具win32diskimager;
  • 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的EFlasher固件,点击 Write 按钮烧写到SD卡;
  • 或者在 Linux下使用 dd 命令将 rk3399-eflasher-YYYYMMDD-XXXX..img 写入 SD卡;
  • 将SD卡从电脑端弹出,插入NanoPi-M4的microSD卡槽;
  • 给NanoPi-M4连接好 12V/2A 的DC接口电源及HDMI显示设备,长按NanoPi-M4上的Power键直到板上的PWR灯亮,系统会从SD卡启动,稍等片刻(约15秒)后会在显示设备上看到EFlasher工具的界面;
  • 通过USB鼠标,或者触摸屏,在EFlasher工具界面上选择你要烧写的系统进行烧写;
  • 烧写完成后,轻按Power键关机,从NanoPi-M4端弹出SD卡;
  • 长按Power开机,会从eMMC启动你刚刚烧写的系统;

8.2.2 Windows下通过Type-C数据线进行烧写

访问此处的下载地址下载Windows下使用Type-C数据线烧写所需的文件及工具:

Image Files
android-nougat-images.tgz Android 7.1.2固件
core-qte-arm64-images.tgz FriendlyCore固件,内置Qt5.10
lubuntu-desktop-images.tgz Lubuntu桌面版固件,自带X Window图形界面
Flash Utility:
AndroidTool_Release_v2.42.7z Rockchip提供的Windows下通过Type-C数据线烧写系统的工具
DriverAssitant_v4.5.tgz Rockchip提供的Windows下的USB驱动,使用AndroidTool烧写系统时需要安装此驱动

详细操作步骤如下:

  • 初次使用时,请先下载DriverAssitant_v4.5.tgz,解压后安装USB驱动;
  • 根据自己的需要下载images-for-eflasher下的系统固件并解压,如Android 7的固件文件是android-nougat-images.tgz,其中固件解压后的文件idbloader.img和info.conf,使用AndroidTool时可忽略。
  • 下载AndroidTool_Release_v2.42.7z 并解压,以管理员身份运行AndroidTool.exe
  • 可根据Android开发工具手册.pdf,导入分区配置即固件中的parameter.txt,然后指定各分区的烧写文件路径,如下图所示:

AndroidTools DI 01.png

  • 连接好12V/2A的DC接口电源及HDMI显示设备,连接Type-C数据线到PC,按住Recovery键再长按(1.5秒以上)Power键开机,AndroidTool会显示“发现一个LOADER设备”
    a) 如果eMMC没有烧写过系统或eMMC的系统被擦除或损坏则会显示为MASKROM设备;
    b) 您也可以按住BOOT键再长按Power键开机,同时持续按住BOOT键5秒以上强制进入MASKROM模式;
    c) 如果显示“没有发现设备”,请先检查是否已成功安装驱动,检查Type-C数据线然后按上述方法重新开机,或按住Recovery键再按Reset键;
    d) 另外,如果已成功启动系统,可通过串口、adb或ssh等方式在板子上运行reboot loader重启板子并进入LOADER模式。
  • 点击执行即可下载固件到eMMC,请耐心等待,烧写成功结束后将自动重启。
  • 如果需要更换系统,例如eMMC已经安装了Linux而现在需要烧写Android,需要先对eMMC进行一些擦写操作:

你需要在界面上选择 “升级固件”-〉界面上选择固件 “MiniLoaderAll.bin“,然后点击“擦除Flasher”。 Rk-clean-emmc.png

8.2.3 Linux下通过Type-C数据线进行烧写

可访问此处的下载地址下载需要的固件文件及工具。

Image Files
android-nougat-images.tgz Android 7.1.2固件
core-qte-arm64-images.tgz FriendlyCore固件,内置Qt5.10
lubuntu-desktop-images.tgz LUbuntu桌面版固件,自带X Window图形界面
Flash Utility:
Linux_Upgrade_Tool_1.27.rar Rockchip提供的Linux下通过Type-C数据线更新系统的工具

Linux_Upgrade_Tool是Rockchip提供的Linux下的命令行工具,用于通过Type-C数据线来升级eMMC中的固件,同时还提供了如擦除eMMC、直接读/写eMMC等功能。

  • 安装upgrade_tool: 下载Linux_Upgrade_Tool_1.27.rar后解压即可获得upgrade_tool,然后复制并设置权限
 sudo cp upgrade_tool /usr/local/sbin
 sudo chown root:root /usr/local/sbin/upgrade_tool
 sudo chmod 0755 /usr/local/sbin/upgrade_tool
  • 根据自己的需要下载images-for-eflasher下的系统固件并解压,如Lubuntu的固件文件是lubuntu-desktop-images.tgz
  • 参考“使用AndroidTool”,启动板子并进入LOADER或MASKROM模式;
  • 运行以下命令即可烧写Lubuntu系统并重启:
 sudo upgrade_tool ul MiniLoaderAll.bin
 sudo upgrade_tool di -p parameter.txt
 sudo upgrade_tool di uboot uboot.img
 sudo upgrade_tool di trust trust.img
 sudo upgrade_tool di resource resource.img
 sudo upgrade_tool di kernel kernel.img
 sudo upgrade_tool di boot boot.img
 sudo upgrade_tool di rootfs rootfs.img
 sudo upgrade_tool RD
  • 如果想烧写Android 7到eMMC,可下载固件文件并解压后运行以下命令:
 sudo upgrade_tool ul MiniLoaderAll.bin
 sudo upgrade_tool di -p parameter.txt
 sudo upgrade_tool di uboot uboot.img
 sudo upgrade_tool di trust trust.img
 sudo upgrade_tool di misc misc.img
 sudo upgrade_tool di resource resource.img
 sudo upgrade_tool di kernel kernel.img
 sudo upgrade_tool di boot boot.img
 sudo upgrade_tool di recovery recovery.img
 sudo upgrade_tool di system system.img
 sudo upgrade_tool RD

如果固件中的MiniLoaderAll.bin版本不同,或烧写与eMMC中不同的系统,则可能会遇到无法成功启动的情况,需要擦除eMMC。
先启动板子并进入LOADER,运行以下命令可删除eMMC,如程序显示"Download Boot Start"后超过10s无变化可按Reset键,然后再运行一次以下命令。

 sudo upgrade_tool EF MiniLoaderAll.bin

擦除成功结束后将显示"Erase flash ok."

9 查看瑞芯微原厂资料

10 原理图、尺寸图

11 更新日志

11.1 2018-08-24

首页发布