NanoPi

From FriendlyARM WiKi
Revision as of 02:18, 22 July 2015 by Tzs (Talk | contribs)

Jump to: navigation, search

查看中文

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, Debian

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卡: 最小系统需要64 MB
  • microUSB线
  • 一台运行Linux的电脑

4.2 制作microSD卡

准备好后,可使用已经编译好的文件快速的制作能启动NanoPi的microSD卡,具体请查看 →制作可启动的microSD卡:NanoPi#BuildMicroSDCard

4.3 运行系统

把制作好的microSD卡插入NanoPi,使用microUSB线连上电源,稍等片刻,看到板上的蓝色LED开始闪烁,这说明系统已经开始正常运行了

4.4 通过microUSB登陆NanoPi

4.5 配置使用Wi-Fi

使用新制作的SD卡启动NanoPi 后,系统不会自动连接您的Wi-Fi网络,必须先通过microUSB或串口登陆NanoPi,然后手动进行配置Wi-Fi。
以下操作,如无特别说明,均是指在NanoPi 上进行的操作。

4.5.1 启动wpa_supplicant

NanoPi的Rootfs集成了wpa_supplicant 2.4,同时支持nl80211和wext,运行以下命令即可启动它。

wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant -c/etc/wpa.conf -B

4.5.2 运行wpa_cli

wpa_cli -iwlan0

4.5.3 使用wpa_cli扫描无线AP

启动wpa_cli后,自动进入其Interactive mode,输入以下命令即可扫描AP并获得扫描结果。

scan
scan_results

4.5.4 使用wpa_cli配置并连接WLAN

add_network
set_network 0 ssid "WLAN-Network"
set_network 0 psk "YourSecretPassphrase"
enable_network 0

其中"WLAN-Network"和"YourSecretPassphrase"请使用您的WLAN配置信息,"YourSecretPassphrase"可以是明文的,也可以在启动wpa_cli前先使用wpa_passphrase来生成加密后的psk。

wpa_passphrase "WLAN-Network" "YourSecretPassphrase"

如果配置正确,系统将成功连接到指定的无线AP。

4.5.5 使用wpa_cli保存配置及退出

save_config
quit

您所进行的Wi-Fi配置将保存到/etc/wpa.conf,可查看此文件来确定是否正确保存。

4.5.6 配置Wi-Fi的IP地址

成功连接到无线AP后,便可以dhcp来获得IP地址,命令如下:

udhcpc -i wlan0

另外,您也可以使用ifconfig 来手动配置IP地址,具体的IP地址与您的网络配置有关。

4.5.7 自动连接Wi-Fi

在正确配置好Wi-Fi后,如果你保存了配置,则可以使用命令vi 来修改启动脚本 /etc/init.d/rcS ,在末尾增加以下内容:

wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant -c/etc/wpa.conf -B
sleep 3
udhcpc -i wlan0

保存后可使用命令 reboot 来重启NanoPi ,然后登陆NanoPi来进一步检查是否成功连接。

5 如何编译及制作自己的microSD卡

5.1 编译U-Boot

5.1.1 下载源代码

git clone https://github.com/friendlyarm/uboot_nanopi.git

下载完成后,u-boot的缺省分支是nanopi,在开始编译前,请检查当前分支是否为nanopi,如果不是则需要先checkout。

cd uboot_nanopi
git checkout nanopi

5.1.2 配置并编译u-boot

cd uboot_nanopi
make nanopi_config
make

5.1.3 烧写u-boot 到SD卡

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

./fusing.sh /dev/sdd

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

5.2 编译Linux kernel

5.2.1 下载内核源代码

git clone https://github.com/friendlyarm/linux-4.x.y.git

适应于NanoPi的分支是nanopi-v4.1.y,在开始编译前,请检查当前分支是否正确,如果不是则需要先checkout。

cd linux-4.x.y
git checkout nanopi-v4.1.y

5.2.2 配置并编译内核

cd linux-4.x.y
make nanopi_defconfig
touch .scmversion
make

如果您的PC是多核的CPU,可以make的参数"-j, --jobs" 来加快编译,例如:

make -j8

编译成功结束后,新生成内核烧写文件为 arch/arm/boot/zImage 。

5.2.3 编译内核模块

目前的内核配置会编译生成内核模块,如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.3 编译制作Rootfs

5.3.1 下载源文件

git clone https://github.com/friendlyarm/rootfs_nanopi.git

适应于NanoPi的分支是nanopi,在开始编译前,请检查当前分支是否正确,如果不是则需要先checkout。

cd rootfs_nanopi
git checkout nanopi

5.3.2 编译Rootfs

下载Rootfs的源文件后,只需要只以root用户运行以下命令即可。

cd rootfs_nanopi
make && make install

如果您的PC是多核的CPU,可以make的参数"-j, --jobs" 来加快编译,也可以先定义alias,例如:

make -j8 && make -j8 install
alias make='make -j8'

编译成功结束后,将看到以下信息,重点是编译好的rootfs 存放位置。

RootFS (core) successfully installed to:
   /tmp/FriendlyARM/nanopi/rootfs
 
Copyright 2015 FriendlyARM (http://www.arm9.net/)

如果没有看到以上信息,则说明编译失败了,请检查编译时显示的信息以定位是编译哪部分时出错了,同时还请检查PC的开发环境。
编译生成的rootfs中的可执行程序和库是包含调试用的符号信息,可去除这些符号信息来减小rootfs的体积。

make strip

5.3.3 创建压缩包

cd /tmp/FriendlyARM/nanopi
tar czvf rootfs.tgz rootfs/

5.4 制作可启动的microSD卡

5.4.1 下载源代码

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

适应于NanoPi的分支是master,在开始编译前,请检查当前分支是否正确,如果不是则需要先checkout。

cd sd-fuse_nanopi
git checkout master

5.4.2 烧写U-Boot和Linux kernel到SD卡

prebuilt目录下已包含编译好的u-boot.bin 和 zImage,使用脚本fusing.sh 即可快速的创建SD卡的分区,同时再将它们烧写到卡上。
以下操作将破坏您卡上已有的数据,请先进行备份。
准备好后,假设SD卡的设备名是 /dev/sdd,以root用户运行以下命令即可。

cd sd-fuse_nanopi
./fusing.sh /dev/sdd

由于修改了SD卡的分区表,在烧写rootfs 前需要使新的分区表生效,可以重新插拨一次卡,也可以使用以下命令:

partx -u /dev/sdd

然后,您可以查看 /proc/partitions 是否包含 2 个分区,其中较大的分区 sdd2 将用于存放 rootfs。

5.4.3 烧写Rootfs

prebuilt目录下已包含编译好的rootfs.tgz, 检查分区正确后,可使用脚本 mkrootfs.sh 来格式化SD卡分区并烧写rootfs,请以root用户运行以下命令。

./mkrootfs.sh /dev/sdd

烧写成功完成后,这张SD卡即可用于启动NanoPi。

5.4.4 使用自己编译的文件

在成功编译U-Boot、Linux kernel和Rootfs后,只需要把生成的文件即u-boot.bin、zImage、rootfs.tgz复制到prebuilt 目录,替换原文件,再重新全部烧写一次即可。

5.4.5 更新U-Boot环境变量

制作好的SD启动NanoPi 后,如果通过串口在U-Boot命令模式下修改了环境变量,如bootargs,现在想要把这个修改后的环境用于制作其它新的SD卡,则需要把保存在卡的U-Boot环境变量数据读出来,替换掉prebuilt 下的 sdenv.raw,然后烧写新的SD卡即可。

./readenv.sh /dev/sdd
cp sdenv.raw prebuilt/

5.4.6 关于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 连接使用TFT LCD

6.3 连接使用Matrix入门DIY套件

7 玩转NanoPi

7.1 制作一台4.3英寸小电脑

7.2 制作无线智能小车

8 资源链接