对SWD协议做一个简单的总结

SWD协议

1.SWD协议框图


SWD协议可以配置单片机内部几乎所有的寄存器。整个SWD过程是分级进行的,时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先HOST对SW-DP进行操作,确定AP寄存器的参数,达到对Cortex Memory Map进行操作。
Debug Access Port(DAP)由两部分组成:
Debug Port(DP)
Memory Access Port(MEM-AP)(AP)

2.DAP寄存器

  1. 1、DP寄存器


IDCODE:识别码寄存器,用于识别SW-DP。ID:0x0BB11477(M0)
ABORT:中止寄存器,强制AP事务中止。在通信中,若发生粘性错 误位置1(ack = 4)。将0b1写入ABORT中,会生成一个DAP中止使当前AP事务中止。
CTRL_STAT_W/R:控制状态寄存器,用于控制和获取有关DP的状态信息。
SELECT:AHB-AP选择寄存器,选择要访问的端口(AP)和AP中的bank地址和DP的bank地址。
RDBUFF:读缓冲寄存器,在SW-DP上,RDBUFF显示了在上一次AP读取期间捕获的数据,允许重复返回值而不生成新的AP访问。

  1. 2、AP寄存器


CSW_W:控制/状态字寄存器,CSW配置和控制通过MEM-AP访问连接的内存系统。size:32bit-0b010;16bit-0b001
TAR_W:传送地址寄存器,TAR保存要通过AP访问的内存地址。
DRW_W/R:数据读/写寄存器,DRW将AP访问中传递的值直接映射到TAR中指定的地址的一个或多个内存访问。
IDR:识别寄存器,IDR标识访问的端口

  1. 3.读/写时序及命令

1、SWD时序

1)成功的写时序 (烧录器往DP或MEM-AP寄存器的写操作)

2)成功的读时序 (指烧录器读取DP或MEM-AP寄存器的数据)

3)DAP没准备好,响应WAIT给HOST,此次通讯结束

4)DAP出错,响应FAULT给HOST,此次通讯结束

2、SWD命令详情

1)主机 HOST 发出的请求由 8bit 组成

Bit0:Start,固定为 1。
Bit1:APnDP,0表示访问 DP 寄存器,1 表示访问 MEM-AP 寄存器。
Bit2:RnW,0表示写请求,1表示读请求。
Bit[4:3]:地址值A[3:2],存放DP/AP寄存器的地址。
Bit5:Parity,用于表示由{APnDP,RnW, A[2:3]}组成这四位数的奇偶总个数。
Bit6:Stop,固定为0。
Bit7:Park,固定为1。

2)Target返回的ACK值由3bit组成
ACK[0:2]==001,表示FAULT
ACK[0:2]==010,表示WAIT
ACK[0:2]==100,表示OK response

3)数据由32bit有效数据 + 1bit数据的奇偶校验位组成

chip连接

1.获取芯片ID

SWD协议的操作步骤:
1、SWD初始化步骤:
a)初始化IO口,SWCLK和SWIO设置为输出模式,保持SWDIO=1,保证Host连续发送至少50个“1”,使得Target进行Line Reset。

b)发送JTAG to SWD命令,0x79、0xE7两个byte(在ARM-Debug_Interface官方文档中可以查到),随后再发送一次line reset操作。

c)至少发送两个Idle信号,保持SWDIO=0。
d)读取Chip ID,从而完成SWD初始化操作。此时只能访问DP寄存器组,AP寄存器组还无法访问。
2、解锁AP
步骤如下:
1)CTRL/STAT寄存器写入0x50000000 (第28位和第30位),开启debug port及其时钟
2)SELECT寄存器写入的数据为0x000000F0,bank:0xF
3)读取IDR寄存器(addr = 0xFC)的数据并验证
4)SELECT寄存器写入的数据为0x00000000,bank:0x0
5)CSW寄存器写入0x00000002,data_size:32bit
注意:
1、CTRL/STAT寄存器:

CSYSPWRUPREQ:System powerup request
CDBGPWRUPREQ:Debug powerup request
2、SELECT寄存器:

APSEL=0X00表示AHB访问;APBANKSEL:选择当前AP的bank地址。
3、读取IDR寄存器的数值时,需要两次,第一次是dummy read,第二次读取到的才是正确的数据。(第二次也可以读RDBUFF寄存器)
4、CSW寄存器:

Size:访问MEM-AP的数据类型的大小
其中:寄存器的数据是32bit–0b010,编程写入Flash的数据是16bit–0b001。

2.读/写操作

如果想要写入/读出MCU内部Flash的数值,需要用到两个AP寄存器:TAR(The Transfer Address Register)和DRW(The Data Read/Write Register)。

  1. 1、写操作

1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)
2)在DRW_W寄存器中写入要往内存中写入的数据 (data = 0x12345678)

  1. 2、读操作

1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)
2)从DRW_R寄存器中读取要访问的内存中存放的数据
3)从RDBUFF寄存器(DP)中读取数据/从DRW_R寄存器(AP)中读取数据

注意:
由于读取AP寄存器的特殊性,当读取AP寄存器时,返回的数据是上一次传输的值。也就是说,有两种方式可以得到正确的 AP 寄存器的值。
发送两次读DRW寄存器的操作
发送一次读DRW寄存器的操作(读取上一周期的数据),再发送一次读RDBUFF寄存器的操作(读取自己需要的数据)
总的来说,读写DP寄存器没有迟滞,不需要读写两次。读取AP寄存器,有迟滞,第一次读AP,是上一周期的值,第二次读AP才是想要的值。写AP寄存器,没有迟滞。如TAR,DRW只需要写一次即可写进去。

SWD协议通信的简单总结相关推荐

  1. 调试备忘录-SWD协议解析

    目录--点击可快速直达 目录 写在前面 1  SWD协议简介 2  SWD物理层协议解析 2.1  SWD通信时序分析 2.2  SWD 寄存器简介 2.2.1  DP寄存器 2.2.2  AP寄存器 ...

  2. Flex与.NET互操作(十四):FluorineFx的AMF协议通信

    AMF(Action Message Format)在开发Flash/Flex应用中使用频率是非常高的,相对普通的HTTP.WebService的SOAP等多种数据通信方式的效率更高,有人曾经做过这方 ...

  3. Openflow协议通信流程解读

    前言 接触了这么久的SDN,Openflow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解.现在有时间了,就写一写自己对Openflow协议通信流程的一些理解. SDN中Switch ...

  4. udp协议服务器客户端流程图,UDP 协议通信服务器端客户端.doc

    UDP 协议通信服务器端客户端 UDP 协议进行通信 --服务器端 UDP程序实例的基本使用情况和使用方法 这个系统由服务器程序udps和客户及程序udpc两个程序组成,如果从客户机出入一个特定命令, ...

  5. 基于tcp的协议需要设计数据校验码吗_C#与宇电温控表自定义协议通信实例

    通信协议是做上位机开发经常会听到的一个词.无论是单片机开发常用的串口通信协议,还是上位机开发常用的TCP/IP通信协议,以及网络通信常用的Http协议,可以这么说,通信协议无处不在.[公众号dotNe ...

  6. android spp协议,Android蓝牙开发SPP协议通信

    最近项目中使用到蓝牙SPP协议通信,然后在网上看了很多资料,进行学习使用,为了加深印象,做个简单的整理. 1.使用蓝牙权限< uses-permission android:name=" ...

  7. C#与宇电温控表自定义协议通信实例

    通信协议是做上位机开发经常会听到的一个词.无论是单片机开发常用的串口通信协议,还是上位机开发常用的TCP/IP通信协议,以及网络通信常用的Http协议,可以这么说,通信协议无处不在.[公众号dotNe ...

  8. 解析SWD协议,烧写程序

    以下我的模拟SWD接口的板子简称为Host,目标MCU(即我要连接的板子)简称为Target. SWD协议          故名思议,串行总线调试接口.我们需要3根线与目标MCU相连,SWDIO,S ...

  9. 3.2-上位机与下位机的“私有协议”通信构架设计

    一.前言 在上一章中已经介绍了协议设计和封包设计.那么怎样把这些设计优美的落实为代码的形式呢.使用几个函数就可以实现,但是不够优美和实用,因此本章主要介绍一个协议层构架.使用构架的优点如下: 所有协议 ...

最新文章

  1. idea配置 Tomcat Deployment添加时没有Artifact...选择的解决方案
  2. windows下安装redis以及一些常规操作
  3. 【Linux 线程】常用线程函数复习《一》
  4. 可以下载Microsoft ISA Server 2006 试用版了,网管需要关注
  5. 图像处理与计算机视觉:基础,经典以及最近发展(1)序
  6. python125免费教程,125 个视频成就千万级网红,Python 告诉你李子柒都在拍些什么?...
  7. 平安人寿福利BUFF重磅推介 | 北京研发中心职位速递
  8. see rebel case 无法越狱_周星驰为什么不拍喜剧,王晶:年纪大了,无法面对自己...
  9. 一步步编写操作系统 78 intel汇编与ATT汇编语法区别
  10. ibm db2获取目标时间与当前时间的差值_【学术论文】高帧频视觉实时目标检测系统...
  11. 桌面计算机主流硬盘接口,M.2、U.2谁更好?主流硬盘接口大扫盲
  12. Julia: PostgreSQL数据库.......
  13. 计算机语言日语换成中文,win7系统怎么把语言变成日语
  14. c语言小球消砖块增加一行砖块,基于Unity的小球撞击砖块小游戏
  15. 政务OA协同办公系统,助力数字政府建设
  16. HBuilder配置浏览器
  17. 【python】 实现排列组合公式
  18. 【华人学者风采】杨义 悉尼科技大学
  19. 在线视频播放加速方法
  20. 小程序--语音合成tts 对接多平台(讯飞,思必驰,百度)

热门文章

  1. 【4】牛客网BC3 有容乃大
  2. 辩护律师和会见律师_我是律师 现在我是一名数据工程师。 这是我的故事。
  3. 打篮球,听摇滚,敲键盘也能是人生赢家。程序员访谈(三)
  4. 如何在Windows下发布QT应用程序?
  5. 满多少算积分 java_海量用户积分排名算法探讨
  6. Apk脱壳圣战之---脱掉 360加固 的壳
  7. 用HTML5制作精美战机游戏
  8. Windows下虚拟磁盘创建、附加、分离
  9. BeanUtils getProperty的一个坑
  10. 解读阿里Q2财报:阿里云的跨周期引擎