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
相关推荐
ryanuo71 天前
Mac(M芯片)上进行嵌入式开发遇到的问题
嵌入式硬件·macos·开发板
机器视觉知识推荐、就业指导1 天前
为什么同一个引脚不能同时做按键和串口
stm32·单片机·嵌入式硬件
崇山峻岭之间1 天前
单片机基本定时器实验
单片机·嵌入式硬件
DS小龙哥1 天前
基于ESP32设计的智能养蜂监测系统
stm32·单片机·嵌入式硬件·物联网·华为云
夜月yeyue1 天前
STM32 DMA 双缓冲采样
linux·stm32·单片机·嵌入式硬件·系统架构
西城微科方案开发1 天前
SIC8P370D2L-PLP16 8位OTP单片机 低功耗多功能MCU详解
单片机·嵌入式硬件
踏着七彩祥云的小丑1 天前
嵌入式测试第 32 天:升级测试:固件OTA升级、断点续传、回滚测试
单片机·嵌入式硬件·学习
点灯小铭1 天前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
sramdram1 天前
基于MCU微控制器的电子血压计应用解决方案
单片机·嵌入式硬件·mcu·mcu微控制器
Szime1 天前
AD9218 国产替代方向:双通道 10 位 105MSPS ADC 选型支持
单片机·嵌入式硬件·fpga开发·汽车