文档
SEGGER J-Link 调试与量产完全指南
本章目标
深入理解 J-Link 在专业嵌入式开发中的核心价值,掌握高级调试和量产工具链。
1. J-Link 型号选择
| 型号 | 速度 | 特色 | 定位 |
|---|---|---|---|
| EDU | 15MHz | 基础教育用途 | 学生/爱好者 |
| EDU Mini | 4MHz | 超小体积 | 入门 |
| BASE | 15MHz | 无限制商用 | 中小型公司 |
| Plus | 50MHz | 以太网 | 远程调试 |
| Ultra+ | 100MHz | 4MB/s Flash | 高速量产 |
| PRO | 100MHz | 多核 + ETM 跟踪 | 高端开发 |
2. RTT 深入
RTT 通信原理
MCU RAM 中环形缓冲区 (Up Buffer + Down Buffer)
↕
J-Link 通过 SWD 直接读取(无需 CPU 参与)
↕
PC 端 RTT Viewer / JLinkRTTClient
多通道使用
// 通道 0:主日志
SEGGER_RTT_printf(0, "System boot OK\n");
// 通道 1:性能计数器(高频)
SEGGER_RTT_Write(1, &perf_data, sizeof(perf_data));
// 通道 2:错误日志
SEGGER_RTT_printf(2, "ERROR: %s at %d\n", file, line);
3. Ozone 高效调试
条件断点
Break.SetCondition("count == 42");
Break.SetCondition("data > 0x100 && data < 0x200");
数据采样
1. View → Data Sampling → 添加变量
2. 设置采样率(1kHz)
3. Start → 运行系统
4. 停后导出 CSV 分析
指令跟踪(ETM/ETB)
- 需要 J-Trace 或 J-Link Pro
- 记录每条执行的指令
- 用于分析 HardFault 现场
4. 量产编程策略
离线烧录
- J-Link + J-Flash:适合小批量(<1000)
- Flasher ARM:独立烧录器,一键操作
在线烧录(产线)
# 配合测试治具
JLinkExe -device STM32F407VG -if SWD -speed 4000 \
-autoconnect 1 -CommanderScript flash_script.jlink
# flash_script.jlink
r
loadbin firmware.bin 0x08000000
verifybin firmware.bin 0x08000000
r
g
exit
5. 安全与保护
# 使能读保护 Level 1
JLinkExe -device STM32F407VG -if SWD <<EOF
r
w4 0x40023C14 0x08192A3B # unlock OPTCR
w4 0x40023C14 0x08192A3B
w1 0x1FFFC000 0xCC # RDP=CC (Level 2 不可逆!)
exit
EOF
⚠️ RDP Level 2 不可逆!芯片将永远无法再调试!
思考题
- RTT 为什么比串口 printf 快 100 倍?它的瓶颈在哪?
- 条件断点对 CPU 实时性有什么影响?
- 量产烧录如何保证固件不被窃取?