SWD TurnAround的理解

前言:最近又重新理解了一边SWD的逻辑,大部分SWD逻辑都是同步通信的(SWD根据芯片实现的双线通信—SWCLK/SWDIO),SWD是双向通信的,所以其中时序来回切换至关重要(TurnAround后简称TA),在制作HK32F39A芯片的SWD pattern时发现TA理解模糊,所以重新梳理。

       提醒一下,我参考的是ADIv5,可以到ARM官网进行下载的,链接附上,有需要的小伙伴可以参考:Documentation – Arm Developer

       过多ARM-Debug的基础内容就不介绍了,自行参考文档。

       TA:为了防止Host和Target争用SWDIO,当驱动SWDIO的设备发生变化时,需要一个周转周期。在周转期间,主机和目标都不驱动线路,线路的状态是未定义的

       这幅图是逻辑分析仪抓SWD pattern时发现的,在机台上总是报错,但是用CMSIS-DAP模拟此时序又能够Pass,于是就不得不进一步分析SWD时序。

       话不多说,直接上图,Keil  J-link下载SWD时序图:

  

   我们常规理解是在SWCLK(后续简称CLK)的边沿驱动SWDIO(后续简称IO)时,IO翻转时说明此时Host或者Target在驱动。例如上图,IDCODE指令发出时由Host在CLK下降沿到来前进行驱动,对应的Target应该在CLK上升沿进行采样以获取Host的指令;ACK响应段是由Target端在CLK上升沿发出,对应的Host应该在下降沿进行采样

这也符合ADIv5的描述:

那么请看下图,把1CLK细化成4部分(H-F-L-R),时间标签1到8表示Target的采样点,9到11是Target的ACK的驱动点。

这样的话问题就出现了,SWD协议中要求的1CLK的TA看似消失了?

其实并没有消失在时间标签8-9之间就是TA段,只是在TA周期只包含三段时间(H-F-L),在标签9处,即成为Target段ACK的驱动IO时。

       虽然ADIv5文档中没有对SWD时序中的TA段进行明确的时间划分,根据自己理解画出下图。

好的,那再试一把SWD写操作的结构呢,请看一下接下来的图:

时间标签1到8表示Target的采样点,8-9之间是TA段,时间标签9到11是Target的ACK的驱动点,时间标签12标志ACK最后1bit的结束,12-13之间是TA段,因为这是SWD写操作,时间标签13以后的都属于Host驱动IO(在CLK的下降沿驱动),Target在CLK的上升沿采样。

暂时先写这么多,以后再补充SWD。

如果有大家有更好的想法,欢迎与我交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值