【ARM Coresight OpenOCD 系列 2 -- OpenOCD 脚本语法详细介绍】

本文详细介绍了ARM Coresight OpenOCD的脚本语法,包括swj-dp.tcl的使用、调试传输协议的选择、DAP设备创建、目标对象创建与配置、重置命令等内容,讲解了如transport select、newtap、mem2array等关键命令及其实现原理,为ARM芯片的调试提供了详细的指导。
摘要由CSDN通过智能技术生成


请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】

1.1 swj-dp.tcl 介绍

介绍之前我们先了解下什么是 SWJ-DP, SWJ-DP (Serial Wire JTAG Debug Port) 是 ARM CoreSight 架构中的一个重要部分,它提供了一个调试端口,允许调试工具通过 JTAG 或 SWD (Serial Wire Debug) 接口访问目标设备。

SWJ-DP 有以下主要特性:

  • 可以通过 JTAG 或 SWD 接口进行访问,可以在这两种接口之间动态切换。这使得 SWJ-DP 可以在支持传统 JTAG 调试以及更简单、更省电的 SWD 调试之间进行选择。
  • 集成了 DP (Debug Port) 和 AP (Access Port) 的功能。DP 用于管理调试会话和处理调试请求,AP 用于访问目标系统的内存和寄存器。这使得 SWJ-DP 可以提供对目标系统的全面调试控制。
  • 支持多种类型的 AP,包括 MEM-AP(用于内存访问)和 JTAG-AP(用于 JTAG 链访问)等等。这使得 SWJ-DP 可以访问目标系统中的各种不同类型的资源。

在 OpenOCD 中,可以使用 jtag newtap 命令创建一个 SWJ-DP TAP:

jtag newtap <chip_name> <tap_name> -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id <id>

然后,可以使用 dap create 命令创建一个 SWJ-DP DAP:

dap create <dap_name> -chain-position <tap_name>

在这些命令中,<chip_name><tap_name> 是你自己选择的名称,<id> 是 SWJ-DP 的 ID 码,通常可以从目标设备的数据手册中找到。

1.1.1 source [find target/swj-dp.tcl]

source and find commands,命令格式:

source [find FILENAME]

使用的规则:

  • find 命令和参数FILENAME是放在[]中,命令返回的是该文件的完整路径(文件名不要用‘#’,‘#’是TCL的关键字)
  • source 命令使用find到的文件,并以把这个文件作为脚本执行。

1.1.2 调试传输协议选择 transport selec

OpenOCD 的 transport select 命令用于选择一个调试传输协议。在OpenOCD中,"transport"指的是用于连接调试器和目标设备进行调试会话的协议。

transport select 的一般格式如下:

transport select <protocol>

其中,<protocol> 是你希望使用的调试传输协议。OpenOCD 支持多种不同的协议,包括 JTAGSWD (Serial Wire Debug) 和 cJTAG (Compact JTAG)。你应该根据你的调试硬件和目标设备选择合适的协议。

例如,以下命令将选择 SWD 协议:

transport select swd

你应该在指定任何目标配置(如 target create 或 jtag newtap)之前执行 transport select 命令。如果不指定 transport select 命令,OpenOCD 将使用默认的协议,这通常是 JTAG。

在文件 tcl/target/swj-dp.tcl 可以看到 它的使用方法:

if [catch {
   transport select}] {
   
  echo "Error: unable to select a session transport. Can't continue."
  shutdown
}

这句是 tcl 命令,不是 OpenOCD 的命令。

catch是一个错误捕捉器。有 1 到 2 个参数:

  • 第一个参数是“要执行的代码”
  • 第二个(可选)是错误消息的放置位置。

CATCH 成功时返回 0,失败时返回 1

1.1.3 newtap 命令介绍

这段命令的含义是判断transport select是否正确,如果不正确则输出错误信息。
在OpenOCD中,newtap 命令用于在JTAG链中定义新的TAP(Test Access Port)。这个命令的基本格式如下:

jtag newtap {
   part} {
   type} -irlen {
   length} -ircapture {
   value} -irmask {
   mask} [-disable] [-expected-id {
   idcode}]

在文件 tcl/target/swj-dp.tcl 可以看到 它的使用方法:

proc swj_newdap {
   chip tag args} {
   
 if [using_hla] {
   
     eval hla newtap $chip $tag $args
 } elseif [using_jtag]<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值