JTAG调试STM32开发板

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
2
3
4
5
6
7
8
9
$ cd openocd-0.10.0
$ ./configure --enable-stlink
...
configure: error: libusb-1.x is required for the ST-Link JTAG Programmer
# 解决方法
$ sudo apt install libusb-1.0-0-dev
$ ./configure --enable-stlink
$ make
$ sudo make install

在Ubuntu18.04上即使apt安装了libusb库也会报这个错,可以直接使用sudo apt install openocd。
OpenOCD使用:

1
2
3
4
5
$ cd openocd-0.10.0
$ openocd -f tcl/interface/stlink-v2.cfg -f tcl/target/stm32l4x.cfg
Open On-Chip Debugger 0.10.0
...
Info : stm32l4x.cpu: hardware has 6 breakpoints, 4 watchpoints

我的stm32l431板用的是stlink2,配置文件就选择对应的文件,这里要用openocd源码里的,github上也有一个但是运行出错。

启动openocd之后可以使用nc命令连接4444端口:

1
2
3
$ nc -t localhost 4444
Open On-Chip Debugger
>

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> halt  # 停止cpu
> reg # 查看寄存器
> mdw 0x08000000 # memory display word 查看内存
> mww 0 0x12345678 # memory write word 没成功
> load_image leds.bin 0 # 下载程序到0地址
> resume 0 # 指定地址运行
> reset # 复位目标板子
> reset halt

> step 0 # 执行第一句并halt
> step # 单步执行
> bp # 设置断点
> bp 0x6c 4 hw # 设置硬件断点
> rbp 0x6c # 取消断点

可以看看ARM MDK v5里下载程序的起始位置,然后用dump_image获取设备固件。EVB_M1开发板的flash起始地址是0x08000000,大小是0x40000。dump flash文件:

1
2
3
> dump_image flash.bin 0x08000000 0x40000
```
或者用gdb连接,我一开始没有连接成功,后来改用[gcc-arm-none-eabi](https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2?revision=c34d758a-be0c-476e-a2de-af8c6e16a8a2?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,8-2019-q3-update)交叉编译工具链里的gdb连接,可以成功连接:

$ ./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