8 个版本
0.0.8 | 2024年3月30日 |
---|---|
0.0.7 | 2023年11月4日 |
0.0.6 | 2023年10月7日 |
0.0.4 | 2023年7月1日 |
0.0.3 | 2023年2月28日 |
#91 in 嵌入式开发
每月下载量 279
190KB
3.5K SLoC
wlink - WCH-Link(RV) 命令行工具
注意 此工具仍在开发中,尚未准备好用于生产。
功能支持
- 闪存固件,支持 Intel HEX、ELF 和原始二进制格式
- 擦除芯片
- 暂停、恢复、复位支持
- 读取芯片信息
- 读取芯片内存(闪存)
- 读取/写入芯片寄存器 - 非常适合调试
- 支持芯片的代码保护和解锁
- SDI 打印 支持,需要 2.10+ 固件
- 串口监控,提供流畅的开发体验
- 支持 Windows 原生驱动程序,无需手动安装 libusb(需要 x86 构建过程)
测试平台
探头
当前固件版本:2.11(即 v31)。
注意:固件版本与 WCH 工具链显示的版本不同。因为 WCH 通过以下方式计算版本号:
major * 10 + minor
,所以固件版本 2.10 实际上是 v300x020a
。
- WCH-Link CH549 - 第一个版本,切换模式时需要重新闪存
- WCH-LinkE CH32V305 - 推荐的调试探头
- WCH-LinkW CH32V208 - 无线版本
- WCH-Link? CH32V203
MCU
- CH32V003
- CH32V103
- CH32V203
- CH32V307
- CH569/CH565
- CH573/CH571
- CH583/CH582/CH581
- CH592/CH591
- CH643 - 我没有这个芯片,需要帮助
- CH641 - 我没有这个芯片,需要帮助
- CH32X035
- CH32L103 - 我没有这个芯片,需要帮助
- CH8571 - 没有关于这个芯片的其他来源,需要帮助
- ... (如有在其他芯片上测试,请随意提交问题)
安装
cargo install --git https://github.com/ch32-rs/wlink
或者从 Nightly 发布页面 下载二进制文件。
注意 在 Linux 上,您应首先安装 libudev 和 libusb 开发库。例如,在 Ubuntu 上使用
sudo apt install libudev-dev libusb-1.0-0-dev
。
Arch Linux
Arch Linux 用户可以通过 AUR 安装 wlink-git。
yay -Syu wlink
使用方法
注意 关于特定芯片的线连接帮助,请参阅
docs
子目录。
> # Flash firmware.bin to Code FLASH at address 0x08000000
> wlink flash --address 0x08000000 ./firmware.bin
12:10:26 [INFO] WCH-Link v2.10 (WCH-Link-CH549)
12:10:26 [INFO] Attached chip: CH32V30X(0x30700518)
12:10:26 [INFO] Flashing 8068 bytes to 0x08000000
12:10:27 [INFO] Flash done
12:10:28 [INFO] Now reset...
12:10:28 [INFO] Resume executing...
> # Flash firmware.bin to System FLASH, enable SDI print, then watch serial port
> wlink flash --enable-sdi-print --watch-serial firmware.bin
02:54:34 [INFO] WCH-Link v2.11 (WCH-LinkE-CH32V305)
02:54:34 [INFO] Attached chip: CH32V003 [CH32V003F4P6] (ChipID: 0x00300500)
02:54:34 [INFO] Flash already unprotected
02:54:34 [INFO] Flash protected: false
02:54:35 [INFO] Flash done
02:54:35 [INFO] Now reset...
02:54:35 [INFO] Now connect to the WCH-Link serial port to read SDI print
Hello world from ch32v003 SDI print!
led toggle
led toggle
...
> # Dump Code FLASH, for verification
> # use `-v` or `-vv` for more logs
> wlink -v dump 0x08000000 100
18:31:18 [DEBUG] (1) wlink::device: Acquired libusb context.
18:31:18 [DEBUG] (1) wlink::device: Claimed interface 0 of USB device.
18:31:18 [INFO] WCH-Link v2.8 (WCH-LinkE-CH32V305)
18:31:18 [DEBUG] (1) wlink::operations: attached chip: ChipInfo { chip_family: CH32V20X, chip_type: "0x20360510" }
18:31:18 [DEBUG] (1) wlink::operations: Chip UID: cd-ab-b4-ae-45-bc-c6-16
18:31:18 [DEBUG] (1) wlink::operations: flash protected: false
18:31:18 [DEBUG] (1) wlink::operations: SRAM CODE mode: 3
18:31:18 [DEBUG] (1) wlink::operations: RISC-V core version: Some("WCH-V4B")
18:31:18 [INFO] Read memory from 0x08000000 to 0x08000064
08000000: b7 00 00 08 67 80 80 00 73 50 40 30 73 50 40 34 ×00•g××0sP@0sP@4
08000010: 81 40 01 41 81 41 01 42 81 42 01 43 81 43 01 44 ×@•A×A•B×B•C×C•D
08000020: 81 44 81 46 01 47 81 47 01 48 81 48 01 49 81 49 ×D×F•G×G•H×H•I×I
08000030: 01 4a 81 4a 01 4b 81 4b 01 4c 81 4c 01 4d 81 4d •J×J•K×K•L×L•M×M
08000040: 01 4e 81 4e 01 4f 81 4f 97 01 00 18 93 81 81 7b •N×N•O×Oו0•×××{
08000050: f3 23 40 f1 b7 02 00 00 93 82 02 00 63 f4 72 00 ×#@×ו00×ו0c×r0
08000060: 6f 00 c0 29 o0×)
> # Dump System FLASH, BOOT_28KB
> wlink dump 0x1FFF8000 0x7000
....
> # Dump all general purpose registers
> wlink regs
16:24:20 [INFO] Dump GPRs
dpc(pc): 0x2000011a
x0 zero: 0x00000000
x1 ra: 0x49c85c07
x2 sp: 0x20002800
x3 gp: 0x206e24c4
x4 tp: 0x9add07a3
x5 t0: 0xb4a9b38a
....
> # Set dpc(pc) to System Flash
> wlink write-reg 0x7b1 0x000009a8
参考
- docs/references.md
- WCH 的 openocd 分支: https://github.com/treideme/openocd-hacks
依赖
~10–18MB
~243K SLoC