一、J-Link Commander 官方文档
1.1 官方文档链接
在这里:
供参考,本文讨论常用的使用办法及技巧。
1.2 打开 J-Link 软件
在C:\Program Files\SEGGER\JLink_V938a\ (你的 J-Link 安装目录) 目录下:

或者在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\SEGGER - J-Link V9.38a\ 的快捷方式中:

二、通过 J-Link 命令访问 MCU
2.1 查找 J-Link 设备列表
使用 ShowEmuList 命令。
发送:
bash
J-Link>ShowEmuList
返回:
bash
J-Link>showemulist
J-Link[0]: Connection: USB, Serial number: 80200XXXX, ProductName: J-Link EDU Mini, Nickname: <not set>
界面就是这样,之后为了节约篇幅不再截图这个窗口:

2.2 连接目标 MCU
2.2.1 device 命令
device 后面可接 MCU 架构或者 MCU 型号,填写下图中 J-Flash 的 Target Device Settings 有的 Device 即可:

发送:
bash
J-Link>device RISC-V
无返回值
2.2.2 si 命令
设置接口为 JTAG,也可以是 SWD 等,下图为可选的参数:

发送:
bash
J-Link>si JTAG
返回:
cpp
J-Link>si JTAG
Selecting JTAG as current target interface.
2.2.3 speed 命令
设置 JTAG 通信速度为 4000 kHz。
发送:
cpp
J-Link>speed 4000
返回:
cpp
J-Link>speed 4000
Selecting 4000 kHz as target interface speed
2.2.4 connect 命令
连接目标 MCU 并自动检测 JTAG 链中设备位置 -1,-1 是选择所有 J-Link 设备。
发送:
cpp
connect -1,-1
返回:
cpp
J-Link>connect -1,-1
Device "RISC-V" selected.
Connecting to target via JTAG
ConfigTargetSettings() start
ConfigTargetSettings() end - Took 6us
TotalIRLen = 5, IRPrint = 0x01
JTAG chain detection found 1 devices:
#0 Id: 0x1000563D, IRLen: 05, RV32
Assuming RISC-V TAP with JTAG-DTM setup
DTM architecture:
RISC-V JTAG-DTM version: 0.13
AddrBits: 7
DataBits: 32
IdleClks: 7
RISC-V Debug Spec. Version: 0.13
Memory access:
Via system bus: Yes (8/16/32-bit accesses are supported)
Via ProgBuf: Yes (8 ProgBuf entries)
Via abstract command (AAM): May be tried as last resort
DataBuf: 4 entries
autoexec[0] implemented: Yes
Detected: RV32 core
Temp. halting CPU for feature detection...
HW instruction/data BPs: 8
Support set/clr BPs while running: No
HW data BPs trigger before execution of inst
CSR access via abs. commands: Yes
Compressed instruction support: Yes
Feature detection done. Restarting core...
BG memory access support: Via SBA
Memory zones:
Zone: "Default" Description: Default access mode
RISC-V identified.
大概意思是,J-Link 通过 JTAG 成功连接到了一个 RISC-V RV32 内核,并正确识别了 RISC-V Debug Module。调试器完成了 CPU 特性探测,确认支持硬件断点、CSR访问、Program Buffer 和系统总线调试等功能。最终输出 RISC-V identified.,说明调试链路已经建立成功,可以正常进行下载、读寄存器和单步调试。
2.2.5 h 命令
h 命令是暂停 CPU (halt)
发送:
bash
h
2.2.6 regs 命令
regs 是查看 CPU 寄存器状态 (PC、通用寄存器等)
发送:
bash
regs
返回:
bash
J-Link>h
pc = 80029C00 sp = 00208370 ra = 80027BE0
gp = 01200800 tp = 012013B8 fp = CC3203D5
t0 = 00000200 t1 = 00000001 t2 = 00000010
t3 = 00020000 t4 = 00008000 t5 = 00000000 t6 = 00000000
a0 = 000927C0 a1 = CC3203D5 a2 = 00000021 a3 = 00000021
a4 = CBF0D874 a5 = CBF0D878 a6 = 00000000 a7 = 00000000
s1 = 00000021 s2 = 01210000 s3 = 0000000A s4 = 00000001
s5 = 00238620 s6 = 00000001 s7 = 00238724 s8 = B000F0F0
s9 = 0023862C s10 = 00000000 s11 = 0023CED8
2.2.7 go 命令
go 命令让 让 CPU 继续运行 (resume)
发送:
bash
go
返回:
bash
Memory map 'after startup completion point' is active
2.2.8 总结
bash
device RISC-V
si JTAG
speed 4000
jtagconf -1,-1
connect
h
regs
go
exit
- 选择目标芯片为 RISC-V 架构
- 设置接口为 JTAG (也可以是 SWD 等)
- 设置 JTAG 通信速度为 4000 kHz (4 MHz)
- 连接目标 MCU 并自动检测 JTAG 链中设备位置 (IRPre/DRPre 自动识别)
- 暂停 CPU (halt)或者显示帮助
- 查看 CPU 寄存器状态 (PC、通用寄存器等)
- 让 CPU 继续运行 (resume)
新建记事本保存上述内容 改后缀为 riscv-connect.jlink 后,使用 powershell 打开:
cpp
& 'C:\Program Files\SEGGER\JLink_V942\JLink.exe' -CommanderScript .\riscv-connect.jlink
此时就可以执行完整的命令了。
三、烧录程序到 MCU
3.1 烧录的命令
3.1.1 loadfile
loadfile 命令可以将 .elf 文件烧录到 MCU 中,因为 .elf 文件已经包括 Flash 偏移地址,所以我们不需要再写入。
发送:
cpp
loadfile C:\Users\a2493\Documents\Codex\2026-05-14\jlink-risc-v\pd14_blinky\build_ram\output\demo.elf
3.1.2 setpc
强行修改 CPU 下一条要执行的指令地址,0x0 就是让 CPU 从 0 地址开始执行程序。
发送:
bash
setpc 0x0 ; 设置程序计数器
3.1.3 sleep
延迟命令,延迟 2500ms。
发送:
bash
sleep 2500
3.2 烧录
烧录后我们先执行 setpc 0x0 让 CPU 跳转到 0:
bash
device HPM6E8YxGNx
si JTAG
speed 4000
connect -1,-1
h
loadfile demo.elf
setpc 0x0
go
sleep 2500
h
regs
go
exit
- 选择目标芯片
- 设置接口为 JTAG
- 设置 JTAG 通信速度 4000 kHz
- 连接 MCU 并自动检测 JTAG 链位置
- 暂停 CPU
- 加载程序
- 设置程序计数器
- go让 CPU 运行
- 等待 2.5 秒
- 暂停 CPU
- 查看寄存器状态
- CPU 继续运行
- 退出 J-Link
四、调试 MCU
4.2 调试命令
4.2.1 mem32
这是 J-Link读取命令,以 32 位方式读取地址 0xF00D0130 的内存内容,共读取 1 个数据。
bash
mem32 0xF00D0130 1
4.2.2 D
D 命令 和 mem32 命令很接近,都是查看内存。
D 更像内存查看器,会按默认格式显示。
cpp
D 0xF00D0130 1
4.2.3 w4
w4 命令是写入 4 字节。
表示通过 J-Link 向 MCU 地址 0xF00D0234 写入一个 32 位数据 0x00004000。
bash
w4 0xF00D0234 0x00004000
五、擦除 MCU
5.1 erase 命令
erase 命令是擦除 flash。
表示擦除 0x80000000 到 0x803FFFFF 之间的 Flash 区域。
cpp
erase 0x80000000 0x803FFFFF
5.2 获得擦除大小
在 J-Flash 中创建项目可以在库中查到 MCU 的 FLASH 大小和起始地址:



我们查询到 HPM6E8YxGNx Flash 大小是 4MB,起始地址是 0x80000000 就可以执行全片擦除:
我们使用 connect 命令成功连接到 MCU 后就可以执行擦除命令:
cpp
erase 0x80000000 0x803FFFFF