debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。
之前用的都是最小STM32F103RBt6的芯片,支持JTAG-5。一直用这种调试方式。然后在MDK中选择SWD,这么去用。
但是最近要节约成本,开始考虑管脚更少的,32pin、48pin的。这些就不支持JTAG-5了,只支持Serial wire的方式,也就是两根线:SWDIO、SWCLK。
他跟JTAG-4、JTAG-5的区别在哪?
从管脚上看,少了Rvef、GND、RESET管脚。JTAG-4、JTAG-5就是JTAG方式,是20根管脚的。所以设置时应设置为JTAG。
这个时候J-LINK用的是JTAG的协议与模式控制MCU。
那用JTAG-4、JTAG-5时,为什么可以设置为SWD?
其实JTAG-4、JTAG-5就是JTAG方式,是20根管脚的,这样太占用MCU的管脚了。J-LINK也支持SWD的协议和模式,在J-LINK的管脚上也通用。所以设置为SWD后,实际只用了MCU的两根管脚,VTref和GND接在电源上即可(必须接)。这样能节约很多管脚。下图很明了。
所以我之前都设置错了其实,我的板子上不用JTAG 20pin的接口,而是SWD,但我cubemx若选用JTAG-5时,就会用上NJTRST、JTDO、JTDI、JTCK、JTMS.
但实际在MDK中配置为SWD后,用的只有JTCK(SWCLK)、JTMS(SWDIO). 其他的管脚都是没用的,在原理图上也没有连接。所以在配置为JTAG是连不上MCU的。
此时,J-LINK与MCU之间用SWD协议通信。
所以其实正确做法应该是配置为Serial wire。这才是SWD(serial wire debug)。
所以原子会这么说:
真的是醉了,干了三年嵌入式。。。现在才弄明白。。。
那么SWD没有接RESET其实,能复位芯片吗?
可以的,实际上用的都是软复位,并不是硬复位,即发送某种命令让MCU复位。
在没有接RESET的情况下,勾选此选项,在下载完程序,的确能够复位。