JTAG(Joint Test Action Group;联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
OpenOCD是一个用于JTAG调试的软件, 可以用于不同调试器和CPU, 还可以与GDB配合,stlink和jlink都是符合JTAG标准的调试器。
想在Ubuntu下对stm32开发板进行调试需要先安装OpenOCD下载地址,在Ubuntu16.04上:
1 | $ cd openocd-0.10.0 |
在Ubuntu18.04上即使apt安装了libusb库也会报这个错,可以直接使用sudo apt install openocd。
OpenOCD使用:
1 | $ cd openocd-0.10.0 |
我的stm32l431板用的是stlink2,配置文件就选择对应的文件,这里要用openocd源码里的,github上也有一个但是运行出错。
启动openocd之后可以使用nc命令连接4444端口:
1 | $ nc -t localhost 4444 |
常用命令:
1 | > halt # 停止cpu |
可以看看ARM MDK v5里下载程序的起始位置,然后用dump_image获取设备固件。EVB_M1开发板的flash起始地址是0x08000000,大小是0x40000。dump flash文件:
1 | > dump_image flash.bin 0x08000000 0x40000 |
$ ./arm-none-eabi-gdb
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
…
0x00000000 in ?? ()
(gdb) dump memory flash.bin 0x08000000 0x08040000
可以对flash进行dump,也可以进行单步调试等。
**reference**
https://www.cnblogs.com/milton/p/8861319.html
http://www.mamicode.com/info-detail-2532993.html
https://blog.csdn.net/zhengyangliu123/article/details/54934719