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。

debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。_第1张图片

这个时候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接在电源上即可(必须接)。这样能节约很多管脚。下图很明了。

debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。_第2张图片

所以我之前都设置错了其实,我的板子上不用JTAG 20pin的接口,而是SWD,但我cubemx若选用JTAG-5时,就会用上NJTRST、JTDO、JTDI、JTCK、JTMS.

但实际在MDK中配置为SWD后,用的只有JTCK(SWCLK)、JTMS(SWDIO). 其他的管脚都是没用的,在原理图上也没有连接。所以在配置为JTAG是连不上MCU的。

debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。_第3张图片

此时,J-LINK与MCU之间用SWD协议通信。

 

所以其实正确做法应该是配置为Serial wire。这才是SWD(serial wire debug)。

 

所以原子会这么说:

debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。_第4张图片

 

真的是醉了,干了三年嵌入式。。。现在才弄明白。。。

 

那么SWD没有接RESET其实,能复位芯片吗?

可以的,实际上用的都是软复位,并不是硬复位,即发送某种命令让MCU复位。

debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。_第5张图片

在没有接RESET的情况下,勾选此选项,在下载完程序,的确能够复位。

 

你可能感兴趣的:(调试经验)