单片机 SWD 下载通信底层原理.docx
基于CortexM内核的单片机,I1.前主流的下载接口就是JTAG和SWD.SV.I)<11JG½.:.1;JTAG1 TDIiTestDataIn.*行输入引脚 TDOtTestDataOut,中行输出引脚 TCK1TestC1.ock.时钟引脚 TMStTestModeSe1.ect.模式选择(控制信号)引脚 TRST.TestReset,红位引脚SYD: SWD1.OtSeria1.WireDataInputOutput,中行数据输入输出引脚 SWC1.KSeria1.WireC1.ock.串行线时钟引脚其中SWD只需要两根线(SWC1.K和SWDIO),在PCB布局有限、引脚资源紧张的情况下,SWD算是一种不错的选择.SWD值介SWD:Seria1.WireDebUg,代表串行线调试,是ARM设计的附议,用于对其微控制器进行编程和调试。市面上支持SWD调试接口的下载器很多,比如:ST-1.ink.J-1.ink.e-1.ink,GD-1.ink等市面上绝大部分用于CorteX-M内核处理器的下载器都支持。对于SWDIO,是双向(输入输出)数据引脚,必须在电路板上对线路迸行上拉(ARM建议采用100K).每次在协议中更改SWDIO的方向时,都会插入转换时间,此时线路即不受主机驱动也不受目标驱动。默认情况下,此转换时间为一位时间,但可以通过配置SWC1.K频率来调整.调试接口常见的CorteX-M内核处理器都集成了SWD和JTAG调试端口,在SWJ-DP中,SW-DP的2个JTAG引脚与JTAG-DP的5个JTAG引脚中的部分引脚豆用.JTAG与SWD的切换机制:戕认调试接口是JTAG接口,如果调试工具想要切换到SW-DP,它必须在THS/TCK(分别映射到SWD1.O和SBC1.K)上提供专用的JTAG序列,用于禁止JTAGT)P并使能SWT)P。这样便可仅使用SWC1.K和SWDIO引脚来激活SNDP.该序列为:山16个TMS(SWDIO)信号0111100111100111(MSB)3,输出超过50个TCK周期的TMS(SWDIO)-1信号SW协议序列每个序列包括三个阶段: 主机发送的数据包请求8位 目标发送的确认响应(3位) 主机或目标发送的数据传输阶段33位)数据包请求(8位):粒说明O4f1.1.1.1APnDPO:DP访何1;AP询H2RnWOSti*.It常请求4:3732)DPAAP。04的电缗<226>5面几位的小位分儡合险6停止0_7ft*不受机。动.由存在上拉.因此必聂1t.ACK响应(3位):ft名称说明0.2ACK1:FAU1.T010:WAIT1:OKDATA传输(33位)位名郦说明031WDATA或RDATA写入或请取数粼32奇仪校关32个攻IK位的软奇铸校於这种类似于寄存器的一NBit位操作,底层的一屿原理与普通的通信协议也有类似之处SW-DP状态SW-DP的状态机有一个用于标识SW-DP的内部ID代码,其中主要包含的状态:豆位、空闲状态、ID代码等. 在上电复位后、DP从JTAG切换到SWD后或者规路处于高电平超过50个冏期后,SW-DP状态机处于Ii位状态。 如果在复位状态后线路处于低电平至少两个周期,SW-DP状态机处于空国状态. 更位状态后,该状态机必须首先进入空闲状态,然后对DP-SWIDCODE寄存器执行读访问.否则,目标将在另一个事务上发出FAU1.T确认响应。SW-DP状态机的更多详细信息,可以参看CorIeX-M相关的一些手册。SW-DP寄存器SWD类似普通外设,也是有一种寄存器,开发者进行的编程(读写)操作,其实就是操作对应的寄存器。WFRZWSe1.ECTfRctr1.m1.w存ttOOIDCOOey代为SY"价.8231477<,JtSWW00ABORT010OPCTRbSXAT1.1.1.般3UhAt.电-A!WAP4M>H-1.1.UMrfft-<(C«5»&<ft电队011WIRECONTRO1.!fnvwt4iw<i侵SxmN«WM»10*READRESOe十种*u1.¼MCWM*"M.上万AP代"10SE1.fcCT*1”,雄"的,?"«1111UfERfAOBUFFTR1dHAPM.M信祥两MBItC91aar卜个2务”94依3本力*)ft*MM<M*AP>三taivn