CS110 Longan Nano 配置与使用
非官方 CS110 Longan Nano 指南
Lab 11, Lab 12, Project 3 目的
- Lab11: 领取Longan Nano开发套件;使用
dfu-util或DFU tool烧录固件并测试,确保7个按钮功能正常。Lab11不需要platformio。 - Lab12: 学会对Longan Nano编程;学会使用platformio编译固件。
- Project3: 制作Flappy Bird游戏。
Longan Nano 核心版与载板的连接
确保Longan Nano每侧只有17个pin,而不是20个。如果是20个,把靠近type-c口的三个排针掰掉。
“8P排针紧贴此侧”;插到底。
DFU工具的安装
下载地址:https://epan.shanghaitech.edu.cn/l/KFjNMO
DFU工具的用途:将已经编译好的固件(.bin)刷入Longan Nano开发板中。
Windows (GD32 MCU DFU Tool)
打开 windows-version\GD32 MCU Dfu Drivers_v1.0.1.2316, 下面有两个文件夹(x86和x64),如果Windows操作系统为64位,请进入 x64;如果系统为32位,请进入 x86 (绝大多数情况下,你的电脑是64位的)。
进入后运行 GD32 MCU Dfu Drivers.exe 安装驱动。
有可能导致蓝屏,如果电脑蓝屏则重启重试。根据我个人主观的经验,联想电脑蓝屏概率较大?因为该软件官方已经404,且由于Windows驱动程序需要签名,助教无法进行修复。 实在受不了蓝屏的话请换Linux,实体机虚拟机都行。
打开 windows-version\GD32 MCU Dfu Tool_v3.8.1.5784,运行 GD32 MCU Dfu Tool.exe。
Linux (dfu-util)
找到 linux-version 下的 dfu-util。这是一个可执行文件,在终端中输入 ./dfu-util 运行。
如果出现 “Permission denied”,请先执行 chmod +x ./dfu-util。
如果刷固件时出现错误,请尝试使用 sudo ./dfu-util。
macOS
通过 homebrew 安装 dfu-util,其余过程同Linux。
1 | |
DFU工具的使用(烧录固件的方法)
第一步:进入DFU模式
首先需要在Longan Nano上进入DFU模式,进入的方法如下:
- 按住 BOOT0 按键,不要松开
- 按住 RESET 按键,不要松开
- 松开 RESET 按键
- 松开 BOOT0 按键
注意:按键的顺序非常重要,请勿颠倒。如果失败请重试一遍。
BOOT0按键和RESET按键的位置请查看下图

第二步:下载(刷入)固件
Windows:
运行
GD32 MCU Dfu Tool.exe选择 “Download to Device”, 选择需要刷入的固件(后缀名为
.bin),可能需要在文件选择器右下角将文件后缀选择到.bin。保持默认
@0x80000000。通常不需要 “Verify After Download” 或 “Erase All”。点击 “OK” 进行刷入。
如果找不到设备,请检查Longan Nano是否已进入DFU模式;是否已经安装
GD32 MCU Dfu Drivers_v1.0.1.2316文件夹下的驱动;当前使用的USB typec线是否只能供电不能传数据,可以换一根线重试;请直接插到Longan Nano自带的type-口上,不要插到载板上的“仅供电”口上。
Linux:
找到
linux-version下的dfu-util。输入./dfu-util运行。如果出现 “Permission denied”,请先执行
chmod +x ./dfu-util。如果刷固件时出现错误,请尝试使用
sudo ./dfu-util。执行一下命令,查看dfu-util能否识别到当前设备。
1
sudo ./dfu-util --list如果输出内容包含
28e9:0189,则代表已经检测到了Longan Nano设备。如果有两个或多个ID都为
28e9:0189的设备,在命令中加入-a 0指定alt value为0的设备,即第一个设备(下面的固件刷入命令中含有./dfu-util -a 0已经能确保这一点)。可以使用
-d 28e9:0189指定device vender ID和product ID。可以使用-S指定serial number。如果找不到设备,请检查Longan Nano是否已进入DFU模式;如果使用的是Linux虚拟机,请检查虚拟机的设置,确认USB设备连接在虚拟机上而非Windows主机上;当前使用的USB typec线是否只能供电不能传数据,可以换一根线重试;请直接插到Longan Nano自带的type-口上,不要插到载板上的“仅供电”口上。
如果能够显示设备但不是
28e9:0189,请尝试使用lsusb命令。TODO找到需要刷入的固件(后缀名为
.bin)。假设该.bin文件已在当前目录下,使用以下命令:1
./dfu-util -a 0 --dfuse-address 0x08000000:leave -D ./lab-longan-nano-firmware-distributable.bin如果出现错误,尝试在命令前添加
sudo并重试。如果仍然不行,可以使用
-S指定serial number。如果找不到设备,看上面。
出现
Invalid DFU suffix signatureanddfu-util: Error during download get_status错误可忽略。
Mac:
通过 homebrew 安装
dfu-util.1
brew install dfu-util剩余过程同Linux
第三步:离开DFU模式
在Longan Nano上按下 RESET 按键即可。或者也可以拔掉 Longan Nano 上的typec线并重新插入(即断电再开机)。
以下为Lab12的内容
PlatformIO的安装
推荐使用 vscode 和 PlatformIO IDE 插件的方式(这也是 platformio.org 官网推荐的方式),这样能获得最好的开发体验。
也可以纯命令行使用
pip安装platformio(python3 -m pip install platformio),终端执行platformio run进行编译。这样的缺点是IDE代码检查会不正确,像下面一样有很多爆红,体验不是很好,但除此之外不会影响编译和烧录过程。

不要混用两种方法(即不要既通过 pip 安装 platformio 又安装 vscode 的 PlatformIO IDE 插件;可以先卸载 pip 的 platformio 再去安装 vscode 插件)。
vscode 插件方式
在 此处 下载 lab12-starter,并解压。

插件安装完成之后,点击 vscode 侧边栏中的 PlatformIO 图标,等待初始化完成

解压下载的 lab12-starter, 打开该目录并打开里面的 platformio.ini 文件,点击 build。
如果没有build选项,请卸载coderunner插件。

由于Sipeed从platformio仓库中移除了Longan nano的开发套件,可能会提示错误。请下载 https://epan.shanghaitech.edu.cn/l/KFjNMO 中的Longan Dev Kit,按照里面的说明文档进行开发工具的安装。
不过还是建议看压缩包里的 README.pdf,那个更详细点。下面是个简述:
安装platformio后,打开 ~/.platformio (Windows下为 C:\Users\<your username>\.platformio) ,里面应该至少有以下文件
1 | |
将提供的Dev Kit中的packages目录里的文件复制到 ~/.platformio/packages/ 中,将 platforms 目录里的文件复制到 ~/.platformio'/platforms 中。
如果文件不存在(例如,未找到 ~/.platformio 目录等),这是因为PlatformIO Home从未打开过。
然后需要将编译好的固件烧录进 Longan Nano。编译好的固件在 ./.pio/build/sipeed-longan-nano/firmware.bin,请参考上文DFU工具的使用将该 .bin 结尾的固件刷入。

故障排查:
Fail to initialize PlatformIO: 彻底退出vscode并重试
Cannot find Python Interpreter when initializing PlatformIO: 参考此处的方法
无法编译,找不到 gd32v

这是没装Longan Dev Kit,请确认安装了 https://epan.shanghaitech.edu.cn/l/KFjNMO 中的Longan Dev Kit。
另外再次确保你在x86-64 Windows或者x86-64 Linux环境上进行编译!!
ARM Linux,ARM Mac,ARM Windows是不行的,只能烧录,不能编译。
如果你使用的是ARM的设备,那只能远程(如ssh)一台x86的电脑进行编译,编译完成之后下载
firmware.bin到本地进行烧录。无法编译,
HTTPClientError
请重新安装PlatformIO。在重新安装的过程中,vscode不要打开
platformio.ini,也不要打开任何含有platformio.ini文件的目录!这是因为Sipeed把Longan Nano SDK从官网移除了,但没有移除全部,且这个不完整的SDK版本比上面说的 Longan Dev Kit 版本要高,因此即使你安装了Longan Dev Kit,PlatformIO也会使用版本更高的那个不完整的SDK,导致图中
HTTPClientError: You do not have permission for this request的错误。无法编译,提示文件权限问题

这是因为你下载Dev Kit后,先本地解压,再使用某种工具(如scp)将文件拷贝到了远程的另一台电脑上,这一过程文件权限(可执行权限)丢失。
请拷贝到远程之后再进行解压。
命令行pip方法
使用 pip 安装 platformio
1 | |
同样下载 lab12-starter,解压
下载 https://epan.shanghaitech.edu.cn/l/KFjNMO 中的Longan Dev Kit,按照里面的说明文档进行开发工具的安装
然后使用 platformio run 命令进行编译
1 | |
杂项
这里收集一些Longan Nano开发过程的常见问题,其中有一部分是库的bug,可供参考。
屏幕纵向显示
整体竖屏布局?
在 lcd.h 中 #define USE_HORIZONTAL 1。
u16 size问题
来源:https://piazza.com/class/lsvl55gd4jz4h0/post/413
在lcd.h 中有 #define u16 unsigned int 的宏定义,但通过 sizeof() 会发现u16的size为4 byte,uint16_t和unsigned short 才是正常的2 byte,因此可通过修改这条宏定义解决,解决后编译出的固件大小会近乎减半。
LCD_Show无法充分利用屏幕的问题
来源:https://piazza.com/class/lsvl55gd4jz4h0/post/416
在 lcd.c 中,LCD_ShowChar 和 LCD_ShowString 函数没有充分利用屏幕空间。
屏幕分辨率为160x80,在vertical display mode中,屏幕纵向能显示80 / 8 = 10 chars,但LCD_ShowString函数在第9个char之后就进行了换行,并且 LCD_ShowChar 无法在 (72, 0) 处显示char。
解决办法:
修改 LCD_ShowChar 函数:
1 | |
修改 LCD_ShowString 函数:
1 | |