stm32f103的ST-link调试接线
画板子的时候,发现不知道用st-link烧录器烧录的时候,SWDIO与SWCLK这两根线是接到stm32哪里的,于是去查找了芯片手册,用来记录自己的学习过程。
关于调试,我看到了这样一段:翻译:
2.3.24 串行线式JTAG调试端口(SWJ-DP)
ArmSWJ-DP接口是嵌入式的,它是一个集成了JTAG和串行线调试端口的功能,能够使串行线调试或 JTAG 探头连接到目标设备。JTAG 的TMS和TCK引脚分别与SWDIO和SWCLK共用,而在 TMS 引脚上的特定序列用于在JTAG-DP 和 SW-DP 之间进行切换。
我花了二十分钟理清了里面的关系,并得出结论,上电后芯片就是SWD的烧录模式,并且SWDIO与SWCLK与TMS共用引脚,SWCLK与TCK共用引脚,也就是对应的PA13与PA14,从而我确定了在绘制原理图时要留出的引脚,以便后面stlink的接线。
接线图:
JTAG是什么?跟ST-LINK烧录有什么关系?
JTAG是什么?
JTAG(Joint Test Action Group)最初是一种芯片内部测试标准,用于在芯片制造后检测电路连接是否正常。后来,工程师发现它非常适合用来控制CPU,于是就把它发展成了嵌入式开发中最常用的调试和烧录接口。它通常需要5根线:TMS、TCK、TDI、TDO,以及可选的nTRST。跟ST-LINK烧录有什么关系?
ST-LINK就是一款利用JTAG(或SWD)协议来烧录和调试STM32芯片的硬件工具。
你可以把ST-LINK理解为“翻译官”:电脑上的IDE(如Keil/IAR)通过USB发送指令给ST-LINK,ST-LINK再通过JTAG或SWD接口,把程序烧进芯片的Flash里,并实时控制CPU执行、暂停、查看变量。
SWJ-DP是什么?跟JTAG有什么关系?
SWJ-DP是什么?
SWJ-DP(Serial Wire JTAG Debug Port)是ARM公司定义的一个混合调试端口。它把两种调试接口——JTAG-DP和SW-DP——集成到了同一组物理引脚上。它的设计初衷是节省引脚,让你可以在同一个引脚上,根据需要选择使用JTAG(功能全、线多)还是SWD(线少、高速)。跟JTAG的关系?
SWJ-DP是“容器”,JTAG-DP是“容器里的一种模式”。
也就是说,SWJ-DP这个端口支持两种工作模式:JTAG模式(使用5根线)
SWD模式(使用2根线,即SWDIO+SWCLK)
大多数STM32芯片上默认启用的就是SWJ-DP,所以你插上ST-LINK,默认就能用(通常优先走SWD模式)。
JTAG的TMS与TCK怎么切换成SWDIO与SCLK?
这个问题是硬件连接上的关键:
引脚是物理共用的:在芯片内部,TMS引脚和SWDIO引脚是连到同一个焊盘上的;TCK引脚和SWCLK引脚也是共用的。所以硬件上不需要物理跳线,它们本来就是同一个引脚。
切换是靠“协议序列”:切换不是靠拨动开关,而是靠调试器(如ST-LINK)在TMS/SWDIO这根线上发送一串特定的波形。
ARM规定了一个“SWJ切换序列”:调试器先通过JTAG方式(用TMS和TCK)发送一个特定的16位数据包(0xE79E)。
芯片内部的SWJ-DP模块收到这个序列后,就知道“主人想切换到SWD模式”,于是内部逻辑就将引脚的功能从JTAG状态机切换到SWD状态机。
此后,TMS引脚就被当作SWDIO来用,TCK被当作SWCLK来用。
大部分ST-LINK在连接时会自动发送这个切换序列,所以你不需要手动操作。
JTAG-DP与SW-DP是什么,跟JTAG与SWJ-DP有什么关系?
JTAG-DP是JTAG协议的调试端口,SW-DP是SWD的调试端口,也就是我们用的ST-link,只需要SWDIO与SWCLK两根线,SWJ-DP是ARM公司将JTAG和SWD两种调试方式结合在一起的名称,JTAG-DP只是SWJ-DP的一种模式。
展望:由于时间原因,我没有再深入去研究为什么一上电就是SWD的烧录模式以及Keil在这个流程中发挥的作用。