4 个版本 (2 个破坏性更新)
0.3.0 | 2021年9月16日 |
---|---|
0.2.0 | 2021年2月2日 |
0.1.1 | 2020年2月2日 |
0.1.0 | 2020年1月25日 |
#545 in 硬件支持
每月46次下载
24KB
386 行
longan-nano
Longan Nano板的板级支持crate
文档
入门指南
安装依赖项
-
Rust 1.36或更新的工具链。例如:
rustup default stable
-
为RISC-V目标提供
rust-std
组件(预编译的core
crate)。运行
rustup target add riscv32imac-unknown-none-elf
- RISC-V工具链(例如,来自SiFive的链接)
以下之一
当使用dfu-util
时,不需要整个RISC-V工具链。只需要riscv-binutils-gdb中的objcopy
。
可以使用以下命令进行编译
git clone https://github.com/sifive/riscv-binutils-gdb.git
cd riscv-binutils-gdb
./configure --target=riscv64-unknown-elf --disable-werror --with-python=no --disable-gdb --disable-sim --disable-libdecnumber --disable-libreadline --with-expat=yes --with-mpc=no --with-mpfr=no --with-gmp=no
make
它将提供将编译的Rust二进制文件转换为firmware/bin
所需的binutils/objcopy
工具(注意:此功能也适用于arm64)。
构建
如果您在板上有一个GD32VF103CB芯片,请编辑.cargo/config
,并将memory-c8.x
替换为memory-cb.x
。
要构建提供的所有示例,请运行
cargo build --examples --release --all-features
使用dfu-util进行闪存编程
GD32VF103包含一个兼容DFU的引导加载程序,允许您在没有JTAG适配器等额外硬件的情况下编程longan-nano的固件;只需使用普通的USB-C电缆。您可以使用dfu-util或供应商提供的工具来闪存固件。
不幸的是,一些版本的该芯片配备了有缺陷的引导加载程序,它无法报告正确的参数以成功闪存。截至2020年5月,git存储库中dfu-util的最新版本包含了一个解决方案。请确保您使用的是最新版本。有关详细信息,请参阅此问题。
通过DFU闪存示例的步骤
- 解压二进制文件
riscv-nuclei-elf-objcopy -O binary target/riscv32imac-unknown-none-elf/release/blinky firmware.bin
- 使用
dfu-util
进行闪存
在通电或按下并释放复位按钮时按住BOOT0按钮。然后运行
dfu-util -a 0 -s 0x08000000:leave -D firmware.bin
确保dfu-util使用1024字节大小的页面;要么是因为您的GD32VF103的引导加载程序没有上述缺陷,要么是因为输出显示
[...]
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Found GD32VF103, which reports a bad page size and count for its internal memory.
Fixed layout based on part number: page size 1024, count 128.
Downloading to address = 0x08000000, size = 23784
[...]
使用OpenOCD进行闪存和调试
假设您有Sipeed JTAG适配器,启动openocd
/path/to/openocd -f sipeed-jtag.cfg -f openocd.cfg
运行其中一个示例
cargo run --example blinky
或者
cargo run --release --example ferris --features lcd
使用RV-LINK进行闪存和调试
RV-LINK是一款中文固件,类似于Black Magic Probe (BMP)。它支持Longan Nano,允许将一个Longan Nano板作为调试探针用于另一个板。它可以通过PlatformIO构建和闪存。查看最新版本以确保代码编译无误
> git clone https://gitee.com/zoomdy/RV-LINK
> cd RV-LINK
> git tag
v0.0.1
v0.1
v0.2 # <- seems to be the latest tag, so let's check this out
> git checkout tags/v0.2
PlatformIO允许通过单条命令构建和闪存固件。为此,板需要处于引导加载程序模式(DFU模式)。如果启动时按下引导加载程序按钮(例如,通过插入),板将启动到引导加载程序模式。但是,也可以在不拔插板的情况下进入引导加载程序模式:按住引导按钮,按住复位按钮,释放复位按钮,最后在板插入时释放引导按钮。
> pio run -t upload # put the board in bootloader mode before
将RV-LINK闪存到您的探针后,将探针上的八个调试引脚与调试目标上的调试引脚连接起来。请确保您按此表连接引脚
探针引脚 | 目标引脚 |
---|---|
JTDO | JTDO |
JTDI | JTDI |
JTCK | JTCK |
JTMS | JTMS |
3V3 | 3V3 |
GND | GND |
连接您的调试探针到主机后,将出现一个新的串行端口。您可以将GDB连接到这个串行端口作为extended-remote
。为了在存在多个串行设备时(因此/dev/ttyACM0
不一定是RV-LINK设备)获得可预测的行为,udev提供了id符号链接。但是,您也可以使用/dev/ttyACM0
甚至COMx
如果您正在运行Windows。
> gdb
(gdb) target extended-remote /dev/serial/by-id/usb-RV-LINK_Longan_Nano_GD32XXX-3.0.0-7z8x9yer-if00
要在GDB中执行闪存固件,请执行load
> gdb target/remote/debug/demo
(gdb) target extended-remote /dev/ttyACM0
(gdb) monitor reset halt
(gdb) load
(gdb) monitor reset
为了改进您的开发流程,您可以将在GDB中提到的上述命令放入一个debug.gdb
文件,并将这些行添加到.cargo/config
[target.riscv32imac-unknown-none-elf]
runner = 'gdb -command=debug.gdb'
这样,cargo run --target riscv32imac-unknown-none-elf
将自动启动GDB,在目标上闪存固件,并提供完整的调试环境。
您可以通过观察绿色LED的闪烁模式来推断板子的当前状态
闪烁行为 | 探针状态 |
---|---|
短脉冲,开启100ms,关闭900ms | GDB未连接 |
慢闪,开启500ms,关闭500ms | GDB已连接,调试的MCU处于停止状态 |
快速闪烁,开启100ms,关闭100ms | 已连接 GDB,调试的 MCU 正在运行 |
长脉冲,持续 900ms,关闭 100ms | RV-LINK 失败。重置 RV-LINK 后重试 |
许可
版权所有 2019-2020 RISC-V 团队
在此授予任何目的下使用、复制、修改和/或分发本软件的许可,无论是否收费,前提是上述版权声明和本许可声明出现在所有副本中。
软件按“原样”提供,作者放弃与此软件相关的所有保证,包括所有关于适销性和适用性的暗示保证。在任何情况下,作者均不对因使用或性能而导致的任何特殊、直接、间接或后果性损害或任何损害承担责任,无论这些损害是在合同、疏忽或其他侵权行为中产生的,以及与使用或性能有关。
行为准则
依赖项
约 4MB
约 112K SLoC