大咖侃设计,Cortex-M系列处理器的调试和跟踪特性知多少
下表列出的是典型设计需要考虑的。在CoreSight架构下,调试接口和跟踪接口模块是和处理器分离的,因此采用设备的调试和跟踪连接和下表可能不一样,也可能通过添加一些额外的CoreSight调试组件来增加一些调试特性。
调试和跟踪特性比较
调试接口可以让调试者实现:
- 访问控制调试和跟踪特性的寄存器。
- 访问内存空间。对Cortex-M系列处理器,及时当处理器运行时也可以执行内存空间访问,这被称作实时内存访问。
- 访问处理器核心寄存器。这只能当处理器停止的时候才可以操作。
- 访问Cortex-M0处理器中微跟踪缓存(MTB)生成的跟踪历史记录。
另外,调试接口也会用作:
- Flash 编程
Cortex-M系列处理器可以选择传统的4到5个引脚(TDI, TDO, TCK, TMS 和可选的 nTRST)的JTAG接口,或者选择新的只需要两个引脚的串行调试协议接口,串行调试接口对有限数目引脚的设备是非常适合的。
串口线或者JTAG调试接口
串行线调试协议接口可以处理JTAG支持的所有特性,支持奇偶校验。串行调试协议被ARM工具厂商广泛的采用,许多调试适配器两种协议都支持,串行线型号共享调试接口上TCK和TMS针脚。
跟踪接口让调试者可以在程序执行时实时的(很小的延时)收集程序运行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持的嵌入式跟踪单元(ETM)生成的程序指令流信息(指令跟踪),可以是数据跟踪单元(DWT)生成的数据/事件/性能分析信息,或者是软件控制数据跟踪单元(ITM)生成的信息。
有两种类型的跟踪接口可用:
- 跟踪端口(Trace port)– 多个数据线加上时钟信号线。比SWV有更高的跟踪带宽,可以支持SWV的所有跟踪类型加上指令跟踪。Cortex-M3/M4/M7或者 Cortex-M33的设备上,跟踪端口通常有4个数据线和一个时钟线。
- 串行监视器(SWV)– 单引脚线跟踪接口,可以选择性的支持数据跟踪,事件跟踪,性能分析和测量跟踪。
Trace port 支持指令跟踪和其他跟踪功能必要的带宽
跟踪接口提供了在处理器运行的时候获取大量有用信息的能力。例如嵌入式跟踪单元(ETM)可以获取指令运行历史记录,数据跟踪单元(ITM)让软件产生消息(例如,通过printf)并利用Trace接口获取。另外,Cortex-M3/M4/M7/M33支持数据跟踪单元(DWT)模块。
- 可选的数据跟踪:内存地址的信息(例如,地址,数据和时间戳的组合)可以在处理器访问这个地址的时候采集。
- 性能分析跟踪:CPU在不同操作任务使用的时钟周期数(例如,内存访问,休眠)。
- 事件跟踪:提供服务器响应的中断/异常的运行时间和历史。
Serial wire viewer 提供了低成本,少引脚的跟踪方案
这些跟踪特性被各种工具厂商广泛采用,采集的信息也被以各种方式直观的展现出来。例如DWT获取的数据可以在Keil µVision调试器中以波形的方式展现出来(Keil微控制器开发工具的一部分)如下图所示。
Keil µVision 调试器的逻辑分析器
虽然Cortex-M0 和 Cortex-M0+不支持跟踪接口,Cortex-M0+支持叫做微跟踪缓存的特性(MTB)。MTB让用户分配一小块系统SRAM作为存储指令的缓存,通常设置为循环缓存,这样可以抓取最新的指令执行历史并在调试器上显示出来。这个MTB跟踪特性也被Cortex-M23和Cortex-M33支持。
Cortex-M0+/M23/M33 的MTB提供了低成本指令跟踪方案