arm dap

一、ADI(arm debug interface)

1.1、版本变更

特性ADIv1~v3ADIv4ADIv5.0ADIv5.1ADIv5.2ADIv6
发布年份~1994-2000~20032006201220172017+
典型内核ARM7TDMI/ARM9/ARM10ARM11Cortex-M3Cortex-M4Cortex-M7/A15Cortex-M33/M55
对应架构ARMv4T/v5ARMv6ARMv7-MARMv7-M/EARMv7全系ARMv8-M/A/R
DP版本无(直连JTAG)DPv0DPv0/1DPv0/1/2DPv3
AP版本APv1APv1APv1APv2
物理接口仅JTAG(4~5线)仅JTAGJTAG + SWD(2线)JTAG + SWDJTAG + SWDJTAG + SWD
SWD多Drop✓(TARGETSEL)
Dormant状态
DAP两层架构✓(DP+AP)✓(重构分离)
地址空间32位32位32位32位32位64位(SELECT+SELECT1)
AP数量上限11256(8位APSEL)256256理论无限(64位地址)
AP发现方式固定固定遍历0~255读IDR同v5.0同v5.0ROM表树状导航
64位数据传输✓(ADDR64模式)
芯片内软件访问AP
TrustZone安全调试✓(SPU认证)
安全/非安全属性✓(HNONSEC/PROT)
电源域1(调试)12(DBG+Sys)2(DBG+Sys)2(DBG+Sys)多个(独立控制)
ROM表发现✓(AP BASE指向)同v5.0同v5.0✓(BASEPTR指向分层)
向后兼容性---兼容v5.0兼容v5.0/5.1DPv3不兼容v5
当前状态已废弃已废弃已替代已替代现行有效(IHI 0031E)现行有效(IHI 0074C)

1.2、各版本驱动点与变动点

版本

核心驱动

变动点

v1~v3

ARM7/9时代,只有一颗CPU核,JTAG够用

无DAP概念,JTAG直连CPU,每款CPU一套调试逻辑,不可复用

v4

ARM11开始有MPU/Cache,需要统一调试入口

首次将调试接口与ARM架构版本关联,但仍绑JTAG

v5.0

Cortex-M3引脚极其紧缺,4~5线JTAG不可接受

引入SWD(2线);DP/AP分层,调试接口不再绑死CPU型号

v5.1

一根SWD线上挂多颗芯片(如SoC+蓝牙协处理器)

Multi-drop,通过TARGETSEL选择目标;DPIDR增加版本字段

v5.2

芯片功耗要求越来越严,调试器需要在线切换协议

Dormant状态;标准化JTAG<->SWD切换序列;DPv2

v6

ARMv8引入TrustZone;64位地址空间出现

64位寻址(SELECT1/TAR2);APv2扩展寄存器空间;安全调试认证;ROM表发现取代暴力遍历

1.3、三次质变总结

1. v4 -> v5:从"绑CPU"到"通用总线"
v4: JTAG -> 特定CPU核(每颗CPU一套调试逻辑)
v5: SWD/JTAG -> DP -> AP -> 系统总线 -> 任何组件
驱动:Cortex-M3引脚少(SWD只要2根线),且SoC上调试组件越来越多,不能每加一个组件就改一版调试协议

2. v5.0 -> v5.2:从"单目标"到"多目标+低功耗"
v5.0: 一根SWD线只能调一个目标
v5.1: 一根SWD线调多个目标(Multi-drop)
v5.2: 协议可在线切换,芯片可进入极低功耗Dormant
驱动:物联网/可穿戴设备要求极低功耗,且SoC上常有多颗核需要调试

3. v5 -> v6:从"开放总线"到"安全可控"
v5: AP空间扁平(0~255),32位地址,无安全概念 -> 任何人连上SWD就能读全片内存
v6: AP通过ROM表分层发现,64位地址,TrustZone认证 -> 安全世界有独立AP,需认证才能调试
驱动:ARMv8-M TrustZone安全/非安全世界隔离;64位地址空间;AP暴增需要高效发现;芯片内软件需访问调试资源

 ref:

https://developer.arm.com/documentation/ihi0031/latest/

https://developer.arm.com/documentation/ihi0074/f/?lang=en

二、DAP (Debug Access Port)

2.1、总体架构

DAP 是ARM CoreSight调试架构的核心组件,位于调试器和目标芯片之间,充当协议转换和总线桥接的角色。

DAP = DP (Debug Port) + AP (Access Port),它们各司其职

类比理解:

- DP = 前台接待:负责和外部客户(调试器)沟通,验证身份,记录需求

- AP = 业务专员:根据前台转交的需求,去实际访问不同部门(内存、外设、调试组件)

在一个DAP中,只有一个DP,但可以有多个AP连接到单个DP。

2.2、DP

DP负责将用于与调试逻辑通信的物理协议转换为ARM特定的内部调试逻辑。DP有几种类型:

  • JTAG-DP:使用JTAG与调试逻辑交换信息。
  • SW-DP:使用2线串行线调试(SWD)与调试逻辑交换信息。
  • SWJ-DP:可以在运行时使用ARM指定的特定切换序列在JTAG和SWD之间切换协议。

2.3、AP

AP主要是一个内存总线接口,用于访问实际的调试逻辑/资源。与DP执行协议转换不同,AP通常执行实际的内存访问以读写调试寄存器。AP有几种类型:

AP类型

TYPE字段

全称

功能

典型用途

MEM-AP (AHB)

0x1

AHB Access Port

通过AHB总线访问内存映射地址

读写SRAM、外设寄存器、调试组件(最常用)

MEM-AP (APB)

0x1

APB Access Port

通过APB总线访问

访问APB上的调试组件(如CTI、ROM表)

MEM-AP (AXI)

0x1

AXI Access Port

通过AXI总线访问

Cortex-A/R类高性能总线访问

JTAG-AP

0x0

JTAG Access Port

桥接传统JTAG TAP

它不通过总线访问内存,而是内部包含一个JTAG TAP控制器,将DAP的AP事务转换为JTAG扫描链操作,用于连接SoC上其他JTAG调试目标(如Cortex-A核)

CUSTOM-AP(ADIv6新增

自定义

厂商自定义

ADIv6新增了厂商自定义AP的框架,通过DEVTYPE和DEVARCH寄存器识别具体类型。

安全调试认证、厂商私有调试通道等

note:AHB-AP、APB-AP、AXI-AP本质都是MEM-AP(TYPE=0x1),共享相同的寄存器布局(CSW/TAR/DRW/BASE/IDR),只是CSW中某些总线属性字段含义不同。IDR的VARIANT字段区分具体总线类型:

IDR字段

对应AP

[11:8] VARIANT

0

AHB-AP

[11:8] VARIANT

1

APB-AP

[11:8] VARIANT

2

AXI-AP

常见芯片的AP配置

芯片

AP#0

AP#1

AP#2

备注

STM32F103

AHB-AP

-

-

只有1个AP

STM32F407

AHB-AP

APB-AP

-

2个AP

STM32H743

AHB-AP

APB-AP

-

2个AP,AHB-AP支持多总线域

STM32L5 (Cortex-M33)

MEM-AP

MEM-AP

-

2个AP,区分Secure/Non-secure

i.MX RT1180

MEM-AP(AHB)

MEM-AP(APB)

JTAG-AP

3个AP

nRF52832

AHB-AP

-

-

1个AP

三、ARM总线初探

3.1、总线类型

缩写

全称

中文

特点

AHB

Advanced High-performance Bus

高级高性能总线

高速,多主多从,流水线传输

APB

Advanced Peripheral Bus

高级外设总线

低速,简单,单主,用于外设

AXI

Advanced eXtensible Interface

高级扩展接口

最高性能,乱序传输,用于Cortex-A

Cortex-M的外设挂在AHB上,不是APB上

注意区分两种APB:

总线类型

上面挂的设备

谁来访问

地址区域

AHB

SRAM、Flash、所有外设寄存器、大部分CoreSight组件

CPU、AHB-AP、DMA

0x00000000~0xE00FFFFF系统地址映射

系统APB

少数低速外设(看门狗、RTC)

CPU(通过AHB→APB桥)

0x40000000区域(CPU看得到)

调试APB

CTI、部分ROM表、某些CoreSight组件

APB-AP

独立地址空间(CPU看不到)

关键理解:
- "系统APB":CPU通过AHB→APB桥访问的低速外设,地址仍在0x40000000区域。CPU能看到,AHB-AP也能访问(因为走同一个桥)。
- "调试APB":专门给调试器用的独立总线,只挂CoreSight组件,必须通过APB-AP访问,CPU看不到这条总线。

3.2、实际使用场景对比

操作

AHB-AP

APB-AP

说明

读写SRAM变量

SRAM在AHB总线上

读写GPIO/UART寄存器

外设挂在AHB总线上

读写Flash

Flash控制器在AHB总线上

下载代码到芯片

通过AHB写Flash控制器

访问DWT/FPB/ITM

大部分芯片这些组件在AHB上,AHB-AP也能到

访问独立调试APB上的CTI

只有在独立调试APB上的组件才需要APB-AP

3.3、 为什么大部分芯片只有AHB-AP

大多数Cortex-M芯片(如STM32F1/F4)只暴露了1个AP:

  J-Link ──→ DP ──→ AHB-AP ──→ AHB总线 ──→ 所有东西(SRAM+外设+调试组件)

因为ARM把CoreSight组件(DWT、FPB、ITM等)也挂在了AHB总线上(地址在0xE0000000~0xE00FFFFF区域),
AHB-AP一个人就能访问全部,不需要APB-AP。

只有复杂SoC(如Cortex-A+M多核、高端调试场景)才会把部分调试组件放在独立的调试APB上,这时才需要APB-AP。

3.4、 总结对比

AHB-AP

APB-AP

连接总线

AHB(系统总线)

APB(调试总线)

能看到什么

CPU视角的全部地址空间

只有调试APB上的组件

访问SRAM

访问外设寄存器

访问DWT/FPB/ITM

是(在AHB上)

是(如果也在APB上)

访问独立调试APB上的CTI

是否最常用

是(90%+场景)

否(仅特定SoC需要)

大多数芯片

唯一的AP

不存在

ref:

https://linmingjie.cn/index.php/archives/390/

https://www.cnsee.net/articles/swd.html

ref:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值