其他
使用 J-Link 探针完成固件烧录、内存/寄存器访问…
当上下文涉及 J-Link/JLink 探针,需要探测连通性、烧录固件、读写内存/寄存器、复位、查看 RTT/SWO 或做在线调试时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15
适用场景
使用 J-Link 探针完成固件烧录、内特定
解决思路
- 首次使用前检查 skill/config.json 中的 exe 路径有效;配置环境级字段:exe 为 JLink.exe 完整路径(必填)、gdbserver_exe 为 JLinkGDBServerCL.exe 路径(RTT 和 GDB 调试需要)、rtt_exe 为 JLinkRTTClient.exe 路径、gdb_exe 为 arm-none-eabi-gdb 路径(GDB 源码级调试需要)、serial_no 为默认探针序列号(多探针场景使用)、rtt_telnet_port 为 RTT 端口(0 使用默认值)、swo_command 为可选完整 SWO viewer 命令数组、operation_mode 为 1 直接执行 / 2 输出风险摘要但不阻塞 / 3 执行前确认。
- 在工程级 .embeddedskills/config.json 的 jlink 中配置 device(如 STM32F407VG、GD32F470ZG)、interface(SWD 或 JTAG,默认 SWD)、speed(调试速率 kHz,默认 4000)。
- 按优先级解析参数:CLI 显式参数 > .embeddedskills/config.json(工程级)> skill/config.json(环境级)> .embeddedskills/state.json > 默认值/报错。
- 执行流程读取 skill/config.json 确认 exe 路径有效,读取 .embeddedskills/config.json 获取工程级配置,读取 .embeddedskills/state.json 获取历史状态。
- 若当前动作需要 device 且仍为空,直接要求用户补充,绝不猜测芯片型号。
- 多探针场景未指定 serial_no 时,列出探针让用户选择,不自动选择。
- 按 operation_mode 决定是否需要确认后执行:1 直接执行,2 输出风险摘要但不阻塞,3 执行前确认。
- 使用模板生成临时 .jlink 命令文件,调用 JLink.exe 时带 -NoGui 1 -ExitOnError 1 -AutoConnect 1。
- 解析 JLink 输出和返回码,返回结构化结果。
- 成功执行后,将确认过的 device/interface/speed 写回 .embeddedskills/config.json。
- 用 python <skill-dir>/scripts/jlink_exec.py info --device GD32F470ZG --json 探测探针与目标连通性。
- 用 python <skill-dir>/scripts/jlink_exec.py flash --file build/app.hex --device GD32F470ZG --json 烧录固件;.hex/.bin/.elf 均可;烧录 .bin 必须提供地址:python <skill-dir>/scripts/jlink_exec.py flash --file build/app.bin --device GD32F470ZG --address 0x08000000 --json。
- 用 python <skill-dir>/scripts/jlink_exec.py read-mem --address 0x08000000 --length 256 --device GD32F470ZG --json 读取内存区域。
- 用 python <skill-dir>/scripts/jlink_exec.py write-mem --address 0x20000000 --value 0x12345678 --device GD32F470ZG --json 写入内存。
- 用 python <skill-dir>/scripts/jlink_exec.py regs --device GD32F470ZG --json 查看 CPU 寄存器。
- 用 python <skill-dir>/scripts/jlink_exec.py reset --device GD32F470ZG --json 复位目标芯片。
- 用 python <skill-dir>/scripts/jlink_exec.py halt --device GD32F470ZG --json 暂停 CPU,返回寄存器状态。
- 用 python <skill-dir>/scripts/jlink_exec.py go --device GD32F470ZG --json 恢复 CPU 运行。
- 用 python <skill-dir>/scripts/jlink_exec.py step --device GD32F470ZG --count 3 --json 单步执行并返回执行的指令和寄存器。
- 用 python <skill-dir>/scripts/jlink_exec.py run-to --device GD32F470ZG --address 0x08001234 --timeout-ms 3000 --json 设置断点并运行,等待命中后返回状态。
- jlink_exec.py 通用可选参数:--interface SWD|JTAG、--speed 4000、--serial-no <序列号>、--exe <JLink.exe路径>。
- 用 python <skill-dir>/scripts/jlink_rtt.py --device GD32F470ZG --json 读取 RTT 日志输出;可选参数:--serial-no、--channel、--encoding、--rtt-port、--gdbserver-exe <路径>、--rtt-exe <路径>。
- RTT 工作方式:先通过 JLinkGDBServerCL.exe 建立调试连接,再启动 JLinkRTTClient.exe 读取 RTT 数据;--json 模式输出 JSON Lines。
- 用 python <skill-dir>/scripts/jlink_swo.py --json 使用 config.json 里的 swo_command 包装 SWO 事件流;或显式传入:python <skill-dir>/scripts/jlink_swo.py --viewer-cmd JLinkSWOViewerCL.exe -device GD32F470ZG -itf SWD -speed 4000 --json。
- jlink_swo.py 不直接实现 SWO 协议,而是把外部 viewer 的 stdout/stderr 统一包装成 JSON Lines,便于上层 workflow 或 AI 消费。
- 用 python <skill-dir>/scripts/jlink_gdb.py run --gdbserver-exe <路径> --gdb-exe <arm-none-eabi-gdb路径> --device GD32F470ZG --elf build/app.elf --commands "break main" "continue" "backtrace" "info locals" --json 执行自定义 GDB 命令序列。
- 用 python <skill-dir>/scripts/jlink_gdb.py backtrace --gdbserver-exe <路径> --gdb-exe <路径> --device GD32F470ZG --elf build/app.elf --json 快捷获取调用栈;用 locals 同理查看局部变量。
- GDB one-shot 子命令:gdb break/continue/next/step/finish/until 控制执行流;gdb frame/print/watch/disassemble/threads/crash-report 做源码级诊断。
- GDB 源码级调试需要 ELF 文件才能断点到函数名和查看变量;没有 ELF 时仍可使用地址级调试。
- 所有脚本以 JSON 返回,基础字段为 status(ok/error)、action、summary、details,并可能附 context、artifacts、metrics、state、next_actions、timing;流式观测命令用 JSON Lines,并统一输出 source、channel_type、stream_type。
- 输出结构:halt 返回 registers;step 返回 steps(包含 address/opcode/instruction)和 registers;run-to 返回 bp_address、bp_hit、registers。
- 核心规则:不自动猜测 device 芯片型号;多探针不自动选择探针;参数优先级固定;.bin 必须显式提供烧录地址,缺失时报错。
- 连接失败时给出排查建议(检查连线、供电、接口类型、速度),不自动尝试更激进参数。
- 烧录、写内存、复位在参数完整且用户意图明确时直接执行。
- run-to 的断点在单次 JLink 会话内完成设置和清除,不存在跨会话 handle 问题。
- 结果回显中始终包含目标芯片、接口类型和执行动作。
- 产物路径(elf/file)不进入工程配置,仍只依赖 state.json;last_flash/last_debug 等运行状态继续写入 state.json。
- 快速排查工作流:halt → regs → read-mem → step → go,适合查看当前执行位置、寄存器状态、内存值,无需 ELF 和 GDB。
- 断点调试工作流:run-to(address) → regs → read-mem → go,在指定地址设置断点并等待命中,查看此时状态。
- 源码级调试工作流:gdb run --elf app.elf --commands "break main" "continue" "backtrace" "info locals",需要 ELF 文件和 arm-none-eabi-gdb,支持函数名断点和变量查看。
- 遇到芯片型号问题时可查阅 references/common_devices.md。
适用边界 · 注意事项
- 没有 J-Link 探针或未安装 SEGGER J-Link 工具时,不适用。
- 需要 GDB 源码级调试但没有 arm-none-eabi-gdb 或 ELF 文件时,不能使用 GDB 源码级功能,只能用地址级调试。
- 未提供 device 芯片型号、多探针未指定 serial_no、.bin 未提供烧录地址时,不应猜测或自动继续,应先让用户补充。