单片机 SWD 下载通信底层原理
内容提要
基于Cortex-M内核的单片机,主流的下载接口是JTAG和SWD。SWD是一种不错的选择,只需要两根线。常见的Cortex-M内核处理器都集成了SWD和JTAG调试端口。SW-DP有不同的状态和内部ID代码,开发者可以对其进行编程操作。
延伸解读
SWD与JTAG的引脚复用关系
文章指出,Cortex-M处理器通常集成SWJ-DP,其中SW-DP的两个引脚与JTAG-DP的五个引脚中的部分复用。这意味着同一组物理引脚可支持两种调试协议,但默认启用JTAG。若想使用SWD,调试器必须发送特定JTAG序列来切换。这种设计让PCB布局更灵活,但也要求开发者理解切换机制,否则可能无法正确进入SWD模式。
SWDIO上拉与方向切换的时序影响
SWDIO是双向数据线,ARM建议在电路板上加100K上拉电阻。每次协议更改SWDIO方向时,会插入转换时间,此时线路既不受主机也不受目标驱动。默认转换时间为一位时间,但可通过调整SWCLK频率改变。这提示硬件设计需注意上拉和信号完整性,软件调试时也需考虑时序余量,避免通信失败。
SW-DP状态机的复位与空闲条件
SW-DP状态机有复位、空闲等状态。上电复位、从JTAG切换到SWD或线路高电平超过50个周期后,状态机进入复位。复位后若线路低电平至少两个周期,则进入空闲。必须先从复位进入空闲,再读ID CODE寄存器,否则目标会返回FAULT。这解释了调试器连接时需遵循的初始化顺序,否则可能无法识别目标。
Q&A
SWD接口需要哪几根线?相比JTAG有什么优势?
SWD接口只需要两根线:SWCLK(串行线时钟)和SWDIO(串行数据输入输出)。相比JTAG,SWD在PCB布局有限、引脚资源紧张的情况下是更好的选择。
SWDIO引脚在电路设计上需要注意什么?
SWDIO是双向数据引脚,必须在电路板上对线路进行上拉,ARM建议采用100K电阻。此外,每次更改SWDIO方向时会插入转换时间,默认一位时间,可通过配置SWCLK频率调整。
如何从JTAG接口切换到SWD接口?
默认调试接口是JTAG,要切换到SW-DP,需在TMS/TCK(映射到SWDIO和SWCLK)上提供专用JTAG序列:1. 输出超过50个TCK周期的TMS=1;2. 输出16个TMS信号0111100111100111(MSB);3. 输出超过50个TCK周期的TMS=1。
SWD协议的数据传输包含哪些阶段?
SWD协议每个序列包括三个阶段:主机发送的数据包请求(8位)、目标发送的确认响应(3位)、主机或目标发送的数据传输阶段(33位)。
SW-DP状态机有哪些主要状态?如何进入空闲状态?
SW-DP状态机主要状态包括复位、空闲状态、ID代码等。上电复位后、从JTAG切换到SWD后或线路高电平超过50个周期后,状态机处于复位状态。复位状态后线路低电平至少两个周期,则进入空闲状态。
SWD编程操作的本质是什么?
SWD类似普通外设,也有寄存器,开发者进行的编程(读写)操作,其实就是操作对应的寄存器。