kingsabbit 发表于 2012-9-23 01:37:53

ARM调试接口SWD(Serial Wire Debug) 协议分析

本帖最后由 kingsabbit 于 2012-9-23 01:58 编辑

曾发贴分析孕龙的JTAG解码插件存在BUG,误导走了弯路,今天再来分析一下ARM芯片调试接口JTAG外的一个接线比较简单的接口SWD(Serial Wire Debug) 接口的协议格式

ARM官方的文献资料:



关于SWD时序的说明:


协议包中的校验Parity的说明:


ACK握手包不需要校验的说明:


SWD协议中信号说明





写操作成功时序


读操作成功


读写过程中等待响应


读写过程中出现故障


协议错误时序


连接线复位时序


OK握手说明


WAIT等待请求


FAULT请求


Sticky overrun behavior


再来分析从ULINK获取得到的结果

由JTAG切换到SWD协议通信需要发送如下格式的数据包


读ID的过程
官方资料提到的读ID的文献
attach://53544.pdf



拆解该数据包时序如下:
封包请求(10100101) host to target

ACK请求(100) target to host

数据传输读时序 target to host
32位ID: 2BA01477

最后别忘了校验包
读数据传输中的校验位



同样从swd协协议切换到JTAG通信需要发送如下格式的数据包



最后,需要说明一点:
1.插图是为了分析方便,所以用了SPI,实际中由于要在SWDIO中实现双向的数据传输的,所以不是简单的SPI读写就可完成,只是为了分析方面看到数据,所以特意用了SPI解释8字节的数据
2.写过程中SWDIO是输出的,读过程中SWDIO是输入的,ACK回应期间SWDIO也是输入的
3.上述插图是为了分析方便特意拉开了数据包的距离,如8位+3位+32位+1位校验位,但截取ZLG的CK100读LPC1114 ID的时候,整过数据传输过种是没有中间分隔的,即一次性完成44位的传输操作








kingsabbit 发表于 2012-9-23 02:06:14

截图加入网页比较小,再来一份打印后的PDF方便阅读



whatcanitbe 发表于 2012-9-23 08:18:52

谢谢,这是 我一直想干 却 没干的事情。

zhifeng 发表于 2012-9-23 08:33:03

很好,留名占位

niba 发表于 2012-9-23 08:52:48

会英文的好处呀。。

McuPlayer 发表于 2012-9-23 15:32:25

果断收藏,有空的时候仔细瞅瞅

bbandpp 发表于 2012-9-23 15:50:51

好东西啊,可以做手持下载器了

catch2000 发表于 2012-9-24 17:00:24

SWD用来调试,
确实是方便很多。

laber_1912 发表于 2012-10-6 22:10:10

{:lol:},可以字节DIY调试器了

idlyhui 发表于 2012-10-8 23:29:52

DIY调试器,MARK

idlyhui 发表于 2012-10-8 23:49:05

手册下不了,怎么回事》》?

idlyhui 发表于 2012-10-9 00:03:56

可否把上面的三份资料发到下面邮箱:yannami@126.com

lazyfans 发表于 2013-8-6 22:57:18

看到SWD(Serial Wire Debug) 原以为是一根线,实际使用起来还是要三根线

xiefy21 发表于 2013-8-11 13:04:15

mark......
顶一个...{:lol:}

mojiaj 发表于 2013-10-29 09:32:57

刚好想研究这个方面的东西,收了,谢谢~

hanshiruo 发表于 2013-10-29 09:41:53

好,谢谢

wmdng 发表于 2013-10-29 10:06:40

好, 记录一下.

wkong501 发表于 2013-11-22 12:17:33

赞美楼主的无私{:biggrin:}

jzb8736 发表于 2013-11-22 12:25:32

顶!            

wxxujian 发表于 2013-11-25 09:48:19

好帖子,顶

wkong501 发表于 2013-12-16 17:55:41

我也来分享一下笔记
3.如何进入SWD状态
Before using the SW-DP an initialization sequence must be performed to establish communication and
bring the SW-DP to a known state.
1. Perform a line resest
2. Send the JTAG-to-SWD switching sequence
3. Perform a line reset
4. Read the IDCODE register

lsr0304 发表于 2013-12-16 18:17:57

mark!多谢分享,学习ing

loveskangaroo 发表于 2013-12-16 22:59:36

mark,多谢分享。

wkong501 发表于 2013-12-19 11:51:56

我遇到一个疑问, 在访问芯片内部寄存器时候, AP寄存器组中已经有了一个TAR寄存器用于存放目标寄存器地址, 有个DRW用来存放将要写入或读出寄存器的值, 那么为什么还需要用BD0~BD3寄存器?

qigf 发表于 2013-12-30 13:36:12

正需要,谢谢楼主

LeoJun0614 发表于 2013-12-30 15:41:47

谢谢 楼主

wangpengcheng 发表于 2014-3-2 15:00:51

有没有做好的手持脱机下载器呀?我需要二三十个!

ybx520 发表于 2014-4-20 10:12:20

mark                        

imliyucai 发表于 2014-7-3 11:47:05

不错。下载来慢慢学习。

uzufk 发表于 2014-7-18 16:48:09

好东西,下来好好研究一下!{:victory:}

czdavid 发表于 2014-7-18 17:06:35

mark.......

cwei 发表于 2014-8-29 09:11:14

好东西,下来看看

ordinary 发表于 2014-9-9 22:02:00

SWD协议,谢谢分享

gy54321 发表于 2014-10-9 00:59:15

SWD协议,谢谢分享

N_EMBED 发表于 2014-10-9 09:49:32

一直用JTAG调试模式的路过看看。

yangxx 发表于 2014-10-9 19:21:18

Mark之                                          

MetalSeed 发表于 2014-10-9 19:50:11

太棒了赞一个

ljy99731 发表于 2014-10-9 20:04:38

感谢分享!

wali188 发表于 2014-11-7 12:10:02

感谢感谢

yiyamala 发表于 2014-11-7 12:27:34

是挺难的呀

haoyurenzhu 发表于 2014-11-7 12:30:11

顶顶。。

jiangkehong 发表于 2014-11-13 07:56:29

很好的资料,感谢分享

liuguo0530 发表于 2014-11-14 15:02:50

谢谢,真的不错,很需要!{:handshake:}

Zigbee2012 发表于 2014-12-22 14:30:36

ARM调试接口SWD协议分析,ARM官方文档 备用

hygbeyond 发表于 2015-1-2 23:02:58

有时间研究一下

tangbo_designer 发表于 2015-1-4 17:38:06

很有必要研究一下。

xiaolong_ba 发表于 2015-3-24 20:56:14

{:lol:}自已看英文文档看不是太明白现在清晰了很多

hanshiruo 发表于 2015-4-3 21:06:52

好..........

tgwfcc 发表于 2015-8-25 16:35:33

没有过程和代码呢?

BigWolf 发表于 2015-8-30 11:09:03

占楼收藏,英文资料值得啃。

shpan_111 发表于 2015-8-30 21:53:28

收藏,谢谢分享

heqiaosheng 发表于 2015-10-9 17:32:56

MARK!感谢分享

ddcour 发表于 2015-12-5 15:21:54

SWD协议,谢谢分享!!!

sklli 发表于 2016-3-3 14:09:32

封包请求,ACK 请求, 数据包格式截图很好。 要是能够在详细解释下如何debug的就更好了

x271818587 发表于 2018-4-26 22:13:26

厉害了,学习学习!

largolun 发表于 2018-10-18 10:53:25

厉害了,谢谢分享!

TKZXJ 发表于 2018-12-14 12:54:00

谢谢分享

爱晴海玩偶 发表于 2020-10-8 15:35:30

最近要搞,找到老贴,还是很有用

cnxh 发表于 2020-10-8 20:41:24

为什么arm的jtag口都用20脚的牛角,是电流太大,需要多点的电源脚吗,10脚不行吗,上次我把20脚转接成10脚牛角也可以用

BS_good200xy 发表于 2021-7-10 19:29:12

也想好好看看!
页: [1]
查看完整版本: ARM调试接口SWD(Serial Wire Debug) 协议分析