首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
1
篇与
的结果
2025-07-17
SWD协议通信的简单总结(2022-08-05)
对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-0b001TAR_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,表示FAULTACK[0:2]==010,表示WAITACK[0:2]==100,表示OK response3)数据由32bit有效数据 + 1bit数据的奇偶校验位组成chip连接1.获取芯片IDSWD协议的操作步骤: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:0xF3)读取IDR寄存器(addr = 0xFC)的数据并验证4)SELECT寄存器写入的数据为0x00000000,bank:0x05)CSW寄存器写入0x00000002,data_size:32bit注意:1、CTRL/STAT寄存器:CSYSPWRUPREQ:System powerup requestCDBGPWRUPREQ:Debug powerup request2、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只需要写一次即可写进去。有道云笔记2022-08-05 15:08:26
2025年07月17日
3 阅读
0 评论
0 点赞