NanoPi Duo/zh

From FriendlyELEC WiKi
Revision as of 11:20, 26 December 2017 by Tzs (Talk | contribs) (updated by API)

Jump to: navigation, search

English

1 介绍

概览
正面
背面
  • NanoPi Duo(以下简称Duo)是友善之臂团队开发的一款双列直插超小型创客神器,尺寸只有50x25.4mm。它采用全志四核A7处理器H2+, 配备256M/512M DDR3内存,板载WiFi模块,可运行完整的Ubuntu Core等嵌入式Linux系统。
  • NanoPi Duo小巧精致,接口丰富,可采用MicroUSB直接供电,支持Micro SD卡直接启动运行系统,并可直接插入面包板使用。它引出了USB, SPI, UART, I2C, PWM, IR,音频输入与输出,百兆以太网等接口管脚,非常方便调试开发。
  • NanoPi Duo可支持使用WiringPi, RPi.GPIO, Python等编程库, 完全开源, 非常适合轻量级IoT应用开发。

2 资源特性

  • CPU: Allwinner H2+, Quad-core Cortex-A7
  • DDR3 RAM: 256MB/512MB
  • Connectivity: 10/100M Ethernet
  • Wifi:XR819
  • USB Host: 2.54mm pin x2, exposed in 2.54mm pitch pin header
  • MicroSD Slot x 1
  • MicroUSB: OTG and power input
  • Debug Serial Interface: exposed in 2.54mm pitch pin header
  • Audio input/output Interface: exposed in 2.54mm pitch pin header
  • GPIO: 2.54mm spacing 12pin x2. It includes UART, SPI, I2C, IO etc
  • PCB Dimension: 25.4 x 50mm
  • Power Supply: DC 5V/2A
  • Temperature measuring range: -40℃ to 80℃
  • OS/Software: U-boot,Linux Kernel 4.11.2 (mainline) , Ubuntu 16.04.2 LTS (Xenial)
  • Weight: xxg(With Pin-headers)

3 接口布局和尺寸

3.1 接口布局

NanoPi Duo接口布局
pinout
  • GPIO管脚定义
Pin silk screen Name Linux gpio Pin silk screen Name Linux gpio
MICN MIC_N SPD EPHY-LED-SPD
MICP MIC_P LNK EPHY-LED-LINK
LOR LINEOUT_R TD+ EPHY-TXP
LOL LINEOUT_L TD- EPHY-TXN
CVB CVBS RD+ EPHY-RXP
TX1 UART1_TX/GPIOG6 198 RD- EPHY-RXN
RX1 UART1_RX/GPIOG7 199 DP2 USB-DP2
MO UART3_RTS/SPI1_MOSI/GPIOA15 15 DM2 USB-DM2
MI UART3_CTS/SPI1_MISO/GPIOA16 16 DP3 USB-DP3
CLK UART3_RX/SPI1_CLK/GPIOA14 14 DM3 USB-DM3
CS UART3_TX/SPI1_CS/GPIOA13 13 IOG11 GPIOG11 203
SDA I2C0_SDA/GPIOA12 12 IRRX GPIOL11/IR-RX 363
SCL I2C0_SCL/GPIOA11 11 GND GND
GND GND 3V3 SYS_3.3V
DTX DEBUG_TX(UART_TXD0)/GPIOA4 4 5Vin VDD_5V
DRX DEBUG_RX(UART_RXD0)/GPIOA5/PWM0 5 5Vin VDD_5V


说明
  1. SYS_3.3V: 3.3V电源输出
  2. VDD_5V: 5V电源输入/输出。当电压大于MicroUSB时,向板子供电,否则板子从MicroUSB取电。输入范围:4.7~5.6V
  3. 全部信号引脚均为3.3V电平,输出电流为5mA,可以带动小负荷模块,io都不能带负载
  4. 更详细的信息请查看原理图,NanoPi Duo原理图

3.2 机械尺寸

NanoPi-Duo-1606-dimensions.png

详细尺寸:NanoPi_Duo_v1.0_1706 pcb的dxf文件

4 快速入门

4.1 准备工作

要开启你的NanoPi Duo新玩具,请先准备好以下硬件

  • NanoPi Duo主板
  • microSD卡/TF卡: Class10或以上的 8GB SDHC卡
  • 一个microUSB接口的外接电源,要求输出为5V/2A(可使用同规格的手机充电器)
  • 一台电脑,需要联网,建议使用Ubuntu 16.04 64位系统
  • 一个串口模块

4.2 经测试使用的TF卡

制作启动NanoPi Duo的TF卡时,建议Class10或以上的 8GB SDHC卡。以下是经友善之臂测试验证过的高速TF卡:

  • SanDisk闪迪 TF 8G Class10 Micro/SD 高速 TF卡:

SanDisk MicroSD 8G

  • SanDisk闪迪 TF128G 至尊高速MicroSDXC TF 128G Class10 48MB/S:

SanDisk MicroSD 128G

  • 川宇 8G手机内存卡 8GTF卡存储卡 C10高速class10 micro SD卡:

chuanyu MicroSD 8G

4.3 制作一张带运行系统的TF卡

4.3.1 下载系统固件

首先访问下载地址下载需要的固件文件(officail-ROMs目录)和烧写工具(tools目录):

使用以下固件:
nanopi-duo_friendlycore-xenial_4.x.y_YYYYMMDD.img.zip 基于UbuntuCore构建的FriendlyCore系统固件,使用Linux-4.x.y内核
烧写工具:
win32diskimager.rar Windows平台下的系统烧写工具,Linux平台下可以用dd命令烧写系统

4.3.2 推荐搭配Mini Shield for NanoPi Duo底板

推荐搭配Mini Shield for NanoPi Duo底板使用,Mini Shield for NanoPi Duo底板详细介绍请参考Mini Shield for NanoPi Duo底板介绍,以下是底板的接法。
Mini Shield for NanoPi Duo_NanoPi_Duo

5 FriendlyCore的使用

5.1 介绍

FriendlyCore,是一个没有X-windows环境,基于Ubuntu core构建的系统,使用Qt-Embedded作为图形界面的轻量级系统,兼容Ubuntu系统软件源,非常适合于企业用户用作产品的基础OS。

本系统除了保留Ubuntu Core的特性以外,还包括以下特性:

  • 集成Qt4.8;
  • 集成NetworkManager网络管理器;
  • 集成bluez等蓝牙相关软件包;
  • 集成alsa相关软件包;
  • 集成命令行系统配置工具npi-config;
  • 集成Python GPIO模块RPiGPIO;
  • 集成Python/C语言编写的demo程序,位于/root目录;
  • 使能512M的swap分区;

5.2 运行FriendlyCore

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

使用USB转串口模块调试,请注意需要使用5V/2A电源给开发板MicroUSB供电:
USB2UART-Duo.jpg

  • FriendlyCore默认帐户:

普通用户:

   用户名: pi
   密码: pi

Root用户:

   用户名: root
   密码: fa

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

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

5.3 开发Qt应用

请参考 How to Build and Install Qt Application for FriendlyELEC Boards/zh

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

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

sudo npi-config

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

5.5 扩展TF卡文件系统

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

df -h

5.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

5.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目录下。


5.8 连接以太网

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

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

请参考下面的文档:

5.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

5.11 修改时区

例如更改为Shanghai时区:

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

5.12 选择系统默认音频设备

如果当前系统存在多个音频设备, 例如HDMI-Audio、3.5mm耳机座、I2S-Codec时, 可以通过下列操作设置系统默认使用的音频设备。

  • 启动板子后,执行以下步骤安装alsa包:
$ apt-get update
$ apt-get install libasound2
$ apt-get install alsa-base
$ apt-get install alsa-utils
  • 安装好需要的库后,查看系统当前所有的声卡设备的序列号。这里假设aplay的输出如下, 并不是真实情况, 请根据实际情况进行相对应的修改:
$ aplay -l
card 0: HDMI
card 1: 3.5mm codec
card 2: I2S codec

上面的信息表示card 0代表HDMI-Audio,card 1代表3.5mm耳机座, card 2代表I2S-Codec,修改配置文件/etc/asound.conf如下表示选择HDMI-Audio:

pcm.!default {
    type hw
    card 0
    device 0
}
 
ctl.!default {
    type hw
    card 0
}

如果将card 0修改为card 1, 则表示选择3.5mm耳机座, 以此类推。
拷贝一首 .wav 格式的音乐到开发板上,播放音乐:

$ aplay /root/Music/test.wav

可以听见从系统默认的音频设备里输出音频。
如果您使用的开发板是H3/H5/H2+系列并且使用的是主线内核,那么更简便的方法是使用npi-config


5.13 连接USB摄像头模块(FA-CAM202)

FA-CAM202是一款200万像素的USB摄像头模块,连接开发板和摄像头,然后上电启动系统,连接网络,以root用户登录终端并编译运行mjpg-streamer:

$ cd /root/C/mjpg-streamer
$ make
$ ./start.sh

请自行修改start.sh, 确保使用正确的/dev/videoX节点, 下列命令可以用来确定摄像头的video节点:

$ apt-get install v4l-utils
$ v4l2-ctl -d /dev/video0 -D
# fa-cam202有2个型号
Driver Info (not using libv4l2):
        Driver name   : uvcvideo
        Card type     : HC 3358+2100: HC 3358+2100  / USB 2.0 Camera: USB 2.0 Camera
        Bus info      : usb-1c1b000.usb-1
	...

上述信息表示/dev/video0是摄像头的设备节点。mjpg-streamer是一个开源的网络视频流服务器,在板子上成功运行mjpg-streamer后会打印下列信息:

$ ./start.sh 
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 30
 i: Format............: YUV
 i: JPEG Quality......: 90
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled

start.sh脚本里执行了下列2个命令:

export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y 1 -r 1280x720 -f 30 -q 90 -n -fb 0" -o "./output_http.so -w ./www"

mjpg_streamer相关参数的含义如下:
-i: 选择输入插件,input_uvc.so表示从摄像头采集数据;
-o: 选择输出插件,output_http.so表示使用http协议传输数据;
-d: 输入插件的子参数,指定摄像头设备节点;
-y: 输入插件的子参数,指定摄像头采集数据的格式,1:yuyv, 2:yvyu, 3:uyvy 4:vyuy,如果不使用-y参数,则表示采集MJPEG格式;
-r: 输入插件的子参数,指定摄像头采集分辨率;
-f: 输入插件的子参数,指定想使用的摄像头采集fps,具体是否支持依赖于驱动;
-q: 输入插件的子参数,指定libjpeg软编码的图像质量;
-n: 输入插件的子参数, 禁止dynctrls功能;
-fb: 输入插件的子参数, 指定是否在/dev/fbX上显示采集的图像;
-w: 输出插件的子参数, 指定包含网页的目录;

成功运行start.sh脚本后,假设开发板的IP地址为192.168.1.230,在PC的浏览器中输入 192.168.1.230:8080 就能浏览摄像头采集的画面了,效果如下:
mjpg-streamer-cam500a

5.14 查看CPU温度和频率

命令行查看:

$ cpu_freq 
Aavailable frequency(KHz):
        480000 624000 816000 1008000
Current frequency(KHz):
        CPU0 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU1 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU2 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU3 online=1 temp=26548C governor=ondemand freq=624000KHz

上述信息表示当前有4个CPU核在线, 温度均约为26.5摄氏度, 运行的策略均为根据需求来决定运行频率, 当前的运行频率均为624MHz,设置频率的命令如下:

$ cpu_freq -s 1008000
Aavailable frequency(KHz):
        480000 624000 816000 1008000
Current frequency(KHz):
        CPU0 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU1 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU2 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU3 online=1 temp=36702C governor=userspace freq=1008000KHz

上述命令将4个CPU核的频率设置为1008MHz。


5.15 运行Qt示例程序

执行以下命令:

$ sudo /opt/QtE-Demo/run.sh

运行结果如下,这是一个开源的QtDemo:
K2-QtE

5.16 Docker在armhf系统下的安装与使用

5.16.1 安装 Docker

执行下列命令:

sudo apt-get update
sudo apt-get install docker.io

5.16.2 测试 Docker

执行下列命令运行一个简单的docker image:

git clone https://github.com/friendlyarm/debian-jessie-arm-docker
cd debian-jessie-arm-docker
./rebuild-image.sh
./run.sh


5.17 读取CHIP ID

对于全志H2+/H3/H5/芯片,CPU里内置了16 Byte的CHIP ID,在Linux-4.14下可以使用下列命令读取:

$ apt-get install bsdmainutils
$ hexdump /sys/bus/nvmem/devices/sunxi-sid0/nvmem 
0000000 8082 0447 0064 04c3 3650 ce0a 1e28 2202
0000010 0002 0000 0000 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 0000 0000 0000 0000
0000030 0000 0008 0508 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000

"8082 0447 0064 04c3 3650 ce0a 1e28 2202"即为16 Byte的CHIP ID。

CHIP ID相关驱动代码位于: ./drivers/nvmem/sunxi_sid.c

5.18 从SSD运行系统

NanoPi-Duo可以将系统运行在Mini Shield for NanoPi Duo的固态硬盘上,除了获得更大的存储空间外,还有如下优点:
1) 读写速度更快;
2) 使用寿命比TF卡更长;
3) 更可靠;

安装系统到固态硬盘上的方法比较简单,无需事先对SSD做准备工作,使用 npi-config 工具即可,输入以下命令启动npi-config:

sudo npi-config

然后进入 Boot Options 菜单, 选择 Boot device,然后可以看到有两个选项可供选择:
1) D1 Hard drive
2) D2 TF card
选择 D1 Hard drive,然后按提示进行操作即可。
以后要恢复回 TF 卡启动,可在上述菜单中选择 D2 TF card。

如果你在 npi-config 中没有找到 Boot device 菜单,可能是因为你的 npi-config 版本太旧,利用菜单上的 Update 功能更新一下即可。

5.19 Docker在armhf系统下的安装与使用

5.19.1 安装 Docker

执行下列命令:

sudo apt-get update
sudo apt-get install docker.io

5.19.2 测试 Docker

执行下列命令运行一个简单的docker image:

git clone https://github.com/friendlyarm/debian-jessie-arm-docker
cd debian-jessie-arm-docker
./rebuild-image.sh
./run.sh

6 如何编译FriendlyCore系统

6.1 使用开源社区主线BSP

Duo现已支持使用Linux-4.x.y内核,并使用Ubuntu Core 16.04,关于H2+芯片系列开发板使用主线U-boot和Linux-4.x.y的方法,请参考维基:Mainline U-boot & Linux

7 使用扩展配件及编程示例

NanoPi Duo的两排排针间距为22.86mm(900mil),可以直接插在面包板上,方便的接插其他外围器件。
NanoPi Duo

搭配Mini Shield for NanoPi Duo底板,使用更方便
NanoPi Duo

8 3D 打印外壳

9 资源链接

9.1 手册原理图等开发资料

10 硬件更新

10.1 V1.0 1705

第一版

10.2 V1.1 1709

1.增加了U12(调整Reset上电延时)</br> 2.去掉了U5(AVCC和VDD-3.3V使用同一路DC-DC电路)