文章目录
- Trace protocol
- packet的种类
- Error packets
- VERSION Packets
- 同步 packet
上篇文章:ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用
Trace protocol
STM 产生的trace的是遵守 MIPI System Trace Protocol version 2 (STPv2) 规范的,STM 提供 65536(64K) 个 STMv2 channels。STM能够产生的最大数据包时64bits。STP 历史版本如下图:
packet的种类
从表中可以看到 STM 产生 VERSION value 为 3。
Error packets
STM 将会产生 Error packets 包,如果出现数据丢失(如出现数据溢出),错误包的8bit 全部为0。
VERSION Packets
版本包的作用是告诉接收者当前STP使用的版本,版本包只会出现在同步包的后面,因为解析其他包的时候需要依赖版本包,比如 timestamp 包的长度会根据STP不同版本变化。
同步 packet
为了遵守 STPv2 协议,STM 在使能 之后产生的第一个包就是 对齐同步包(alignment synchronization packets
) , 同步包之后会跟着一个版本包 VERSION packet
,在 synchronization packets
与 VERSION packet
之间只能是 NULL packets
如果 timestamping 被使能之后,FREQ packet
会紧接着 版本包。 由于接收 STM输出数据的接收器通常是按照bit 流接收的,所以接受器需要知道什么时候开始接收数据,STM 发出的同步包最长可能是由84个连续的0b1组成,也即 21个 0xF, 接着会再发一个0x0(0b0000),一旦接收器检测到了这个信号,首先会跳过 NULL packet(0x0),然后搜寻 VERSION packet 版本,来确认当前使用的版本号,以便决定后面如何解析剩下的数据。
下图展示了在同步包后面跟着一个16-bit
的数据包,数据包的 channel id 为 4, master id为 3。每一个packet 的 payload(有效数据)之前都会有自己对应的opcodes。比如 版本号的opcde 是0xF00
, 其payload 为4(0b0100
),payload的位宽为4bits,4bits 也是STP 最小的传输颗粒,专业属于叫做nibble(半字节)。
下图展示了 ASYNC packet后面跟着版本包,VERSION packet 后面跟着 C8 packet,在后面就是 D64 packet,可以看到 STM 通过ATB 口发给 接收器receiver 的同步信息正好是21个0xF, VERSION packet的opcode 也正好 0xFF0, payload 为 3, C8 的opcode 为 3, payload 为 0x05, D64的opcode 为 7,对应的payload 为 0x12345678(代码中写入的值)。