> 文章列表 > 【ARM Coresight 4 - Rom Table 介紹】

【ARM Coresight 4 - Rom Table 介紹】

【ARM Coresight 4 - Rom Table 介紹】

文章目录

    • 1.1 ROM Table
    • 1.2 ROM Table 例子

1.1 ROM Table

在一个SoC中,有多个Coresight 组件,但是软件怎么去识别这些 Coresight 组件,去获取这些Coresight 组件的信息了?这个时候,就需要靠 Coresight 组件中,一个重要的组件,这个组件就是 ROM Table

ARM规定,在一个SoC中,必须要实现至少 1 个 ROM Table,该 ROM Table,保存了SoC中各个Coresight 组件的信息,包括组件格式以及组件的基地址。

ROM Table 只会占用一个 4K 空间大小,也就是PIDR4寄存器的SIZE为0

1.1.1 Entry 寄存器

对于 ROM Table,从 0x000-0xefc,是 Entry 寄存器。每个 Entry 保存了一个Coresight 组件的信息。
【ARM Coresight 4 - Rom Table 介紹】
【ARM Coresight 4 - Rom Table 介紹】
[31:12] 是Coresight 组件,基于 ROM Table 基地址的偏移地址。例如 ROM table 的基地址为 0x2000_0000,而[31:12]1, 那么这个 Coresight 组件的基地址就是 0x2000_1000
[8:4][2]是用来说明该Coresight 组件所处的 power domain。因为一个 SoC中,有多个power domain,而每个组件可能会处于不同的 power domain中。就依靠这两个位域说明。
[1],表示 Coresight 的寄存器的数据有效是8bit,还是32bit
[0],表示这个 Entry 代表的组件是否有有效的。

一个 ROM Table 中,最多有 960 个 Entry ,也就是一个 ROM Table中,可以最多保存 960 个 Coresight 组件的信息,但是在一个 Entry 中,可以指向下一个rom table,这样,就扩展了保存Coresight 组件信息的个数。

如果rom table的 Entry 没有用完,那最后一个有效的 Entry 后的下一个 Entry , Entry 值为全0。
【ARM Coresight 4 - Rom Table 介紹】
rom table的基地址,保存在 DAP 的AP的 base addr 寄存器中,这样 Debugger 通过访问 DAPAP,就可以获取到 Rom Table 的基地址,然后在访问 Rom Table,从而获取到整个SoC 中所有的 Coresight 组件的信息。

ROM Table的 Entry 指向,可以理解是一个链表,但是链表中,不能有环。如以下的 Entry 指向是错误的
【ARM Coresight 4 - Rom Table 介紹】
【ARM Coresight 4 - Rom Table 介紹】
如果一个Coresight 组件,占用的空间,超过了4K,但 Coresight 有规定,Coresight的寄存器,要实现在最后一个4K的最后1K位置,因此 ROM Table 中的该 Coresight 组件的基地址,为最后一个 4K 空间的基地址。

1.2 ROM Table 例子

例如,如下的 Coresight 系统,共4个组件,假设第一个组件是ROM Table。假设 ROM Table 的基地址是 0x8000_0000
在这里插入图片描述

那么:
在这里插入图片描述

ROM Table 的基地址,存在 DAPAPbase addr 寄存器中,外部通过访问 DAP 的这个寄存器,获取到 ROM Table 的基地址,然后就可以访问 ROM Table 各个 Entry 寄存器的值。

组件1组件2组件3的基地址信息,存放在 ROM Tableentry0entry1entry2 中。

  • 对于组件1entry0[31:12]1,表示组件1的基地址是0x8000_1000,外部根据这个地址,就可以访问这个组件的 Coresight寄存器,从而获取到这个组件的信息。

  • 对于组件2,因为这个组件,占用了44K空间大小,ROM Table 中存放占用最后 1 个 4K 空间的基地址,因此 entry0[31:12]5,表示 组件1 的基地址是0x8000_5000,外部根据这个地址,就可以访问这个组件的 Coresight 寄存器,从而获取到这个组件的信息。通过读取PIDR4寄存器的 SIZE 信息,获取到该组件占用44K空间,从而反推,可以得到该组件的基地址是 0x8000_2000

  • 对于组件3entry0[31:12]6,表示组件1 的基地址是 0x8000_6000,外部根据这个地址,就可以访问这个组件的 Coresight 寄存器,从而获取到这个组件的信息。

这样,外部就通 过 ROM Table,就可以获取到 SoC 中,所有 Coresight 组件的基地址。有了基地址,就可以对其进行访问。

推荐阅读