简述
对STM32F411所支持的调试接口及其方式进行简单的学习。
调试接口
STM32F411的调试接口硬件示意如下:
在调试模式下,MCU核在某条特定指令获取(断点),或者是数据获取时(Watch Point)时可以被停住,MCU核的内部状态以及外部状态均可被测量,在测量完成后,MCU核会恢复并继续执行。
STM32F411的调试接口支持两种:
- Serial wire(SWD)
- JTAG debug port
另外上图中的一些术语意思如下:
术语 | 说明 | 附加说明 |
---|---|---|
SWJ-DP | Serial wire / JTAG debug port, DP即调试接口debug port的简写。SWJ表示是SWD和JTAG | |
AHB-AP | AHB access port, AHB是ARM架构中常见的高速内部总线一种,即说明调试接口会通过这个AHB-AP与内部的许多调试单元通过AHB进行交互 | |
ITM | Instrumentation Trace Macrocell,即可以进行测量跟踪的,常见的是在代码中通过这个来输出调试信息 | |
FPB | Flash Patch Breadpoint,因为指令一般存在于flash中,这个可能和调试时打断点相关 | |
DWT | Data Watchpoint Trigger,数据监视窗口用,许多调试工具都会有watch point的功能的 | |
TPUI | Trace Port Unit Interface,可能也是用作输出吧,只有大尺寸封装的IC有此功能,应当需要额外的pin | 上面图示中写成TPIU了 |
ETM | Embedded Trace Macrocell,也是只有大尺寸封装的IC有此功能,应当需要额外的pin | 上面图示中没有看到这个 |
接下来简单说明下这里面部分的详细内容以及可能的用法。
SWJ-DP
这个是ARM标准的CoreSight debug port,其中,使用JTAG DP的话有5根pin,用SW DP的话2根pin。STM32F411的这两个接口是复用的~,其硬件框图如下:
下面用表格的方式说明下这两个DP的引脚连接的区别:
引脚 | JTAG-DP接口 | JTAG功能 | SW-DP接口 | SW功能 | PIN Num |
---|---|---|---|---|---|
JTDO | TDO | 数据输出 | TRACESWO | trace输出 | PB3 |
JTDI | TDI | 数据输入 | PA15 | ||
NJTRST | nTRST | 复位 | PB4 | ||
JTMS/SWDIO | TMS | 测试模式选择 | SWDIO | 数据输入输出 | PA13 |
JTCK/SWCLK | TCK | 时钟 | SWCLK | 时钟 | PA14 |
上图中还有一个SWD/JTAG select的单元,其实就是用来选择是使用JTAG或SW的。另外表中的TRACESWO并不是SW-DP的接口~应当是后面要提到的ITM会用到的接口。
ITM
ITM支持printf风格的输出,可以在OS和Application中输出log,用来评估和分析系统的信息。ITM有如下三种方式产生trace信息:
方式 | 说明 | 其他 |
---|---|---|
Software trace | 直接写ITM相应寄存器直接发送数据 | |
Hardware trace | DWT产生数据通过ITM发送 | |
Time stamping | ITM包含了一个21bit的计数器用于产生时间戳,这个时间戳可以通过ITM发送 |
ITM数据会通过TPIU,TPIU会加上额外的包再发送给调试主机。
使用ITM功能之前,必须使能Debug Exception的TRCEN bit和Monitor Control寄存器。ITM相关寄存器如下图:
另外的ETM应当是用来trace执行的指令的,TPIU则是有FIFO,起到bridge的作用,将ETM或ITM的data输出出去。