当前位置: 首页 > news >正文

ARM芯片架构之CoreSight Programmers‘ Model 深入解析

CoreSight Programmers’ Model 深入解析

本章聚焦 CoreSight Programmers’ Model,这是 ARM调试体系的基石。它通过统一的寄存器框架,为所有调试与追踪组件提供一致的可编程接口,使硬件设计者、调试器厂商可以跨平台工作。

1. Programmers’ Model 的设计哲学

  • 统一性:无论组件类型(ETM、CTI、Funnel),管理寄存器均放在最高 4KB 地址窗口,调试器可无需硬编码快速发现。
  • 可扩展性:允许组件扩展到多块 4KB空间,同时保留固定的发现寄存器区域。
  • 健壮性:规定 RAZ/WI、RES0/RES1 等读写规则,确保未来向后兼容。

2. 地址空间与组件窗口

  • 每个 CoreSight 组件必须映射至少 4KB 地址空间。
  • 若功能寄存器超过 4KB,可在低地址扩展,但 0xF00–0xFFF 区间必须保留标准管理寄存器。

2.1 多块组件支持

  • 通过 SIZE 字段声明总空间块数。
  • 最高块保留完整管理寄存器,调试器通过 ROM Table 自动定位。

3. 通用管理寄存器

下表概述了所有 CoreSight 组件必须提供的关键寄存器:

偏移地址寄存器主要功能与说明
0xF00ITCTRL集成测试模式控制:进入/退出 Integration Mode,用于产测或系统级 Trace 路径验证,正常运行时应保持关闭。
0xFA0CLAIMSET声明调试器占用:设置相应位表示调试器正在使用该组件,用于多调试器协作避免访问冲突。
0xFA4CLAIMCLR释放调试器占用:清除对应位以释放资源。
0xFA8DEVAFF0设备亲和性 0:标识该组件归属的 CPU 簇/NUMA 域,便于多核系统调试映射。
0xFACDEVAFF1设备亲和性 1:与 DEVAFF0 配合,用于多簇/多核系统的组件归属识别。
0xFB0LARLock 访问寄存器:写入特定解锁键值(如 0xC5ACCE55)以允许修改受保护寄存器。
0xFB4LSRLock 状态寄存器:只读,报告锁定状态及是否可写,用于安全访问控制。
0xFB8AUTHSTATUS安全认证状态:指示 Secure/Non-Secure 访问结果,结合 TrustZone 限制调试权限。
0xFBCDEVARCH架构与厂商识别:提供架构版本、厂商 ID、设计版本号,驱动可据此选择兼容寄存器布局。
0xFC0~0xFC8DEVID*组件特性描述:说明该模块支持的 Trace 通道数、触发器数量等实现细节,不同 CoreSight 模块定义不同。
0xFCCDEVTYPE设备类型:提供高层次的组件类别标识,与 DEVARCH 搭配快速确定组件角色(Trace Source/Sink/Link)。
0xFD0~0xFECPIDR0–7外设 ID:存储厂商、设计版本、修订号等信息,用于调试探测和芯片一致性验证。
0xFF0~0xFFCCIDR0–3组件 ID:识别组件是否符合 ARM CoreSight 规范,驱动据此判断寄存器块有效性。

在 CoreSight中,所有组件必须提供一组管理寄存器,位于其4KB地址窗口的最高0xF00–0xFFF 区间。下面详细解析关键寄存器及其设计要点。

3.1 集成测试与声明寄存器

  • ITCTRL (0xF00):Integration Mode
    Control,用于调试集成测试,支持在无完整系统时单独验证模块。
  • CLAIMSET / CLAIMCLR (0xFA0 /
    0xFA4)
    :声明当前调试器已获取控制权,用于多调试器环境下的仲裁。

3.2 锁定机制

  • LAR (0xFB0):Lock Access
    Register,写入特定解锁键值(通常是0xC5ACCE55)后才能修改组件配置。
  • LSR (0xFB4):Lock Status
    Register,指示当前锁状态以及是否支持锁定功能。
    > 设计建议:外部调试访问通常不受锁保护,但内部软件需在访问前解锁。

3.3 认证与安全

  • AUTHSTATUS
    (0xFB8)
    :显示当前安全/非安全、侵入式/非侵入式调试的允许状态。
    • 位[7:6]:Secure Non-Invasive Debug (SNID)
    • 位[5:4]:Secure Invasive Debug (SID)
    • 位[3:2]:Non-secure Non-Invasive Debug (NSNID)
    • 位[1:0]:Non-secure Invasive Debug (NSID)

3.4 设备架构与类型

  • DEVARCH (0xFBC):提供架构 ID 与设计者 JEDEC 代码,如 ARM 为 0x23B。字段包括:
    • ARCHITECT[31:21]:设计者 JEP106 编码
    • PRESENT[20]:指示是否存在该寄存器
    • REVISION[19:16]:架构版本
    • ARCHID[15:0]:具体架构标识,如 ETMv4=0x4A13
  • DEVTYPE (0xFCC):区分模块功能类型。
    • MAJOR[3:0]:主类型,如 Trace Sink(0x1)、Trace Link(0x2)、Trace Source(0x3)、Debug Control(0x4)。
    • SUB[7:4]:子类型,如 TPIU=0x1、ETB=0x2。
      在这里插入图片描述

3.5 设备配置与能力

  • DEVID (0xFC8)DEVID1 (0xFC4)DEVID2 (0xFC0):厂商自定义寄存器,记录该组件的实现特性,例如缓冲深度、链路宽度等。
    > 若组件可配置,这些寄存器应实时反映当前配置。

3.6 设备亲和性

  • DEVAFF0 (0xFA8)DEVAFF1 (0xFAC):用于描述与其它组件的唯一绑定关系,例如 ETM与处理器核心的对应。调试器可以通过比较这些寄存器自动识别配对关系。

3.7 外设与组件识别

  • PIDR0–PIDR7 (0xFE0–0xFDC):Peripheral ID Registers,提供 JEDEC厂商号、部件号、版本信息。
  • CIDR0–CIDR3 (0xFF0–0xFFC):Component ID Registers,包含类别(CLASS) 和固定前导码,用于确认该模块属于 CoreSight架构并判断其类(如 0x9 代表 CoreSight 组件)。

4. 访问规则与安全机制

  • RAZ/WI:未实现位读零写忽略。
  • RES0/RES1:保留位读出固定值,写入无效。
  • 安全调试需配合 SoC 级 TrustZone 信号与 DAP 配置。

5. 组件类别与调试流程

  • Class 0x1:ROM Table
  • Class 0x9:CoreSight Component
  • Class 0xF:PrimeCell/Legacy 组件

调试器通过 ROM Table 递归遍历组件树,利用 PIDR/CIDR自动发现所有可调试单元。

6. 硬件设计要点

  • 电源域:管理寄存器应保持独立电源,确保在核心下电时仍可访问。
  • 时钟域:为降低功耗,可单独为调试模块配置时钟门控。
  • 版图布局:保证 ATB 链路的时序和信号完整性,避免高速 trace 丢包。

7. 与调试器的交互示例

  1. 调试器读取 ROM Table 获取组件基址。
  2. 读取 CIDR 确认组件类别。
  3. 读取 DEVARCH/DEVTYPE 确认具体功能。
  4. 根据 DEVAFF0/1 建立 CPU–ETM 配对。
  5. 通过 LAR 解锁并配置 Trace。

结语

Programmers’ Model以标准化寄存器框架为核心,使得跨厂商、跨平台的调试器得以在无需定制的情况下高效发现和操作
CoreSight 组件。理解这些寄存器及其访问规则,是硬件工程师构建可调试 SoC的基础。

http://www.dtcms.com/a/399903.html

相关文章:

  • Video-XL-2论文阅读
  • 在网站建设工作会议上讲话网站安全管理制度
  • JAVA第一阶段结束喽后天更新第二阶段至于明天当然是练习时间回顾一下之前学的太良心了
  • 专业门户网站建设用流媒体做的电台网站
  • python(74) 调用dll文件
  • 国家关于网站信息建设管理文件郴州市人口
  • 温州市城市建设档案馆网站公司宣传册排版
  • redis的set集合的编码方式以及应用场景
  • 【MySQL初阶】03-常见的数据类型
  • CPU调用频率偏高 原因调查
  • Nest 中的数据库集成、JWT身份认证与任务调度全解析
  • 中小型企业网站建设与管理设计制作软件
  • 常德网站建设套餐报价怎么制作公司网页教程
  • 音频基础知识
  • 如何在网上建立自己的网站自助建站信息网
  • 网站域名找回密码 用户名景区网站的建设公司
  • HTML应用指南:利用GET请求获取全国奥迪授权经销商门店位置信息
  • golang基础语法(三)常量、指针、别名、关键字、运算符、字符串类型转换
  • 普定县建设局网站河北seo平台
  • dify-随笔
  • 免费开店的平台有哪些标题优化方法
  • seo顾问服务公司站长怎么做软文网站
  • 【JNA】JAVA使用JNA调用C++ dll文件(3)编译Linux版本.so文件
  • MyBatis 操作数据库(⼊⻔)
  • [baka编程]初入C++,如何理解新概念——类和对象
  • 竞价网站做推广一款app是如何制作出来的
  • 北京建设银行网站广东官网网站建设平台
  • 淘宝客怎么在网站做推广网站每年续费费用
  • Pyside6 + QML - 多线程01 - QThread 基础(子线程执行耗时任务)
  • 农产品应该建设哪个网站屏幕分辨率 网站开发