环境:
- Windows10 + Windows Terminal + Powershell
- Open On-Chip Debugger 0.11.0 (2021-06-25)
- STlink v2
- F103C8T6最小系统
问题描述
芯片的idcode与预设不匹配。
PS C:\Users\hyq> openocd -f E:\OpenOCD\share\openocd\scripts\interface\stlink-v2.cfg -f E:\OpenOCD\share\openocd\scripts\target\stm32f1x.cfg
Open On-Chip Debugger 0.11.0 (2021-06-25) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : DEPRECATED target event trace-config
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.210533
Warn : UNEXPECTED idcode: 0x2ba01477
Error: expected 1 of 1: 0x1ba01477
原因分析:
当OpenOCD初始化JTAG的过程中,会试图获取JTAG chain上的芯片的idcode (或CPUTAPID, 或Tap ID),与OpenOCD target config文件中的idcode对比,用来识别该芯片。
两种情况会导致这个过程出现错误:
- OpenOCD错误地读取了idcode。通常表现为idcode=0x00000000或0x000000ff。
- 实际芯片idcode与所选择的OpenOCD target idcode不匹配。可能是.cfg文件信息过时/有误,或者芯片有问题。
解决方案:
根据提示,可以修改.cfg文件设置解决问题。
找到OpenOCD target config文件,这里位于
E:\OpenOCD\share\openocd\scripts\target\stm32f1x.cfg
找到内容
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
if { [using_jtag] } {
# See STM Document RM0008 Section 26.6.3
set _CPUTAPID 0x3ba00477
} {
# this is the SW-DP tap id not the jtag tap id
set _CPUTAPID 0x1ba01477
}
}
其中的 set _CPUTAPID 0x1ba01477
改为 set _CPUTAPID 0x2ba01477
保存。命令行再次输入
openocd -f E:\OpenOCD\share\openocd\scripts\interface\stlink-v2.cfg -f E:\OpenOCD\share\openocd\scripts\target\stm32f1x.cfg
结果
Open On-Chip Debugger 0.11.0 (2021-06-25) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : DEPRECATED target event trace-config
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.194733
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections