SWD协议通信的简单总结
对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、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访问。
- 2、AP寄存器
CSW_W:控制/状态字寄存器,CSW配置和控制通过MEM-AP访问连接的内存系统。size:32bit-0b010;16bit-0b001
TAR_W:传送地址寄存器,TAR保存要通过AP访问的内存地址。
DRW_W/R:数据读/写寄存器,DRW将AP访问中传递的值直接映射到TAR中指定的地址的一个或多个内存访问。
IDR:识别寄存器,IDR标识访问的端口
- 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)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)
2)在DRW_W寄存器中写入要往内存中写入的数据 (data = 0x12345678)
- 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协议通信的简单总结相关推荐
- 调试备忘录-SWD协议解析
目录--点击可快速直达 目录 写在前面 1 SWD协议简介 2 SWD物理层协议解析 2.1 SWD通信时序分析 2.2 SWD 寄存器简介 2.2.1 DP寄存器 2.2.2 AP寄存器 ...
- Flex与.NET互操作(十四):FluorineFx的AMF协议通信
AMF(Action Message Format)在开发Flash/Flex应用中使用频率是非常高的,相对普通的HTTP.WebService的SOAP等多种数据通信方式的效率更高,有人曾经做过这方 ...
- Openflow协议通信流程解读
前言 接触了这么久的SDN,Openflow协议前前后后也读过好多遍,但是一直没有时间总结一下自己的一些见解.现在有时间了,就写一写自己对Openflow协议通信流程的一些理解. SDN中Switch ...
- udp协议服务器客户端流程图,UDP 协议通信服务器端客户端.doc
UDP 协议通信服务器端客户端 UDP 协议进行通信 --服务器端 UDP程序实例的基本使用情况和使用方法 这个系统由服务器程序udps和客户及程序udpc两个程序组成,如果从客户机出入一个特定命令, ...
- 基于tcp的协议需要设计数据校验码吗_C#与宇电温控表自定义协议通信实例
通信协议是做上位机开发经常会听到的一个词.无论是单片机开发常用的串口通信协议,还是上位机开发常用的TCP/IP通信协议,以及网络通信常用的Http协议,可以这么说,通信协议无处不在.[公众号dotNe ...
- android spp协议,Android蓝牙开发SPP协议通信
最近项目中使用到蓝牙SPP协议通信,然后在网上看了很多资料,进行学习使用,为了加深印象,做个简单的整理. 1.使用蓝牙权限< uses-permission android:name=" ...
- C#与宇电温控表自定义协议通信实例
通信协议是做上位机开发经常会听到的一个词.无论是单片机开发常用的串口通信协议,还是上位机开发常用的TCP/IP通信协议,以及网络通信常用的Http协议,可以这么说,通信协议无处不在.[公众号dotNe ...
- 解析SWD协议,烧写程序
以下我的模拟SWD接口的板子简称为Host,目标MCU(即我要连接的板子)简称为Target. SWD协议 故名思议,串行总线调试接口.我们需要3根线与目标MCU相连,SWDIO,S ...
- 3.2-上位机与下位机的“私有协议”通信构架设计
一.前言 在上一章中已经介绍了协议设计和封包设计.那么怎样把这些设计优美的落实为代码的形式呢.使用几个函数就可以实现,但是不够优美和实用,因此本章主要介绍一个协议层构架.使用构架的优点如下: 所有协议 ...
最新文章
- idea配置 Tomcat Deployment添加时没有Artifact...选择的解决方案
- windows下安装redis以及一些常规操作
- 【Linux 线程】常用线程函数复习《一》
- 可以下载Microsoft ISA Server 2006 试用版了,网管需要关注
- 图像处理与计算机视觉:基础,经典以及最近发展(1)序
- python125免费教程,125 个视频成就千万级网红,Python 告诉你李子柒都在拍些什么?...
- 平安人寿福利BUFF重磅推介 | 北京研发中心职位速递
- see rebel case 无法越狱_周星驰为什么不拍喜剧,王晶:年纪大了,无法面对自己...
- 一步步编写操作系统 78 intel汇编与ATT汇编语法区别
- ibm db2获取目标时间与当前时间的差值_【学术论文】高帧频视觉实时目标检测系统...
- 桌面计算机主流硬盘接口,M.2、U.2谁更好?主流硬盘接口大扫盲
- Julia: PostgreSQL数据库.......
- 计算机语言日语换成中文,win7系统怎么把语言变成日语
- c语言小球消砖块增加一行砖块,基于Unity的小球撞击砖块小游戏
- 政务OA协同办公系统,助力数字政府建设
- HBuilder配置浏览器
- 【python】 实现排列组合公式
- 【华人学者风采】杨义 悉尼科技大学
- 在线视频播放加速方法
- 小程序--语音合成tts 对接多平台(讯飞,思必驰,百度)