【ARM Coresight OpenOCD 系列 3 -- OpenOCD 常用命令与扫描链scan_chain】

news/2024/7/23 17:49:26 标签: arm开发, 扫描链, DAP 命令, Openocd dap 命令

文章目录

    • 1.1 TAP Declaration
    • 1.2 Autoprobing
    • 1.3 DAP declaration (ARMv6-M, ARMv7 and ARMv8 targets)

1.1 TAP Declaration

测试访问端口(TAP)是JTAG的核心。TAP扮演许多角色,包括:

  • 调试目标:CPU TAP可以用作GDB调试目标。
  • 闪存编程:有些芯片直接通过JTAG对闪存进行编程。其他人是间接的,让CPU来做。
  • 程序下载:使用GDB使用的相同CPU支持,您可以初始化DRAM控制器,将代码下载到DRAM,然后开始运行该代码。
  • 边界扫描:大多数芯片支持边界扫描,这有助于测试板组装问题,如焊桥和连接缺失。

1.1.1 扫描链

OpenOCD 的扫描链(Scan Chain)是一种串联在一起的目标设备链,每个设备都通过JTAG接口连接。通过这种配置,可以在单个JTAG 端口上访问多个设备,进行调试或编程操作。

扫描链中的设备被分配一个唯一的TAP(Test Access Port)ID,它用于在链上识别和访问设备。这些ID可以使用jtag newtap命令在OpenOCD中配置。

在OpenOCD中,可以使用scan_chain命令来查看和验证JTAG扫描链的设备和配置。例如:

scan_chain

执行这个命令后,OpenOCD 会显示扫描链中所有设备的 TAP ID和类型,如下所示:

TAP mycpu.cpu has invalid IDCODE (0x0) 
TAP auto0.tap has invalid IDCODE (0x0) 
TAP auto1.tap has invalid IDCODE (0x0)

在这个示例中,scan_chain 命令显示扫描链中有三个设备(mycpu.cpu, auto0.tap, auto1.tap),但所有设备的 IDCODE 都无效(值为0x0)。这可能表明扫描链的配置或连接有问题,可能需要检查硬件连接和OpenOCD的配置。

特别是,如果你在 jtag newtap 命令中指定了-expected-id参数,那么你需要确保该参数的值与设备的实际IDCODE匹配。
总的来说,扫描链是JTAG调试的基础特性,OpenOCD提供了一系列命令和功能,用于配置和操作扫描链

1.2 Autoprobing

在接口协议选择和复位相关的配置完成后,TAP的配置就需要进行了,有时很难知道当前使用的是什么TAP, 或者怎么去识别它们。这个时候就可以使用功能OpenOCD提供的自动探测功能了。这个时候这需要选择和接口协议和配置一个较慢时钟既可。如下:

source [find interface/olimex-arm-usb-tiny-h.cfg]
reset_config trst_and_srst
jtag_rclk 8

在没有对TAP进行配置的情况下,OpenOCD 将会尝试去配置它,这里主要有两部分:

  • TAP Discovery,在JTAG复位后或者这个系统复位后,每个TAP的数据寄存器中将会存储要么 IDCODE 寄存器或者BYPASS寄存器中的值,如果JTAG通信是通的,OpenOCD 就有可能获取到 IDCODE的值。
  • IR Length discovery,不幸的的是,OpenOCD没能够提供一种可靠的方式来获取 -irlen的参数值,如果OpenOCD没有获取到,这个时候就需要查看芯片厂商的技术文档来找了。

1.3 DAP declaration (ARMv6-M, ARMv7 and ARMv8 targets)

  • 命令dap names: 返回所有已注册DAP对象的列表。它主要用于TCL脚本。

  • 命令dap-info[num|root]:显示MEM-AP编号的ROM表,默认为当前选定目标的当前选定AP。

    • 在ADIv5上,DAP num是AP的数字索引。
    • 在ADIv6上,DAP num是AP的基地址。仅在ADIv6中,root 指定根 ROM表。
  • 命令dap-init:初始化所有注册的DAP。此命令在初始化期间在内部使用。它也可以在初始化后的任何时候发布。
    以下命令作为DAP实例的子命令存在:

  • 命令$dap_name info[ num ∣ root ] 显示 MEM−AP 编号的 ROM 表,默认为当前选择的 AP 。

    • 在 ADIv5 上, DAPnum 是 AP 的数字索引。
    • 在 ADIv6 上, DAPnum 是 AP 的基地址。仅在 ADIv6 中, root 指定根 ROM 表。
  • 命令$dap_name apid[num]: 显示 AP 编号中的 ID寄存器,默认为当前选定的AP。

    • 在ADIv5上,DAP num是AP的数字索引。
    • 在ADIv6上,DAP num是AP的基地址。
  • 命令$dap_name apreg: 是用于读取 AP 寄存器的值。name 是 DAP 的名字,apreg 是你想要读取的 AP 寄存器的名字。例如,下面的命令将读取名为 dap1 的 DAP 的 csw 寄存器的值:dap dap1 apreg csw

  • 命令$dap_name apsel[num]
    选择AP编号,默认为0。在ADIv5上,DAP num是AP的数字索引。在ADIv6上,DAP num是AP的基地址。

  • 命令$dap_name dpreg reg[value] 显示地址 reg 处 DP 寄存器的内容,或将其设置为新值。

    • 在 SWD 的情况下,reg 是压缩格式dpbankse l <<4| addr 的值,并假定值0、4、8。。。0xfc。
    • 在 JTAG 的情况下,它只假设值 0、4、8 和 0xc。
      例如,下面的命令将向名为 dap1 的 DAP 的 select 寄存器写入值 0x0:dap dap1 dpreg select 0x0
  • 命令$dap_name baseaddr[num]: 显示 MEM-AP编号中的调试基址,默认为当前选定的AP。

    • 在ADIv5上,DAP num是AP的数字索引。
    • 在ADIv6上,DAP num是AP的基地址。
  • 命令$dap_name memaccess[value] :显示JTAG空闲中用于MEM-AP内存总线访问的额外tck周期数[0-255],从而为响应读取提供额外时间。如果定义了值,则首先指定该值。

  • 命令$dap_name apcsw[value[mask]] 显示或更改 MEM-AP 传输的 CSW 位模式。 在每次存储器访问开始时,根据传输要求,通过Size 和 AddrIn位字段来扩展(按位或ed)CSW模式,并将结果写入实际CSW寄存器。可以通过更改CSW模式来更改除动态更新字段Size和AddrIn之外的所有位。有关详细信息,请参阅ARM ADI v5手册第7.6.4章和附录A。

推荐阅读
https://openocd.org/doc-release/html/TAP-Declaration.html#DAP-subcommand-apreg


http://www.niftyadmin.cn/n/5166772.html

相关文章

PyTorch语音识别的理论基础——MFCC

在语音识别研究领域&#xff0c;音频特征的选择至关重要。本书大部分内容中都在使用一种非常成功的音频特征—梅尔频率倒谱系数&#xff08;Mel-Frequency Cepstrum Coefficient&#xff0c;MFCC&#xff09;。 MFCC特征的成功很大程度上得益于心理声学的研究成果&#xff0c;…

IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录

本心、输入输出、结果 文章目录 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录前言查询 reflog 日志通过 Git Reset HEAD (hard) 找回已经 Drop Commit 的提交记录Git Reset HEAD (hard) 模式和 mixed 模式有啥区别git reset --h…

JavaScript从入门到精通系列第三十二篇:详解正则表达式语法(一)

文章目录 一&#xff1a;正则表达式 1&#xff1a;量词设置次数 2&#xff1a;检查字符串以什么开头 3&#xff1a;检查字符串以什么结尾 4&#xff1a; 同时使用开头结尾 5&#xff1a;同值开头同值结尾 二&#xff1a;练习 1&#xff1a;检查是否是一个手机号 大神链…

jsp基本表格和简单算法表格

基本表格&#xff1b; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd…

R | R包安装报错-github连接速度慢或无法访问 | metaboanalystR | Retip | rJava安装

R | R包安装报错-github连接速度慢或无法访问 | metaboanalystR | Retip | rJava安装 一、metaboanalystR 安装1.1 Bioconductor报错&#xff0c;无网络连接1.2 github520-修改hosts文件 二、retip安装2.1 rJava包加载报错及安装2.2 安装Retip包 三、从Bioconductor安装Rdisop报…

U-Mail邮件系统安全登录解决方案

企业邮箱是企业对内对外商务往来的主要通信工具&#xff0c;并且企业邮箱里面还包含了大量企业内部隐私信息、商业机密等&#xff0c;很容易成为黑客的攻击目标。其中邮件盗号是企业邮箱遭受攻击的主要形式&#xff0c;一旦企业邮箱密码被黑客盗取&#xff0c;黑客不仅可以利用…

【C++】复杂的多继承及其缺陷(菱形继承)

本篇要分享的内容是C中多继承的缺陷&#xff1a;菱形继承。 以下为本篇目录 目录 1.多继承的缺陷与解决方法 2.虚继承的底层原理 3.虚继承底层原理的设计原因 1.多继承的缺陷与解决方法 首先观察下面的图片判断它是否为多继承 这实际上是一个单继承&#xff0c;单继承的特…

第二证券:长期停牌一般是多久?

股票停牌不仅仅是个股的问题&#xff0c;它或许会影响到商场的整体运作和投资者的利益。那么&#xff0c;长期停牌一般是多久呢&#xff1f;从不同的视点分析&#xff0c;可以得到不同的答案。 1. 官方规则 首要&#xff0c;咱们需求查看相关规则。依据证监会规则&#xff0c…