ARM调试接口——PART B.4 SWD协议解析
发布网友
发布时间:2024-09-05 04:36
我来回答
共1个回答
热心网友
时间:2024-11-30 09:36
SWD协议解析
SWD协议,即Serial Wire Debug(串行线调试)协议,是ARM公司为调试设备开发的一套标准接口协议,主要用于点对点架构的调试连接。SWD协议分为v1和v2两个版本,v1版本为单点对点架构,只支持单个主机和单个设备的连接,而v2版本为多点架构,增加了对多个串行调试设备连接的支持,但同时也引入了*最大连接速度的trade off。
SWD协议v1中,总线传输的比特序为最低有效位优先(LSB),数据传输遵循最低位先传输的原则。SWD的传输闲置状态称为空闲周期,主机通过将SWDIO线拉低并驱动时钟来插入空闲周期。在SWD的第二个版本中,为了支持休眠状态,需要在实现中考虑与第一个版本之间的兼容问题。
在SWD中,所有数据传输遵循低位优先的原则,如OK的ACK响应数据为0b001,传输顺序为最低位1,然后是0,最后是最高位0。线路周转是指在数据传输方向变化时,需要一个时间段让主机与设备均不驱动数据线,数据线在此期间的电平状态不定。
Arm SWD接口使用一个双向数据连接线(SWDIO)和一个时钟线(SWCLK)进行数据传输。基本传输流程分为数据包请求、ACK响应和数据传输三个阶段。在数据传输阶段,ORUNDETECT标志位决定了超时检测模式的开启状态,该模式允许长时间和高吞吐量的连接,但默认禁用。在数据传输过程中,会使用偶校验进行校验,将奇偶校验位加在数据传输后,主机应只对Bits 3-34进行校验,与Bit 35比较是否一致。
每个设备需要使用一个包含4bit的实例ID(instance ID)作为唯一的设备ID(target ID),用于连接过程中的设备区分。上电后,所有设备都会被主机选中,除非预先使用设备ID进行选中,否则主机将无法与设备进行通信。
SWD v2协议在多点架构中存在一些局限性,如连接过程需要满足特定条件,调试主机无法无缝连接到先前未连接的设备,除非主动提供设备的目标ID。此外,SWD v2还对设备提出了一些要求。
SWD协议的具体操作包括成功写入操作、成功读取操作、等待操作和发生错误的操作。写入操作与读取操作的流程相似,但在数据传输阶段结束后的操作有所不同。在等待操作中,设备在无法立即响应主机请求时发出WAIT响应。发生错误时,设备发出FAULT响应。
在协议执行过程中,可能会出现协议错误,设备将不返回任何数据且不会驱动总线。当设备进入协议错误状态时,设备的行为和主机的响应也会有所不同。如果启用了超时检测功能,需要等待数据传输阶段结束才能进入协议错误状态。
SWD协议还支持写入数据缓存功能,调试端口可以缓存写入操作,以处理多个事务。当写入操作被接受后,可能会被丢弃,此时CTRL/STAT寄存器中的WDATAERR标志会被置位。
设备对于AP事务和DP事务的响应也有所区别。DP事务的访问取决于所要访问的寄存器,而AP事务的访问则取决于访问的寄存器和设备的当前状态。
最后,SWD接口使用串行同步接口,包含一个双向数据信号和一个时钟信号。物理SWD接口由双向数据引脚(SWDIO)和时钟引脚(SWCLK)组成。总线接口要求设备在SWCLK的上升沿采样数据,并在SWCLK的上升沿改变驱动状态。接口需要能够接受因为失去同步而带来的短时间竞争现象,并且时钟信号不需要与任何系统时钟同步。
为了确保在进行热插拔时不会造成意外的串行连接,需要使用线路重置序列。SWD接口并不包含复位信号线,通过将数据信号线保持高电平,持续至少50个周期,随后保持至少两个的空闲周期,即可实现线路复位。首次连接到设备时,需要进行线路重置,发生协议错误后可能也需要进行线路重置。
在进行完线路重置后,设备会进入复位状态,此时只有部分传输操作有效。在复位状态下,只有在立即对TARGETSEL寄存器进行写入才能选中或取消选中设备。如果主机在尝试读取DPIDR寄存器时没有收到预期的响应,那么主机应当再次尝试进行线路重置。