NanoPi/zh

From FriendlyELEC WiKi
Jump to: navigation, search

English

1 介绍

Overview
Front
Back

NanoPi是友善之臂专门为嵌入式Linux爱好者、创客、玩家设计的一款低功耗ARM主控板,它的尺寸只有Raspberry Pi(RPi)的一半大小,并且兼容RPi的GPIO接口,NanoPi集成无线WiFi和蓝牙4.0模块,并带有并行摄像头接口,和全彩LCD接口,可从TF卡运行Linux/Debian系统,非常适合物联网、无线智能小车、机器人、图像识别、人机界面等应用开发。

2 资源特性

  • CPU: Samsung S3C2451, 运行主频400Mhz
  • RAM: 64M DDR2
  • 集成SDIO WiFi蓝牙模块
  • USB Type A x1
  • 调试串口 x1
  • microSD Slot x1
  • microUSB x1: 支持供电和数据传输,可模拟为串口和以太网
  • LCD接口: 0.5mm间距贴片FPC座,支持全彩LCD (RGB:8-8-8)
  • DVP Camera接口:0.5mm间距竖直贴片FPC座,包含ITU-R BT 601/656 8-bit,I2C和IO
  • GPIO1: 2.54mm间距,40pin, 兼容RPi的GPIO,含UART, SPI, I2C, IO等管脚资源
  • GPIO2: 2.54mm间距, 12pin, 含I2S, I2C, UART等管脚资源
  • PCB 尺寸: 75 x 30 mm
  • 供电: DC 5V
  • 软件支持: u-boot, Linux-4.1, Debian8 jessie, Rabbit linux

3 接口布局和尺寸

3.1 接口布局

NanoPi接口布局
  • GPIO1 管脚定义
NanoPi GPIO Header
  • GPIO2 管脚定义
Pin# Name Pin# Name
1 VDD_5V 2 VDD_SYS_3.3V
3 TXD2 4 RXD2
5 SDA0 6 SCL0
7 IISSDO0 8 IISSDI0
9 IISSCLK0 10 IISLRCK0
11 IISCDCLK0 12 DGND
  • Debug Port CON1(UART0)
Pin# Name
1 DGND
2 VDD_5V
3 TXD0
4 RXD0
  • DVP Camera IF 管脚定义
Pin# Name
1, 2 VDD_SYS_3.3V
7,9,13,15,24 DGND
3 SCL0
4 SDA0
5 GPH13
6 GPJ12
8 XCLK
10 NC
11 VSYNC
12 HREF
14 PCLK
16-23 Data bit7-0
  • RGB LCD IF 管脚定义
Pin# Name
1, 2 VDD_5V
11,20,29 DGND
3-10 Blue LSB to MSB
12-19 Green LSB to MSB
21-28 Red LSB to MSB
30 GPG12
31 GPG2
32 XnRSTOUT Form CPU
33 VDEN
34 VSYNC
35 HSYNC
36 LCDCLK
37,38,39,40 XM,XP,YM,YP
说明
  1. VDD_SYS_3.3V: 3.3V电源输出
  2. VDD_5V: 5V电源输入/输出。当电压大于MicroUSB时,向板子供电,否则板子从MicroUSB取电。输入范围:4.7~5.6V。
  3. 更详细的信息请查看原理图:NanoPi-1507-Schematic.pdf

3.2 机械尺寸

NanoPi 机械尺寸

需要更详细的尺寸请下载:NanoPi-1507-Dimesions(dxf).zip

4 快速入门

4.1 准备工作

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

  • NanoPi主板
  • microSD卡/TF卡: 最小系统需要64M
  • microUSB线
  • 一台运行Linux的电脑,需要联网,建议使用Debian jessie 64位系统

4.2 制作一张带运行系统的microSD卡

  • 1) 将microSD插入Ubuntu的电脑,用以下命令查看你的SD卡设备名
dmesg | tail

当dmesg输出类拟信息 sdc: sdc1 sdc2时,则表示SD卡对应的设备名为 /dev/sdc,也通过用命令cat /proc/partitions来查看。

  • 2) 下载固件并制作microSD卡
git clone https://github.com/friendlyarm/sd-fuse_nanopi.git
cd sd-fuse_nanopi
su
./fusing.sh /dev/sdx

(注:/dev/sdx请替换为实际的SD卡设备文件名)

如果你从github获取文件遇到障碍,我们提供了一个http下载的链接:[1]
如果你在使用fusing.sh脚本制作卡时遇到问题,可以通过下载NanoPi-fuser-win32.zip固件包,在Windows系统下制作SD卡,下载地址:[2]

4.3 运行系统

将制作好的microSD卡插入NanoPi,使用microUSB线连接电脑,NanoPi会上电自动开机,看到板上的蓝色LED闪烁,这说明系统已经开始正常运行了,默认安装的是Debian系统。

Debian8 Jessie

4.4 通过microUSB登陆NanoPi

用microUSB线将NanoPi连接到电脑后,在电脑上敲入dmesg命令,看到以下输出信息表示连接成功:

[12601.100339] usb 2-1.7: Product: FriendlyARM Gadget v2.4
[12601.100343] usb 2-1.7: Manufacturer: Linux 4.1.2-FriendlyARM with s3c-hsudc
[12601.103192] cdc_acm 2-1.7:2.0: This device cannot do calls on its own. It is not a modem.
[12601.103368] cdc_acm 2-1.7:2.0: ttyACM0: USB ACM device
[12601.105300] cdc_ether 2-1.7:2.2 usb0: register 'cdc_ether' at usb-0000:00:1d.0-1.7, CDC Ethernet Device, 46:a1:e7:6d:5c:32

在电脑上输入ifconfig命令,可以看到多了一个usb0的网络设备,这时可以通过ssh到192.168.100.1这个地址来登录NanoPi:

ssh root@192.168.100.1

在提示输入密码时,输入预设的密码fa,即可登入。

4.5 通过Wi-Fi登陆NanoPi

在电脑上搜索并连接nanopi-wifiap这个无线热点(密码为123456789),连接成功后,可以通过ssh到192.168.8.1这个地址来登录NanoPi:

ssh root@192.168.8.1

在提示输入密码时,输入预设的密码fa,即可登入。

4.6 连接到Wi-Fi 网络

NanoPi出厂时WiFi已被设置为无线热点模式,要连接WiFi网络,需要先退出热点模式,可使用以下命令退出:

turn-wifi-into-apmode no

接着,使用ssh连接NanoPi,先输入以下命令查询一下WiFi的网络接口,wlan开头的就是WiFi:

ifconfig -a

默认情况下是wlan0,你需要在/etc/network/interfaces.d/目录下新建一个与网络接口同名的配置文件 ,以wlan0为例,用vi命令新建以下文件:

vi /etc/network/interfaces.d/wlan0

wlan0文件的内容如下:

auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid YourWiFiESSID
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-key-mgmt WPA-PSK
wpa-psk YourWiFiPassword

其中,YourWiFiESSID和YourWiFiPassword请替换成你要连接的无线AP名称和密码。

需要注意的是,你的TF卡如果在多块板子上运行,WiFi的网络接口可能会被重命名为wlan1, wlan2等,你可以通过清空这个文件的内容并重启让它恢复为默认值:/etc/udev/rules.d/70-persistent-net.rules。

SSH connected to NanoPi over WiFi

连接WiFi后,用手机的SSH客户端登陆NanoPi


4.7 配置Wi-Fi无线热点

NanoPi在出厂时,已将WiFi设置为无线热点模式,默认的热点名称为 nanopi-wifiap,密码为123456789。

WiFi工作模式可通过以下命令查询:

cat /sys/module/bcmdhd/parameters/op_mode

输出为数字2则表示当前处于无线热点模式。

如果当前的WiFi不是无线热点模式,则可以通过以下命令进行开启:

turn-wifi-into-apmode yes


无线热点的名称和密码可以通过编辑/etc/hostapd/hostapd.conf文件来修改。



4.8 使用蓝牙传送文件

在Debian jessie系统中我们已经预装了蓝牙所需的相关软件包:bluetooth,bluez,obexftp等。
下面我们将在命令行演示NanoPi与手机之间通过蓝牙来上传和下载文件。

本例中,我使用测试设备是一台MX4的手机,在测试之前,先将手机的蓝牙功能开启,并设置成可被发现的模式,之后在NanoPi上输入以下命令搜索周边的蓝牙设备:

hcitool scan


Scanning ...
8C:BE:BE:C5:2C:C7 MX4

上面列出的结果成功找到了我测试用的MX4手机,我们记住它的地址是8C:BE:BE:C5:2C:C7,然后可以用sdptool命令看看它支持哪些协议:

sdptool browse 8C:BE:BE:C5:2C:C7

由于我们要测试的是蓝牙的文件传输功能,所以我们只关心设备是否支持OBEX File Transfer协议,如果有该协议的支持才能进行下一步的操作:

Service Name: OBEX File Transfer
Service RecHandle: 0x1000c
Service Class ID List:
"OBEX File Transfer" (0x1106)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"OBEX File Transfer" (0x1106)
Version: 0x0100

可以看到我的手机是支持OBEX File Transfer协议,那么就可以用obexftp命令来操作了,以下命令列出手机根目录下的文件:

obexftp -b 8C:BE:BE:C5:2C:C7 -c / -l

以下命令下载手机上的/Adnroid/djaof.dll文件到NanoPi:

obexftp -b 8C:BE:BE:C5:2C:C7 -c /Android -g djaof.dll

以下命令将上传本地的hello.txt文件到手机的/Android目录:

obexftp -b 8C:BE:BE:C5:2C:C7 -c /Android -p hello.txt

4.9 配置蓝牙为iBeacon基站

iBeacon技术主要用于室内测距和定位,输入以下命令可以让NanoPi成为一个iBeacon基站:

hciconfig hci0 up
hciconfig hci0 leadv 3
hciconfig hci0 noscan
hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 00 00 00 00 C8

完成后NanoPi的蓝牙会不间断地发送广播消息,这时,只要在你的Android或iPhone手机上安装一个叫Locate Beacon的应用,则可以通过该应用测试到从手机到NanoPi的距离,如果你需要实现室内定位,则需要配置多个iBeacon基站,可在网上查阅这方面的资料。


4.10 通过蓝牙BLE与手机通讯

该功能需要在NanoPi部置一个BLE服务程序,通过运行该服务程序,使NanoPi成为一个BLE外围设备,然后手机就可以通过蓝牙与NanoPi进行连接和数据通讯了。
BLE服务程序是 Open source 的,你可以通过以下途径获取:

git clone https://github.com/friendlyarm/ble-peripheral-service-demo.git

通过执行其下的build.sh编译脚本,即可编译出一个名为nanopi_ble_server的可执行文件:

./build.sh

这个脚本假设你的交叉编译器安装在以下路径:/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc,如果不是这个路径,请自行更改脚本,
编译完成后,将nanopi_ble_server拷贝到NanoPi上,使用以下命令启动它:

hciconfig hci0 down
service bluetooth stop
chmod 755 nanopi_ble_server
./nanopi_ble_server

最后,在你的Android手机上安装一个名叫 BLE Scanner,或者iPhone上安装一个名叫Lightblue的应用,则可以通过蓝牙搜索并连接到NanoPi,
我们在上面的仓库中也提供了一个开源的 Android Demo,位于android/BLETest目录,这是一个eclipse的工程,该Android Demo演示了在手机上如何通过BLE连接到NanoPi,并进行数据的接收与发送, 手机端Demo的运行界面如下:
NanoBLEAndroidDemo

NanoPi端的服务程序输出如下:
NanoPiBLEServer

4.11 安装Debian软件包

我们提供的是标准的Debian jessie系统,你可以使用apt-get等命令来安装软件包,如果板子是首次运行,需要先用以下命令更新软件包列表:

apt-get update

然后就可以安装软件包了,例如要安装ftp服务器,使用以下命令:

apt-get install vsftpd

如果软件包下载速度不理想,你可以编辑 /etc/apt/sources.list 更换一个更快的源服务器,这个网址[3]有一份完整的源镜像服务器列表,注意要选用一个带armel架构的。

5 如何编译系统

5.1 安装交叉编译器

首先下载并解压编译器:

git clone https://github.com/friendlyarm/prebuilts.git
tar xvzf prebuilts/gcc/arm-linux-gcc-4.4.3.tar.gz -C /

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

export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin/:$PATH

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

. ~/.bashrc

由于编译器是32位的,如果你的电脑安装的是64位的Linux系统,你还需要安装一些软件包才能运行该编译器,例如在Debian8 jessie desktop 64bit系统下,可输入以下命令安装:

dpkg --add-architecture i386
apt-get update
apt-get install build-essential gcc-multilib rpm libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386

5.2 编译U-Boot

下载U-Boot源代码并编译,注意分支是nanopi:

git clone https://github.com/friendlyarm/uboot_nanopi.git
cd uboot_nanopi
git checkout nanopi
make nanopi_config
make

编译成功结束后您将获得u-boot.bin, 如果想马上就测试u-boot,可使用脚本fusing.sh烧写新的u-boot 到SD 卡。
假设您的 SD 卡对应设备名是/dev/sdd,以root运行以下命令:

su
./fusing.sh /dev/sdd

注意:以上操作会破坏SD卡的数据,请先进行备份。

5.3 编译Linux kernel

5.3.1 编译内核

下载内核源代码并编译

git clone https://github.com/friendlyarm/linux-4.x.y.git
cd linux-4.x.y
git checkout nanopi-v4.1.y
make nanopi_defconfig
touch .scmversion
make

NanoPi内核所属的分支是nanopi-v4.1.y,在开始编译前先切换分支,编译成功结束后,新生成内核烧写文件为 arch/arm/boot/zImage 。

5.3.2 编译内核模块

目前的内核配置会编译生成内核模块,如ipv6、netfilter,通常在编译内核时,内核模块(.ko)已经编译,如果您有新的内核模块或者内核配置有变化,则需要编译安装内核模块并打包成 kernel-modules.tgz,然后替换Rootfs下的 basefs/kernel-modules.tgz。
以root用户运行以下命令安装.ko到/tmp/nanopi-modules 。

make INSTALL_MOD_PATH=/tmp/nanopi-modules modules_install

接下来可对内核模块进行strip,然后创建压缩包。

cd /tmp/nanopi-modules/lib/
find . -name \*.ko | xargs arm-linux-strip --strip-unneeded
tar czvf kernel-modules.tgz modules/

如果想测试新编译的内核模块,也可以解压压缩包或复制modules 到已制作好的能启动NanoPi的SD卡的rootfs下的/lib 目录。 假设SD卡的rootfs已经mount到 /media/fa/NANOPI,以root 运行以下命令:

rm -rf /media/fa/NANOPI/lib/modules/
tar xzvf kernel-modules.tgz -C /media/fa/NANOPI/lib/

5.4 创建制作Debian系统

5.4.1 Debian文件系统

预装的Debian系统使用的是官方编译的软件包,该文件系统你可以在以下仓库中找到:

git clone https://github.com/friendlyarm/sd-fuse_nanopi.git
cd sd-fuse_nanopi/prebuilt/
ls -l rootfs.tgz

如果你想重新制作Debian系统,你可以解压rootfs.tgz来进行编辑,完成后再用tar重新压缩即可,例如,要预装一个下载好的deb包到文件系统,可使用以下命令:

tar xzf rootfs.tgz 
dpkg -i --force-all --root=./rootfs /tmp/qtembedded-4.8.5_armel.deb 
tar czf rootfs.tgz rootfs


5.5 使用自已编译的文件生成制作SD卡

5.5.1 重新制作SD卡系统

先下载SD卡烧写的工具包,并切换到相应master分支:

git clone https://github.com/friendlyarm/sd-fuse_nanopi.git
cd sd-fuse_nanopi
git checkout master

在sd-fuse_nanopi下有个prebuilt,用于存放SD系统运行所需的二进制文件:
Bootloader: u-boot.bin
内核命令行参数: sdenv.raw
Linux内核:zImage
文件系统压缩包: rootfs.tgz

你只需要将上面章节中编译生成的文件替换它们,就可以测试运行你所编译的系统了,替换文件后,在sd-fuse_nanopi目录下执行以下命令制作SD卡:

su
./fusing.sh /dev/sdx

(注:/dev/sdx请替换为实际的SD卡设备文件名)

烧写成功完成后,把SD卡放入NanoPi运行试试吧。

5.5.2 更新U-Boot环境变量

启动NanoPi后,通过以下命令可以查看U-Boot命令环境变量:

fw_printenv bootargs

如果需要更改环境变量,例如加入lcd的参数,可以使用fw_setenv命令,以下是调用示例:

fw_setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 init=/sbin/init console=ttySAC0,115200 lcd=S70


如果你想制作SD卡时就立即拥有新的环境变量,可以将SD卡插入电脑,在电脑上执行以下命令把环境变量导出来,替换掉prebuilt目录下的sdenv.raw,然后重新烧写SD卡即可:

cd sd-fuse_nanopi
./readenv.sh /dev/sdd
cp sdenv.raw prebuilt/

5.5.3 关于SD卡RAW文件

由于CPU S3C2451的iROM 是从SD卡的尾部来读取Bootloader,且普通SD卡和SDHC卡的位置不同,而不同品牌或是不同容量的SD卡的大小又是不同的,因此没办法创建适应不同卡的RAW文件。
如果您有一批大小完全一致的SD卡,可使用工具如linux下的dd 读取已经制作好的SD 卡的全部数据,保存为RAW文件,然后将此文件写入其它大小相同的SD卡。
另外,由于现在的SD卡容量通常都比较大,对于8 GB的SD卡,写一个RAW文件将需要较长时间,而目前的rootfs实际只有 ~23 MB,因此直接使用脚本制作SD卡将更快。

6 扩展连接

6.1 连接使用摄像头模块

6.2 连接使用LCD运行Qt4

P43 LCD

NanoPi可以连接友善之臂生产的以下型号的LCD:H43,S70,A70,W50,A97,L80,G10,A56,W101,W35,P43,P35,TD35。

要让LCD开始工作,还有2个步骤需要做:
1) 如果你的miniUSB是连接电脑的,那么其供电可能没法满足LCD的要求,你需要外接一个5V 2A的电源,连接到GPIO的VDD_5V和DGND引脚即可;
2) 你需要更改 U-boot 的环境变量,加入lcd型号参数,例如S70,在板子运行之后,输入以下命令修改:

先打印一下现有的环境变量:

fw_printenv bootargs

输出如下:
bootargs=root=/dev/mmcblk0p2 rootfstype=ext4 init=/sbin/init console=ttySAC0,115200

将bootargs=后面的参数内容加上lcd=S70,再用fw_setenv命令重新设置

fw_setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 init=/sbin/init console=ttySAC0,115200 lcd=S70

重启后,LCD应该能显示Debian的命令行登录界面,可以连接USB键盘进行登录操作。

下载Qt和tslib软件包:

apt-get update
apt-get install qtembedded
apt-get install friendlyarm-tslib

qtemebdded是Qt4相关的库,friendlyarm-tslib则用于触摸屏校准。

运行Qt示例程序:

. /usr/bin/setqt4env
/usr/local/Trolltech/QtEmbedded-4.8.5-arm/examples/tetrix -qws

脚本setqt4env用于设置Qt和tslib相关的环境变量,如果是第一次运行该脚本,则会出现校准界面,根据提示点击5个点完成校准。
tetrix则是用Qt4编写的一个小游戏俄罗斯方块,其运行效果如下。
Nanopi with s70.jpg

6.3 连接使用Matrix入门DIY套件

[4]

7 玩转NanoPi

7.1 制作一台4.3英寸小电脑

7.2 制作无线智能小车

8 资源链接

[5]

  • LED模块:

[6]

  • 模数转换:

[7]

  • 继电器模块:

[8] 三轴重力加速度模块: [9]

  • 三轴数字指南针模块:

[10]

  • 温度传感器模块:

[11]

  • 温湿度传感器模块:

[12]

  • 无源蜂鸣器模块:

[13]

  • 摇杆模块: Joystick

[14]

  • I2C(PCF8574)+LCD1602:

[15]

  • 声音传感器:

[16]

  • 超声波模块:

[17]