一般情况下要实现一个完整的调试配置,只需要2个配置文件,比如:
openocd –f interface/yourInterface.cfg –f yourBoard.cfg
yourInterface可以在scripts\interface下找到使用的调试器,一般可以直接使用,而board的配置文件不一定符合要求,可能需要参考scripts\board修改。
一般情况下board.cfg会引用scripts\target下的MCU配置文件,例如scripts\boardstm32f0discovery.cfg中对应的MCU配置文件是stm32f0x.cfg
source [find target/stm32f0x.cfg]
cfg文件间可以设置变量通信。通过关键字set设置参数,另外,OpenOCD约定以下划线‘_’开始的变量为临时变量。
以stm32f0x.cfg为例
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32f0x
}
这里是判断是否有定义CHIPNAME,如果有定义则设置临时变量_CHIPNAME,否则就设置为默认的stm32f0x。而在stm32f0x.cfg前可以设置CHIPNAME,比如set CHIPNAME stm32f0x。
常用变量约定:
1. CHIPNAME
命名CHIP的名字,比如stm32f0x。
2. ENDIAN
芯片的大小端模式,默认是小端,如果芯片不支持可以不设定。
3. CPUTAPID
当使用JTAG时,OpenOCD可以检测JTAG IDCODE寄存器。
4. _TARGETNAME
按照惯例,此变量由目标配置脚本(例如stm32f0x.cgf)创建。board配置文件可以使用这个变量来配置诸如“reset init”脚本之类的东西,或者特定于该板和该目标的其他东西。如果芯片有两个目标,则名称为_TARGETNAME0, _TARGETNAME1等等。
cfg文件中符号’#’表示注释,’$’表示引用
注意,运行配置时并不是按照配置的顺序执行的,例如执行
interface cmsis-dap
adapter_name
第二个是显示调试器的名字,但是执行的结果是:
cmsis-dap
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: FW Version = 1.0
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Error: CMSIS-DAP command CMD_DAP_SWJ_CLOCK failed.
adapter_name返回的名字在前面。
还有,多个命令叠加时有可能打印的信息会被跳过,原因不知。例如
interface cmsis-dap
adapter_name
transport list
打印的信息就没有adapter_name的输出结果了
The following transports are available:
jtag
aice_jtag
swd
stlink_swim
hla_jtag
hla_swd
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: FW Version = 1.0
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Error: CMSIS-DAP command CMD_DAP_SWJ_CLOCK failed.
什么是TAP?
TAP是Test Access Port的缩写,是JTAG的核心。TAPs提供多种功能,包括:
1. 调试(TAP cpu)
一个CPU TAP可以用于GDB调试
2. Flash编程(TAP flash)
一些芯片可以直接通过JTAG对flash进行编程。有些则不是,让CPU来做。
3. 程序下载
下载程序到RAM,然后运行这个程序(需要CPU支持)
4. 边界扫描(TAP bs)
大多数的CPU都支持边界扫描(边界扫描主要用于芯片内部测试)。
设置TAPs是配置文件的主要目的。