LattePanda RS232扩展板

简介

芒果派-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 版本,点击下面的链接可下载固件。

摄像头固件下载

SPI固件下载

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

进入到固件的文件夹下(就是存放固件的位置)

同时按下tiny200boot按钮和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),在进行添加权限的操作

开始烧录

依旧要进入到固件的文件夹下()

按下tiny200boot按钮和rst按钮,然后松开rst按钮并运行下面的命令

sudo ./fel-uboot.sh && ./dfu-nand-ubifs.sh

验证 Mango-Pi 是否烧录成功

按下 Mango-PiRST按钮,进入运行模式

初次使用,需要等待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 插口,将板子连接到电脑上

windows 端驱动下载地址

第一步,打开“设备管理器”

Win+X打开菜单,选择“设备管理器

第二步,右键选择代表 Mango-Pi 板子的端口

Mango-Pi 在我这里是USB串行设备(COM9)

第三步,安装驱动

选中“更新驱动程序” >>> 选择“浏览我的计算机以查找驱动程序软件

点击浏览定位到RNDIS驱动程序所在文件夹

点击”下一步“,等待片刻,就会显示驱动安装成功

第四步,检验驱动是否安装完成

驱动安装完成后,设备管理器中就会出现”USB Ethernet/RNDIS Gadget

ps:USB Ethernet/RNDIS Gadget后面#3并没有什么意义

关于 Mango-Pi 上两个 USB 接口的作用

分别是 TTLOTG 接口

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

待完成



疑难解答

更多问题及有趣的应用,请访问论坛



更多

DFshopping_car1.png DFRobot商城购买链接