Openocd jlink stlink debug
Reusable Agent Skills for embedded systems, MCU debugging, firmware workflows, and AI automation. (嵌入式、MCU 调试、固件流程与 AI 自动化的可复用 Agent Skills 集合)。
npx -y skills add easyzoom/aix-skills --skill openocd-jlink-stlink-debugAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when debugging OpenOCD, J-Link, ST-Link, CMSIS-DAP, probe connection, reset scripts, flash algorithms, GDB attach, semihosting, RTT, or SWD/JTAG failures
SKILL.md
6.6 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
OpenOCD J-Link ST-Link Debug
Overview
Use this skill to debug probe sessions by separating physical wiring, probe firmware, target voltage, reset strategy, transport, target script, flash algorithm, and GDB behavior. Probe failures are often reset or adapter issues.
When To Use
Use this skill when:
- The user cannot connect, halt, reset, flash, erase, verify, or attach with OpenOCD, J-Link, ST-Link, CMSIS-DAP, pyOCD, or GDB.
- The issue involves SWD/JTAG wiring, adapter speed, reset config, target scripts, flash loaders, protected devices, semihosting, RTT, or multicore.
- The same firmware behaves differently under debugger and standalone boot.
Do not use this skill for application fault analysis after a stable debug
session exists. Use the architecture-specific debug skill then. For flash
download failures focused on erase/program/verify, use mcu-flashing-debug.
First Questions
Ask for:
- Probe model, firmware version, debugger tool, target MCU/SoC, board, and OS.
- Wiring:
VTref, GND,SWDIO/TMS,SWCLK/TCK,nRST/SRST,SWO, and power ownership. - Exact command, the
-f interface/*.cfgand-f target/*.cfgscripts,adapter speed,transport select, and full log. - Reset mode, boot pins, readout protection (STM32
RDP), low-power state, and external flash. - Whether connect-under-reset, halt-after-reset, or attach-to-running is needed.
Launch Reference
- ST-Link:
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg(stlink.cfgis thehladriver; usetarget/stm32f1x.cfg,stm32h7x.cfg,nrf52.cfgetc. for other parts). - J-Link:
openocd -f interface/jlink.cfg -c "transport select swd" -f target/stm32f4x.cfg. - CMSIS-DAP/DAPLink:
openocd -f interface/cmsis-dap.cfg -c "transport select swd" -f target/stm32f1x.cfg. - Force JTAG instead of SWD:
-c "transport select jtag"(notestlink.cfghlaonly supportshla_swd/hla_jtag). - Set speed before target script:
-c "adapter speed 1000"(kHz; deprecated aliasadapter_khz). Pick a probe by serial with-c "adapter serial <SN>"(older:hla_serial). - Default TCP ports: GDB
3333, Telnet monitor4444, Tcl6666.
Debug Workflow
-
Prove physical connection. Check
VTref, ground, cable length, pinout,SRSTline, and whether the probe powers or only senses the target. In the log confirm a validSWD DPIDR 0x2ba01477(Cortex-M3/M4) or JTAGIDCODE, not a zero/failed read (SWD DPIDR 0x00000000/Error connecting DP: cannot read IDR). -
Lower the adapter speed. Start with
adapter speed 480or lower, then raise only after IDCODE, halt, reset, andmdwreads are stable. -
Pick the right reset strategy. In the target/board cfg set
reset_config, e.g.srst_only srst_nogatefor connect-under-reset, ornone separate. Then usereset halt/reset init/reset run. Add-c "reset_config connect_assert_srst"for locked or fast-sleeping parts. -
Validate target scripts. Confirm
transport select, chip family cfg, TAP/DAP IDs (-expected-idonjtag newtap/swj_newdap,-dp-idfor SWD multidrop),flash bank, and_TARGETNAME/work-area RAM. List cores withtargets. -
Separate attach from flash. Enter the monitor with
telnet localhost 4444, theninitandreset halt. Read state withtargets,reg,mdw 0x08000000 4,mdh,mdb; write withmww 0x40021000 0x01. Only then flash:program firmware.elf verify resetorflash write_image erase firmware.bin 0x08000000/flash erase_sector 0 0 last/flash info 0.resumeto run,dump_image out.bin 0x08000000 0x10000to read back. -
Add extras last. Enable
arm semihosting enable, SWO/tpiu, or RTT only after the base debug path is reliable (see RTT And Semihosting).
GDB Attach
arm-none-eabi-gdb firmware.elf
(gdb) target extended-remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) monitor reg
(gdb) continue
Use target remote for a single-session attach, target extended-remote to
allow reconnect. monitor <cmd> forwards any OpenOCD command (e.g.
monitor reset init, monitor flash write_image erase firmware.bin).
RTT And Semihosting
- Semihosting: after halt run
arm semihosting enable(optionallyarm semihosting_fileio enable);printf/putsoutput appears on the OpenOCD console once the firmware linkslibnosys/semihosting stubs. - RTT:
rtt setup 0x20000000 2048 "SEGGER RTT"thenrtt start; expose a channel withrtt server start 9090 0and read it viatelnet localhost 9090. Usertt channelsto confirm the control block was found. The ID string defaults to"SEGGER RTT".
Common Failures
VTrefis missing, soError: target voltage may be too lowor the probe cannot sense target voltage.- Adapter speed too high for early boot/low-power/long wires, giving a failed
DPIDR read (
Error connecting DP: cannot read IDR),Error: init mode failed (unable to connect to the target), orSWD ack not OK. SRSTnot wired but the script usesreset_config srst_only; switch tonone/connect_assert_srst.- Device is readout-protected or locked (
Error: … cannot be programmed); for STM32 clearRDPwithstm32f4x unlock 0/stm32f1x unlock 0(mass-erases). - Wrong target cfg selects the wrong
flash bankor work-area RAM, soflash write_image/programfails or verify mismatches. - External QSPI/SPI flash needs a board-specific
flash bankdriver (stmqspi,cfi), not the internal loader. hla(stlink.cfg) cannot do rawswd/jtaglow-level commands or SWD multidrop; useinterface/stlink-dap.cfgor a J-Link/CMSIS-DAP v2 probe.
Verification
Before claiming the debug path works:
- State probe, tool, exact command,
transport,adapter speed, and reset mode. - Confirm
SWD DPIDR/IDCODE,reset halt,targetsshowshalted, aregread, and anmdwmemory read. - Confirm
program … verify resetorflash write_imageplus verify when flashing is required. - Confirm standalone boot still works after
reset runand power-cycle, i.e. after debugger-specific settings.
Example
User:
OpenOCD 连 STM32 一直 timeout。
Agent:
- Checks
VTref, ground, SWD pins,SRST, and lowersadapter speed 480. - Retries with
reset_config connect_assert_srstand the correcttarget/stm32f4x.cfg, watching forSWD DPIDR. - Separates connection evidence (
init,targets,mdw) fromprogram/flash write_imageerrors.