J-link Commander 命令操作 MCU 连接、调试、烧录、擦除等

1.1 官方文档链接

在这里:

J-Link Commander - SEGGER Knowledge Base

供参考,本文讨论常用的使用办法及技巧。

在C:\Program Files\SEGGER\JLink_V938a\ (你的 J-Link 安装目录) 目录下:

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

使用 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
相关推荐
lingzhilab3 小时前
零知派ESP32——ULN2003AN驱动28BYJ-48步进电机控制系统
单片机·嵌入式硬件
╰ㄣ浮华若梦︶ _4 小时前
51单片机的SPI协议
单片机·嵌入式硬件·51单片机·8051·spi协议
崇山峻岭之间4 小时前
单片机按键实验
单片机·嵌入式硬件
踏着七彩祥云的小丑4 小时前
嵌入式测试学习第 16 天:复位电路、电源电路基础原理
单片机·嵌入式硬件
小手智联老徐4 小时前
Arduino IDE环境搭建与点亮ESP32 D1板载LED
嵌入式硬件·esp32·arduino
坤坤藤椒牛肉面4 小时前
stm32学习1--新建工程
stm32·单片机·学习
yong99904 小时前
STM32 LoRaWAN Ping-Pong 节点方案
stm32·单片机·嵌入式硬件
模拟IC攻城狮4 小时前
(最新)华为 2025届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
嵌入式硬件·华为·硬件架构·pcb工艺·模拟芯片
我先去打把游戏先5 小时前
Ubuntu虚拟机(服务器版本)Git安装教程(附常用命令)——从零开始掌握版本控制
服务器·c语言·c++·git·嵌入式硬件·物联网·ubuntu