随学习MCU开发,肯定少不了DEBUG调试这一步骤。
本文以STM32F1、Cortex-M3为例(其它系列芯片/内核的原理类似)讲述一下调试接口相关的知识。
1
概述在STM32中,有很多调试组件,使用它们可以执行各种调试功能,包括断点、数据观察点、 闪存地址重载以及各种跟踪。
2
调试框图STM32F1和Cortex™-M3的调试框图:
提示:Cortex™-M3内核内含的硬件调试模块是ARM CoreSight开发工具集的子集。
ARM Cortex™-M3内核提供集成的片上调试功能。它由以下部分组成:
SWJ-DP:串行/JTAG调试端口
AHP-AP:AHB访问端口
ITM:执行跟踪单元
FPB:闪存指令断点
DWT:数据触发
TPUI:跟踪单元接口(仅较大封装的芯片支持)
ETM:嵌入式跟踪微单元(在较大的封装上才有支持此功能的引脚),专用于STM32F1的调试特性
灵活的调试引脚分配
MCU调试盒(支持低电源模式,控制外设时钟等)
3
调试接口STM32支持两种调试接口:
串行接口
JTAG调试接口
STM32的5个普通I/O口可用作SWJ-DP(串行/JTAG调试)接口引脚:
4
SWJ调试端口(serial wire and JTAG)STM32内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚)。
1.JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。
2. 串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口。
SWJ调试端口:
JTAG-DP和SW-DP切换的机制
JTAG调试接口是默认的调试接口。如果调试器想要切换到SW-DP,必须在TMS/TCK上输出一指定的JTAG序列(分别映射到SWDIO和SWCLK),该序列禁止JTAG-DP,并激活SW-DP。该方法可以只通过SWCLK和SWDIO两个引脚来激活SW-DP接口。
指定的序列是:
1. 输出超过50个TCK周期的TMS(SWDIO)= 1信号
2. 输出16个TMS(SWDIO)信号 0111100111100111 (MSB)
3. 输出超过50个TCK周期的TMS(SWDIO)= 1信号
5
JTAG脚上的内部上拉和下拉保证JTAG的输入引脚不是悬空的是非常必要的,因为他们直接连接到D触发器控制着调试模式。必须特别注意SWCLK/TCK引脚,因为他们直接连接到一些D触发器的时钟端。
JTDO:浮动输入
软件可以把这些I/O口作为普通的I/O口使用。
6
利用串行接口并释放不用的调试脚作为普通I/O口为了利用串行调试接口来释放一些普通I/O口,用户软件必须在复位后设置SWJ_CFG=010,从而释放PA15, PB3和PB4用做普通I/O口。
在调试时,调试器进行以下操作:
在系统复位时,所有SWJ引脚被分配为专用引脚(JTAG-DP + SW-DP)。
在系统复位状态下,调试器发送指定JTAG序列,从JTAG-DP切换到SW-DP。
仍然在系统复位状态下,调试器在复位地址处设置断点
释放复位信号,内核停止在复位地址处。
从这里开始,所有的调试通信将使用SW-DP接口,其他JTAG引脚可以由用户代码改配为普通I/O口。
提示:这个地方就是需要大家配置相关的引脚。
参看文献:
1.Cortex™-M3(r1p1版)技术参考手册(TRM)
2.ARM调试接口V5
3.ARM CoreSight 开发工具集(r1p0版)技术参考手册
作者 |strongerHuang
微信公 众号 | 嵌入式专栏
------------ END ------------