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次下载

ISC许可证

24KB
386

crates.io crates.io Build Status

longan-nano

Longan Nano板的板级支持crate

文档

入门指南

安装依赖项

  • Rust 1.36或更新的工具链。例如:rustup default stable

  • 为RISC-V目标提供rust-std组件(预编译的corecrate)。运行

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闪存示例的步骤

  1. 解压二进制文件
riscv-nuclei-elf-objcopy -O binary target/riscv32imac-unknown-none-elf/release/blinky firmware.bin
  1. 使用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是一款中文固件,类似于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 团队

在此授予任何目的下使用、复制、修改和/或分发本软件的许可,无论是否收费,前提是上述版权声明和本许可声明出现在所有副本中。

软件按“原样”提供,作者放弃与此软件相关的所有保证,包括所有关于适销性和适用性的暗示保证。在任何情况下,作者均不对因使用或性能而导致的任何特殊、直接、间接或后果性损害或任何损害承担责任,无论这些损害是在合同、疏忽或其他侵权行为中产生的,以及与使用或性能有关。

行为准则

对本软件包的贡献受Rust 行为准则的约束,本软件包的维护者、RISC-V 团队承诺将介入以维护该行为准则。

依赖项

约 4MB
约 112K SLoC