深入理解调试访问端口(DAP):从ARM核心到混合设计
在嵌入式系统开发中,调试是一个不可或缺的环节。调试访问端口(DAP)作为连接开发者与硬件的桥梁,其重要性不言而喻。本文将基于SEGGER Wiki上的资料,深入探讨DAP的概念、组成部分以及其在不同架构中的应用。
DAP概述
调试访问端口(DAP)是指DP(Debug Port)和所有连接到DP的AP(Access Port)的集合,它描述了整个调试层次结构。DAP最初是作为一项标准设计的,旨在为ARM核心提供调试访问,但随着发展,它已经成为一个能够通过单一调试连接器访问ARM和非ARM核心的标准,所有核心共享设备上的相同引脚。这使得硅片供应商能够轻松创建包含ARM和非ARM核心的混合设备,并且只暴露一个标准化的调试接口,允许对设备中的所有核心进行调试访问。
DP(Debug Port)
DP负责将用于与调试逻辑通信的物理协议转换为ARM特定的内部调试逻辑。DP有几种类型:
- JTAG-DP:使用JTAG与调试逻辑交换信息。
- SW-DP:使用2线串行线调试(SWD)与调试逻辑交换信息。
- SWJ-DP:可以在运行时使用ARM指定的特定切换序列在JTAG和SWD之间切换协议。
在一个DAP中,只有一个DP。
AP(Access Port)
AP主要是一个内存总线接口,用于访问实际的调试逻辑/资源。与DP执行协议转换不同,AP通常执行实际的内存访问以读写调试寄存器。AP类似于DMA,允许在不使用CPU核心的情况下发出内存访问。AP有几种类型:
- AHB-AP:高级高性能总线-访问端口。
- APB-AP:高级外设总线-访问端口。
- AXI-AP:高级可扩展接口-访问端口。
- JTAG-AP:联合测试行动组-访问端口。
在一个DAP系统中,可以有多个AP连接到单个DP。
DAP拓扑示例
Cortex-M
对于基于Cortex-M的微控制器,AHB-AP是首先引入的AP类型,它作为系统的第二个内存接口,与CPU核心共享相同的4 GiB地址空间。这意味着调试寄存器可以通过调试接口以及CPU核心本身访问。这种设置的一个好处是AHB-AP允许独立于核心读写系统内存(如RAM、特殊功能寄存器等),这使得像SEGGER RTT这样的技术得以应用。
Cortex-A
对于基于Cortex-A和Cortex-R的微控制器,APB-AP提供了一个独立的4 GiB地址空间,与核心地址空间不同。这种设计的理念是将调试寄存器访问和系统内存访问分开,以防止核心意外修改调试寄存器。这也为其他内存等留出了更多的4 GiB系统地址空间。
混合设计
在混合设计中,可以包含ARM和非ARM核心。例如,Cortex-M核心可以通过AHB-AP访问,而ARM11核心可能位于JTAG-AP之后,两者都连接到同一个DP。JTAG-AP允许对ARM11发出特定的JTAG指令,而不影响DAP中的其他核心。
级联AP
从CoreSight SoC-600开始,核心的调试AP也可以位于另一个AP(通常是APB-AP)之后。这是一种非常罕见但可能的设置。
通过本文的介绍,我们可以看到DAP在嵌入式系统调试中扮演着核心角色,无论是在单一架构还是混合架构中。了解DAP的工作原理和拓扑结构对于嵌入式系统开发者来说至关重要,它不仅有助于提高调试效率,还能在设计阶段就考虑到调试的便利性。随着技术的发展,DAP的标准和实现也在不断进化,为开发者提供了更多的工具和可能性。
在嵌入式系统设计中,AHB-AP、APB-AP、JTAG-AP和SYS-AP是不同类型的访问端口(AP),它们各自有不同的特点和应用场景。以下是它们之间的主要差异:
AHB-AP(Advanced High-performance Bus - Access Port):
- AHB-AP是高性能总线访问端口,它位于Cortex-M存储器系统和调试接口模块(SWJ-DP/SW-DP)之间,充当总线桥的角色,将串行线/SWJ接口的命令转换成AHB数据传送。
- AHB-AP提供了错误响应处理机制和等待机制,允许独立于核心读写系统内存,如RAM、SFRs等,类似于DMA功能。
- AHB-AP支持高达4 GiB的地址空间,并且允许调试寄存器和系统内存的访问。
- 可以实现RTT,内存变量准实时读取,绘制曲线等高级调试功能
- 支持变量变化的动态显示,支持在程序运行过程中动态修改地址空间内容,不需要经过halt操作
- 实现独立于CPU运行的无感变量读取和写入,不影响程序实际运行,可以实现类似XCP的调参功能
APB-AP(Advanced Peripheral Bus - Access Port):
- APB-AP是为低带宽和低功耗外设设计的总线访问端口,它简化了协议,减少了信号数量和复杂性。
- APB-AP提供独立的4 GiB地址空间,与核心地址空间不同,用于分离调试寄存器访问和系统内存访问。
- APB-AP不允许独立于核心访问系统内存(RAM、SFRs等),与AHB-AP相比,它在设计上更注重于降低功耗和成本。
JTAG-AP(Joint Test Action Group - Access Port):
- JTAG-AP是一种特殊的AP,不同于其他AP,它不提供类似DMA的功能来访问内存。
- JTAG-AP支持通过特定的JTAG指令(Shift-IR)访问非内存映射的调试寄存器,主要用于支持旧的ARM核心设计。
- JTAG-AP允许对旧核心(如ARM11)发出特定的JTAG指令,而不影响DAP中的其他核心。
SYS-AP(System Access Port):
- SYS-AP通常指的是系统级别的访问端口,它可能涉及到系统资源的管理和访问,但具体定义和功能可能因不同的系统和实现而异。
- SYS-AP可能与系统级的调试、诊断和其他系统级功能相关,但具体的差异和特点需要根据具体的系统文档来确定。
总结来说,AHB-AP和APB-AP主要区别在于它们所服务的外设性能需求,AHB-AP适用于高性能需求,而APB-AP适用于低性能需求。JTAG-AP则专门用于支持旧的非内存映射调试寄存器的访问。SYS-AP的具体功能和差异需要根据具体的系统文档来确定。
最后更新于 2024-12-06 01:05:54 并被添加「嵌入式 调试 ARM 系统」标签,已有 450 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。