简介
芒果派-R3 是一款运行 Linux 系统的微型开发板,麻雀虽小、却五脏俱全。以F1C200S作为主控芯片,提供多种常用外设接口:GPIO引脚、I2C、SPI、SDIO接口、音频接口(录、放音)、视频接口(RGB565显示接口、触摸、DVP接口)、USB Host、OTG、RNDIS 等等。内置64MB DDR,板载128MB Nand Flash,支持 Linux 生态,可运行完整 Python。
本产品目前全开源,用户可以根据自己的需求编译任意模块。但上手难度较大,主要面向 Python 开发人员和资深爱好者。
产品参数
- 内置 64MB DDR
- 板载 128MB Nand Flash
- 系统时钟默认 420MHz,可以超频到 700MHz 以上
- 丰富的 GPIO 引脚
- 板载 SDIO 接口,可插入 SD 卡或 SDIO WiFi + BT 模块
- DVP 摄像头接口,支持 OV2640、GC0328 等摄像头
- RGB565 显示接口和 6 线触摸接口
- 板载 mic 和功放
- 较低功耗
- 可运行完整 Python
1. Windows 下安装驱动
拿到 MangoPi-R3 开发板后,如果你是 Windows 用户的话,需要安装驱动。
1.1 下载 zadig 驱动安装助手
点击连接下载 zadig-2.5.exe
原链接 https://github.com/aodzip/buildroot-tiny200/blob/master/flashutils/windows/README.md
1.2 安装 FEL mode Driver
选择 Device
-> Create New Device
输入框变为可输入状态
输入驱动及 USB ID,如下图(USB ID 必须一致),点击 Install Driver
等待驱动安装完成
1.3 安装 DFU mode Driver
选择 Device
-> Create New Device
输入框变为可输入状态
输入驱动及 USB ID,如下图(USB ID 必须一致),点击 Install Driver
等待驱动安装完成
2. 烧录固件
由于摄像头接口
和spi接口
是复用的,摄像头和SPI不能同时使用,所以固件分为 “摄像头固件” 和 “spi固件”,用户可以根据需求进行烧录。
当前固件版本为: 0.2 版本,点击下面的链接可下载固件。
2.1 Windows 下的烧录方法
SPI NAND Flash烧录工具
该软件是专门为F1C100S/F1C200S芯片开发的烧录软工具,在 Windows 环境下运行。
软件下载
点击下载 SPI NAND Flash工具
软件界面,运行软件后,软件会自动获取串口号和主控 IC 型号
软件使用方法
① 运行软件后,软件开始自动获取串口,如下图。
② 将电脑与 MangoPi-R3 的
TTL端
&OTG端
连接(两个接口需全部连接再电脑上),等待软件获取开发板串口和 SOC 。
当显示“COM port found:”且 SOC 识别并显示,表明可以进行下一步。
③ 点击
Erase Flash
,出现 “Please press BOOT and RST buttons,and release to enter FEL mode”,然后按照顺序进行操作:
① 按下板子上的BOOT按钮、② 按下板子上的RST按钮、③ 松开板子上的RST按钮、④ 松开板子上的BOOT按钮
④ 直到显示 “Erase completed”,擦除操作完成。
⚠ 注意:这一步是必须的,在软件中也被设定为不擦除Flash,就无法写入固件
⑤ 点击 boot
...
按钮浏览文件夹,选择对应的烧录文件,文件在下载的 SPI NAND Flash 工具包中。
摄像头固件包文件路径:Camera_firmwareV0.2\output\images\u-boot-sunxi-with-nand-spl.bin
SPI 固件包文件路径:SPI_firmwareV0.2\output\images\u-boot-sunxi-with-nand-spl.bin点击 dtb
...
按钮浏览文件夹,选择对应的烧录文件,文件在下载的固件包中。
摄像头固件包文件路径:Camera_firmwareV0.2\output\images\devicetree.dtb
SPI 固件包文件路径:SPI_firmwareV0.2\output\images\devicetree_i2c_spi.dtb点击 kernel
...
按钮浏览文件夹,选择对应的烧录文件,文件在下载的固件包中。
摄像头固件包文件路径:Camera_firmwareV0.2\output\images\zlmage
SPI 固件包文件路径:SPI_firmwareV0.2\output\images\zlmage点击 rootfs
...
按钮浏览文件夹,选择对应的烧录文件,文件在下载的固件包中。
摄像头固件包文件路径:Camera_firmwareV0.2\output\images\rootfs.ubi
SPI 固件包文件路径:SPI_firmwareV0.2\output\images\rootfs.ubi
⑥ 依次点击
Write
按钮,开始烧录,当出现 "Please press BOOT and RST buttons,and release to start burning" 时,
按照顺序进行操作:①按下板子上的BOOT按钮、②按下板子上的RST按钮、③松开板子上的RST按钮、④松开板子上的BOOT按钮
等待烧录,当出现 “Burning completed successfully”,表明烧录成功,然后点击下一个Write
按钮
⑦ 完成全部烧录步骤后,出现“Please press RST button to restart system……”,说明烧录大功告成了!
按一下板子上的RST按钮,新的系统就开始工作了!
2.2 linux 下烧录固件的方法(使用命令行)
安装烧录工具
什么是 sunxi-tools
sunxi-tools 是带有 Allwinner SoC(全志科技开发的智能应用处理器 Soc)的 ARM 设备的命令行工具集合。
构建并安装 sunxi-tools
安装依赖包
sudo apt install pkg-config zlib1g-dev libusb-dev libusb-1.0-0-dev
下载代码
git clone https://github.com/Icenowy/sunxi-tools.git -b f1c100s-spiflash
编译并安装
cd sunxi-tools
make
sudo make install
dfu是什么
设备固件升级(DFU)是一种与供应商和设备无关的机制,用于通过其制造商提供的改进版本升级 USB 设备的[固件,从而提供(例如)部署固件错误修复的方法。在固件升级操作期间,USB 设备会有效地更改其操作模式,从而成为 PROM 编程器。遵循官方 DFU 规范,任何类型的 USB 设备都可以实现此功能。
DFU 还可以使用户自由使用备用固件来刷新 USB 设备。其结果之一是,重新刷新后的 USB 设备可能会充当各种设备类型。
dfu-util是什么
dfu-util 是实现 USB DFU(通用串行总线设备固件升级)协议的主机(PC)端的程序。DFU 旨在将固件下载到通过 USB 连接的设备上,或从该设备上载固件。它的范围从诸如微控制器板的小型设备到移动电话。使用 dfu-util,您可以将固件下载到启用 DFU 的设备或从中上传固件。
通过 apt-get 安装 dfu-util
sudo apt install dfu-util
烧录固件
下载固件
解压固件
创建文件夹(
mkdir ll
) --> 移动压缩包(mv Camera_firmwareV0.1.zip ll
) --> 解压压缩包(unzip Camera_firmwareV0.1.zip
)
putty 是什么
putty 是一个 Telnet、SSH、以及串行接口连接软件
安装串口工具 putty
sudo apt-get install putty
打开串口调试软件 putty
安装默认情况下,putty 被加入了 /usr/bin 目录下,所以可以直接终端使用 putty 命令,即可打开
获取串口地址
将板子连接到电脑上,使用命令
dmesg | grep tty
,查看串口设备信息
由此可以得到板子的串口是
ttyUSB0
一般情况下串口的名称全部在 dev 下面,如果你没有外插串口卡的话默认是 dev
使用命令
ls /dev/ttyUSB0
,查看是否存在
结果是存在的,那么串口地址就是
/dev/ttyUSB0
将串口填写到putty
中,然后打开串口进行格式化
serial line:填写对应的串口号
speed:填写115200
进入到固件的文件夹下(就是存放固件的位置)
同时按下
tiny200
的boot
按钮和rst
按钮,然后松开这个时候运行
.\fel-uboot.sh
脚本
然后等待运行完毕,再输入
mtd erase spi-nand0
,进行格式化处理
添加文件权限
通过
ll
命令,来查看文件权限如果文件没有执行权限,所以需要添加权限,通过以下命令添加权限
chmod +x fel-uboot.sh
chmod +x dfu-nand-ubifs.sh
如果添加权限失败,可以尝试在命令前面添加
sudo
(即sudo chmod +x fel-uboot.sh
),也可以切换到管理员账号(su
),在进行添加权限的操作
开始烧录
依旧要进入到固件的文件夹下()
按下
tiny200
的boot
按钮和rst
按钮,然后松开rst
按钮并运行下面的命令
sudo ./fel-uboot.sh && ./dfu-nand-ubifs.sh
验证 Mango-Pi 是否烧录成功
按下 Mango-Pi 的
RST
按钮,进入运行模式初次使用,需要等待10s以上
通过ifconfig
进行测试
出现了地址是
192.168.9.6
的网卡适配器,这就证明了烧录成功
Python 环境
已经内置,版本为 Python 3.8.5.
3. 连接主板
主板RNDIS网卡IP地址:192.168.9.1
用户名:root
密码:dfrobot
安装RNDIS驱动
3.1 RNDIS
RNDIS 是指 Remote NDIS,基于 USB 实现 RNDIS 实际上就是 TCP/IP over USB,就是在 USB 设备上跑 TCP/IP,让 USB 设备看上去像一块网卡。我们可以通过网络协议访问主板。
RNDIS驱动安装
使用 usb 数据线连接 Mango-Pi 板子上的 OTG 插口,将板子连接到电脑上
第一步,打开“设备管理器”
Win+X打开菜单,选择“设备管理器”
第二步,右键选择代表 Mango-Pi 板子的端口
Mango-Pi 在我这里是USB串行设备(COM9)
第三步,安装驱动
选中“更新驱动程序” >>> 选择“浏览我的计算机以查找驱动程序软件”
点击浏览定位到RNDIS驱动程序所在文件夹
点击”下一步“,等待片刻,就会显示驱动安装成功
第四步,检验驱动是否安装完成
驱动安装完成后,设备管理器中就会出现”USB Ethernet/RNDIS Gadget“
ps:USB Ethernet/RNDIS Gadget后面#3并没有什么意义
关于 Mango-Pi 上两个 USB 接口的作用
分别是 TTL 和 OTG 接口
TTL接口
TTL 接口是从 CP2104 芯片上引出的,将 F1C200S 芯片的 UART0 转为 USB 串口,我们可以将其作为主板的串口终端使用
OTG接口
OTG 接口是将 F1C200S 芯片的 USB 口引出来的接口,我们将 F1C200S 芯片的 USB 口模拟为 RNDIS 设备,在RNDIS 驱动的作用下变成连接板子的一个 USB 网卡
3.2 推荐软件
我们使用 SSH 协议远程控制主板,使用 sftp 协议远程传输文件,推荐 2 个常用的软件,一个是 PyCharm(商业版本),一个是 MobaXterm
PyCharm
PyCharm 是一种 Python IDE,带有一整套可以帮助用户在使用 Python 语言开发时提高其效率的工具,另外还提供 SSH 远程控制、sftp 远程传输功能
使用PyCharm连接主板
连接板子,注意:接入点是 Mango-Pi 的 OTG 接口
① 在 Pycharm 的选项卡上面点击Tools
->Deployment
->Configuration
② 在弹出的窗口上,点击“+”号,选择“SFTP”,进行创建远程服务器配置
③ 然后在弹出的窗口上输入远程服务器名称,点击“ok”
④ 修改 SSH 配置,通过Test Connection
确定是否可连接,Root path 可通过Autodetect
按键确定
host:192.168.9.1
用户名:root
密码:dfrobot
⑤ 在 Pycharm 的选项卡上面点击Tools
->Deployment
->Browse Remote Host
之后就会出现下面的画面
至此,连接主板完成
编写并运行 hello dfrobot 程序
① 在 Remote Host 窗口空白处右键选择New
下面的File
,创建 py 文件,并命名为 hello.py
② 编写脚本,并点击上传按钮(红色框),将内容上传到 Mango-Pi
③ 运行 hello.py
在Pycharm的选项卡上面点击
Tools
->Start SSH Session
在弹出的窗口中选择,之前配置好的 SSH 配置信息
然后再弹出的窗口中输入“python hello.py”,并回车
MobaXTerm
MobaXTerm 是一个全功能的免费使用的终端神器,支持 SSH、Serial、VNC、X11 等多种远程终端接入方式
安装了它,我们就可以远程控制所有的 linux 远程主机啦
安装 MobaXTerm
连接板子,注意:接入点是 Mango-Pi 的 OTG 接口
运行程序,开始第一步操作
创建会话
选中”Session“
选中会话类型“SSH”
在“Remote host“一栏,填写”192.168.9.1“
选中“Specify username”,然后再写上“root”
点击“OK”,进入会话界面
第二步,进入会话界面
输入密码:dfrobot ------> 这里输入密码是不会显示的
然后回车
回车过后进入会话界面
左侧sftp窗口可用于文件编辑,右侧ssh窗口用于命令交互
安装 pinpong 库
请烧录
内置pinpong库固件
4. 控制主板资源
4.1 GPIO
准备工作
- 烧录好的 Mango-Pi 板子一个
- 按钮一个
- LED灯一个
GPIO 在 sysfs 文件系统下的映射关系
映射引脚公式:
32*引脚组序号+引脚子编号=映射的引脚好
引脚组
引脚分类 | 映射的序号 |
---|---|
PA 开头的引脚 | 0 |
PB 开头的引脚 | 1 |
PC 开头的引脚 | 2 |
PD 开头的引脚 | 3 |
PE 开头的引脚 | 4 |
PF 开头的引脚 | 5 |
依次类推
例子
-
例子1:假设要操作 PE4 引脚
PE 对应的序号为 4
PE4 对应的位置为 PE 下的第 4 个引脚
带入公式可以的出:32*4+4=132
即,PE4 映射到 GPIO 中就是 132 引脚
-
例子2:假设要操作 PA6 引脚
PA 对应的序号为 0
PA6 对应的位置为 PA 下的第 6 个引脚
带入公式可以的出:32*0+6=6
即,PA6 映射到 GPIO 中就是 6 引脚
-
例子3:假设要操作 PF1 引脚
PF 对应的序号为 5
PF1 对应的位置为 PF 下的第 1 个引脚
带入公式可以的出:32*5+1=161
即,PF1 映射到 GPIO 中就是161引脚
开始映射
导出我们需要的 GPIO
# ls /sys/class/gpio
export gpiochip0 unexport
# echo 132 > /sys/class/gpio/export
# ls /sys/class/gpio/
export gpio132 gpiochip0 unexport
设置 GPIO 为输出方向
echo out > /sys/class/gpio/gpio132/direction
设置 GPIO 的输出电平
echo 1 > /sys/class/gpio/gpio132/value # 设置 GPIO 输出高电平
echo 0 > /sys/class/gpio/gpio132/value # 设置 GPIO 输出低电平
设置 GPIO 为输入方向
echo in > /sys/class/gpio/gpio133/direction
读取输入模式的 GPIO 电平
#cat /sys/class/gpio/gpio133/value
1
删除 GPIO 配置文件
#echo 132 > /sys/class/gpio/unexport
#ls /sys/class/gpio
export gpiochip0 unexport
使用 pinpong 控制 GPIO
pinpong编号 | 板子引脚 | SYSFS编号 |
---|---|---|
0 | PE0 | 128 |
1 | PE1 | 129 |
2 | PE2 | 130 |
3 | PE3 | 131 |
4 | PE4 | 132 |
5 | PE5 | 133 |
6 | PE6 | 134 |
7 | PE7 | 135 |
8 | PE8 | 136 |
9 | PE9 | 137 |
10 | PE10 | 138 |
11 | PE11 | 139 |
12 | PE12 | 140 |
blink(输出模式测试)
实现LED灯闪烁
import time
from pinpong.board import Board, Pin
b = Board("F1C")
b.begin()
led = Pin(3, Pin.OUT)#PE3
while True:
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
测试结果
在 PE3 引脚 连接一个 LED 灯
运行后 LED 灯闪烁
button(输入模式+输出模式测试)
实现开关灯
import time
from pinpong.board import Board, Pin
pyb = Board("F1C").begin()
btn = Pin(2, Pin.IN)#PE2
led = Pin(3, Pin.OUT)#PE3
while True:
v = btn.value()
print(v)
led.value(v)
time.sleep(0.1)
测试结果
在 PE3 引脚连接一个 LED 灯
在 PE2 引脚连接一个按钮
运行后,就可以实现通过按钮来开关 LED 灯
4.2 液晶屏
准备工作
- FPC-SH500J01Z 液晶屏一个
- 烧录好的 Mango-Pi 板子一个
操作液晶屏
将液晶的排线插到主板的排座上
查看屏幕接口
# ls /dev/fb0
/dev/fb0
校验结果
开机,启动内核
打印字符串到屏幕
#echo hello dfrobot > /dev/tty1
4.3 摄像头(请使用摄像头固件)
准备工作
- 摄像头(ov2640)一个
- 烧录摄像头固件的 Mango-Pi 板子一个
开始拍照
设置图像格式
media-ctl --set-v4l2 '"ov2640 0-0030":0[fmt:YUYV8_2X8/640x480]'
拍照测试
fswebcam -d /dev/video0 --no-banner -r 640x480 -S 10 1.jpg
检验结果
我这里通过搭建文件服务器来获取拍摄的图片
python -m http.server 8081
4.4 录音/放音
准备工作
-
小喇叭一个
在 OUT+ 和 OUT- 两端接一个小喇叭
-
烧录好的 Mango-Pi 板子一个
-
串口转网口安装驱动
修改配置文件
修改方式
修改命令为:tinymix set 序号 内容
例如:tinymix set 2 1 修改序号为2的项的值为on,on
修改成这样就可以了
Number of controls: 25
ctl type num name value
0 INT 1 DAC Playback Volume 63 (range 0->63)
1 INT 1 Headphone Playback Volume 63 (range 0->63)
2 BOOL 2 Headphone Playback Switch On, On
3 INT 1 Line In Playback Volume 0 (range 0->7)
4 INT 1 FM In Playback Volume 0 (range 0->7)
5 INT 1 Mic In Playback Volume 3 (range 0->7)
6 INT 1 Mic Boost Volume 4 (range 0->7)
7 INT 1 ADC Capture Volume 3 (range 0->7)
8 BOOL 1 ADC Mixer Right Out Capture Switch Off
9 BOOL 1 ADC Mixer Left Out Capture Switch Off
10 BOOL 1 ADC Mixer Line In Capture Switch Off
11 BOOL 1 ADC Mixer Right FM In Capture Switch Off
12 BOOL 1 ADC Mixer Left FM In Capture Switch Off
13 BOOL 1 ADC Mixer Mic Capture Switch On
14 BOOL 1 Left Mixer Right DAC Playback Switch Off
15 BOOL 1 Left Mixer Left DAC Playback Switch Off
16 BOOL 1 Left Mixer FM In Playback Switch Off
17 BOOL 1 Left Mixer Line In Playback Switch Off
18 BOOL 1 Left Mixer Mic In Playback Switch Off
19 BOOL 1 Right Mixer Left DAC Playback Switch Off
20 BOOL 1 Right Mixer Right DAC Playback Switch Off
21 BOOL 1 Right Mixer FM In Playback Switch Off
22 BOOL 1 Right Mixer Line In Playback Switch Off
23 BOOL 1 Right Mixer Mic In Playback Switch Off
24 ENUM 2 Headphone Source Playback Route , DACMixer, , DACMixer
开始播放音频
tinplay 001.wav
开始录制音频
tinycap 1.wav -d 0 -c 1 -r 44100 -b 16
Ctrl + C 结束录音
检验录音效果
tinplay 1.wav
4.5 I2C接口
准备工作
- OLED屏一个
- 烧录好的 Mango-Pi 板子一个
将OLED屏连接到 Mango-Pi 上
VCC、GND、SCL、SDA依次连接到 Mango-Pi 板子相应的位置上
屏幕引脚 | 板子引脚 |
---|---|
VCC | 3V3 |
GND | GND |
SCL | SCL |
SDA | SDA |
编写脚本
import time
from pinpong.board import Board
from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入 ssd1306 库
Board("F1C").begin()
oled=SSD1306_I2C(width=128, height=64, bus_num=0) #初始化屏幕,传入屏幕像素点数
while True:
oled.fill(1) #全部填充显示
oled.show() #显示生效
print("1")
time.sleep(1)
oled.fill(0) #全部填充熄灭,清屏
oled.show() #显示生效
print("0")
time.sleep(1)
oled.text(0) #显示数字
oled.text("Hello PinPong",8,8) #指定位置显示文字
oled.show() #显示生效
time.sleep(2)
检验结果
通过以下命令来检验是否成功
python oled.py
4.6 SPI 接口(使用 SPI 固件)
准备工作
- TFT LCD 屏幕一个
- 烧录好的 Mango-Pi 板子一个
将TFT LCD屏幕连接到 Mango-Pi 上
DC、RES、CS、MISO、MOSI、SCLK、GND、VCC依次连接到tiny200板子相应的位置上
屏幕引脚 | 板子引脚 |
---|---|
DC | PE5 |
RES | PE4 |
CS | PE7 |
MISO | PE10 |
MOSI | PE8 |
SCLK | PE9 |
GND | GND |
VCC | 3V3 |
编写脚本
import time
from pinpong.board import Board,Pin
from pinpong.libs.dfrobot_ili9341 import ILI9341_SPI #导入ili9341库
Board("F1C").begin()
dc = Pin(5, Pin.OUT)
res = Pin(4, Pin.OUT)
lcd = ILI9341_SPI(width=240, height=320, bus_num=1,device_num=0, dc=dc, res=res) #初始化屏幕,传入屏幕像素点数
lcd.begin()
while True:
lcd.fill(lcd.COLOR_RGB565_BLACK)
time.sleep(1)
lcd.fill(lcd.COLOR_RGB565_NAVY)
time.sleep(1)
lcd.fill(lcd.COLOR_RGB565_DGREEN)
time.sleep(1)
检验结果
通过以下命令来检验是否成功
python ili.py
4.7 WIFI
待完成
疑难解答
更多问题及有趣的应用,请访问论坛