【ARM Coresight 系列文章 3 - ARM Coresight 组件 DAP(Debug Access Port) 介绍】

文章目录

    • 1.1 Debug Access Port
    • 1.2 Access Port
      • 1.2.1 IDR 寄存器
    • 1.3 Mem-APs 介绍
      • 1.3.1 Debug 寄存器访问模型
      • 1.3.2 APs 中寄存器的介绍

1.1 Debug Access Port

外部 Debugger(DS-5/Trace32) 会通过JTAG接口或者SWD接口和DAP相连:
在这里插入图片描述

JITAG 一般是5个pin:TCK, nTRST(可选), TDI, TDO, TMS
SWD 是两个pin: SWCLKTCK 和 SWDIOTMS(既可以作为JTAG接口TMS接口又可以作为SWD的数据接口)

下图可以看到在DP中有 SWD DP和 JTAG DP,一共两种,中间会有一个选择器(SWD/JTAG select)。
在这里插入图片描述

图 1-1

SW-DP 的连接方式是通过 一个时钟线,一个双向的数据线;
SWJ-DP的连接方式是通过五根线:
在这里插入图片描述

表 1-1

那么DP如何判断当前连接的是哪种协议呢
答:SWD 和 JTAG会复用TMS信号线,外部通过TMS发送一定的序列到SWJ-DP,然后再由DP再去根据序列号进行判断,当前传输是JTAG方式还是SWD方式。

1.2 Access Port

ADIv6 specifications 对AP的定义有几点要求:

  • 必须有 Identification Register, ADIv5同样要求必须有 IDR寄存器,其偏移地址为0xFC, 并且是AP 寄存器地址空间的最后一个寄存器;ADIv5 规定如果IDR寄存器的值为0,那么表示没有AP存在。
  • 任何AP都必须支持DP的访问;
  • 所有的AP reserved 寄存器都必须是 RES0
  • ABORT 机制是可选的

ADI 支持多个APs,最简单的ADI 只有一个AP,这个AP可以是MEM-AP 或者 JTAG-AP。
ADIs 可以有以下几种情况的AP搭配:

  • MEM-AP和JTAG-AP 都有
  • 只有MEM-APs
  • 只有 JTAG-APs

1.2.1 IDR 寄存器

在ADIv5中 IDR 寄存器的定义如下,分为6个域。
在这里插入图片描述
bits[31:17] 主要用来显示版本号和公司信息;
bits[16:13] 定义AP所属的类,有以下几种情况:

  • 0b0000 No defined class
  • 0b0001 COM Access Port(Component AP)
  • 0b1000 Memory Access Port

bits[16:13]、bits[7:4]和bits[3:0] 一块定义了AP的类型信息:
在这里插入图片描述

1.3 Mem-APs 介绍

1.3.1 Debug 寄存器访问模型

coresight 组件中的寄存器通常会当做外设映射到系统空间,一般会占用4KB的地址空间,当然可以是4KB倍数的地址空间。
对于ARMv8和ARMv9 这种空间粒度的大小可以达到64KB。

ROM Table 可以被看做一组特殊的 debug 寄存器,通常也会占用4KB的地址空间,如果系统中只有一个debug组件连接到AP,这个时候 ROM Table 是可选的,也即硬件可以不实现ROM Table,如果系统中debug 组件的个数超过1个,那么ROM Table 必须实现。

APs 出来的接口可以是 Debug APB,AXI,AHB( 或者JTAG)。
在这里插入图片描述

Coresight 图 1-2

  • APB Access Port(APB-AP): 一般用于Cortex-A或者Cortex-R Coresight 组件的访问,通常A/R系列会有一个Debug APB的接口;
  • AHB Access Port(AHB-AP): Cortex-M系列的 Debug 接口通常是AHB 接口;
  • AXI Access Port(AXI-AP): 挂载在系统 memory bus上,可以直接访问到系统memory,比如DDR,SRAM等;
  • JTAG Access Port(JTAG-AP): 对 JTAG 设备的访问。这个是兼容以前较早的ARM处理器,如ARM9; 这些较早的处理器内部是用 JTAG 来调试的。但是现在的ARM处理器,已经不用这种方式,统一用 memory-mapped 方式进行调试。

1.3.2 APs 中寄存器的介绍

一个 DAP 可以包括多个AP,AP 受 DP 的控制, 只有对 AP 的访问,才可以转化成 memory-mapped 总线,对 SoC 的内部资源进行访问。

根据 TMS 信号线 DP 区分完外部传入的是JTAG还是SWD之后,会去访问 DP 中的 DPACC或者APACC这两个寄存器中的一个 (不管是JTAG还是SWD都是可以访问这个寄存器)。如果访问的是DPACC,那么访问的将是访问DP的一些寄存器;如果访问的是APACC那么,后面将会接着访问AP的一些寄存器。

AP 里面主要有如下几个寄存器:

  • CSW(Control/Status Word):用于配置和控制memory interface的transfer;
  • TAR(Transfer Address):用于装载当前transfer的地址;
  • DRW(Data Read/Write):装载要transfer的数据,如果是读取操作,直接读取这个寄存器即可。
  • ROM(Debug ROM Address):装载rom table地址的寄存器;
  • IDR(Identification Register):显示当前版本号及memory interface 的类型,如APB-AP,AXI-AP等。

AP出来后 memory interface(memory interface都是有地址的)可以是AXI、AHB 或者APB,memory interface 会将地址配在TAR寄存器中,将数据配置在DRW寄存器中。AP会根据对上面三个寄存器的操作来产生 bus interface 的 transfer。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14847.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt对话框

完善文本编辑器 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowTitle("聊天室界面");//设置标题this->setWindowIcon(QIcon(&…

Spring Boot 中的 @HystrixCommand 注解

Spring Boot 中的 HystrixCommand 注解 简介 在分布式系统中,服务之间的调用是不可避免的。但随着服务数量的增加,服务之间的依赖关系也会变得越来越复杂,服务的故障也会变得越来越常见。一旦某个服务出现故障,它所依赖的服务也…

keepalived 实现 IP 地址漂移

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

RabbitMQ学习笔记9 TTL死信队列+延迟队列实战

我们去新建一个交换机: 然后我们再用这种方法直接创建一个队列: 点击bind这样我们的交换机和队列就绑定到一起了。 然后我们要新建普通队列,设置过期时间,指定死信交换机。 发布一条消息。 它会把队列传递到死信队列中去。

nvm 下载nodejs 失败

解决办法: 1.查看nvm安装路径 nvm root2、在安装路径下找到setting.txt,添加两句话 node_mirror: http://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/3.再执行nvm install 就可以了。

【网络】TCP三次握手和四次挥手(感性理解)

目录 三次握手 文字描述三次握手过程 为什么是三次握手? 什么是SYN洪水? 连接和半连接队列 一次、两次握手行不行,四/五/六次握手行不行? 三次握手一定会成功吗? 三次握手的过程中可不可以携带数据 TCP中的IS…

flutter开发实战-自定义Switch开关控件Widget

flutter开发实战-自定义Switch开关控件 在flutter中实现自定义Switch,主要实现类似IOS的UISwitch样式的开关控件 一、效果图 二、实现Switch开关的Widget 实现自定义Switch的Widget,主要实现交织动画。 交织动画 有些时候我们可能会需要一些复杂的动画…

OpenCV在一个图像上画一个空心绿色的圆和一个实心红色的圆

/*** void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );* Opencv画点 其实画的是小圆圈* img:图像。* center:圆心坐标。* radius:圆形的半径。* color:线条的颜色。* thickness:如果是正数,表…

了解k8s容器组pods

一:Pods概述 在 部署第一个应用程序 中创建 Deployment 后,k8s创建了一个 Pod(容器组) 来放置应用程序实例(container 容器) Pod 容器组 是一个k8s中一个抽象的概念,用于存放一组 container&a…

文字和祝福语:创意的粒子效果网页(❤️好看好用❤️)HTML+CSS+JS

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

Stable Diffusion 多角度人设立绘快速生成多种方法

对于插画师构建人物立绘图设计一套多方位的人设可能要很久,但是使用SD进行操作的话就非常简单了,这个利用ControlNet骨骼图进行配置操作。 供一些样图参考,也可以使用ADetailer进行人物相关部位的修复。 文章目录 准备工作关键词绘制使用骨骼…

Git--远程操作

文章目录 前言一、理解分布式版本控制系统二、远程仓库1.新建远程仓库2.克隆远程仓库3.向远程仓库推送4.拉取远程仓库5.配置Git忽略特殊文件 给命令配置别名 总结 前言 正文开始!!! 一、理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地…