SW协议DAPLINK资料篇2

Posted:   2021-03-15

Status:   Completed

Tags :   STM32 DAPLINK SW协议

Categories :   STM32 DAPLINK SW协议

Previous:   DAPLINK资料篇1

Next:   Makefile简记


SW协议序列

主机请求包(8 bits)

比特位 名称 描述
0 起始 必须为1
1 APnDP 0: 访问DP 1: 访问AP
2 RnW 0: 写请求 1: 读请求
4:3 A(3:2) DP或AP寄存器的地址
5 Parity 前面比特位的检验位
6 Stop 0
7 Park 不能由主机驱动,由于有上拉,目标永远读1
  • 包请求后总是跟一个(默认为1位)转换时间,此时主机和目标都不驱动线路

目标发送确认相应(3 bits)

比特位 名称 描述
0..2 ACK 001:失败 010:等待 100:成功
  • 当ACK为失败或等待,或者是一个回复读操作的ACK,此ACK后有一个转换时间

传输数据(33 bits)

比特位 名称 描述
0..31 WDATA/RDATA 写或读的数据
32 Parity 32位数据的奇偶校验位
  • 读操作的数据传输操作后有一个转换时间

SW-DP寄存器

A(3:2) 读/写 SELECT 寄存器的CTRLSEL位 寄存器 描述
00   ID代码寄存器, IDCODE  
00   中止寄存器, ABORT  
01 读/写 0 DP控制/状态寄存器, CTRL/STAT - 请求一个系统或调试的上电操作
- 配置AP访问的操作模式
- 控制比较,校验操作
- 读取一些状态位(溢出,上电响应)
01 读/写 1 线控制寄存器, WCR 配置串行通信物理层协议(如转换时间长度等)
10   读再发寄存器, RESEND 允许从一个错误的调试传输中恢复数据而不用重复最初的AP传输
10   AP 选择寄存器, SELECT 选择当前的访问端口和有效的4字长寄存器窗口
11   读缓冲,RDBUFF 由于AP的访问具有传递性(当前AP读操作的结果会在下次AP传输时传出), 因此这个寄存器非常必要。这个寄存器会从AP捕获上一次读操作的数据结果,因此可以获得数据而不必再启动一个新的AP传输

中止寄存器ABORT

比特位 功能 描述
31:5 - 保留, SBZ
4 ORUNERRCLR 向该位写 1,将STICKYORUN 溢出错误标志清零
3 WDERRCLR 向该位写 1,将WDATAERR 写数据错误标志清零
2 STKERRCLR 向该位写 1,将STICKYERR sticky 错误标志清零
1 STKCMPCLR 向该位写 1,将STICKYCMP sticky 比较标志清零
0 DAPABORT 向该位写1 来产生DAP 中止。它将中止当前的AP 处理。该操作只有当处理器在扩展周期上接收到WAIT 响应时才执行

ID代码寄存器IDCODE

比特位 功能 描述
31:28 Version 版本代码。该区域的含义由实现定义
27:12 PARTNO DP 的元件型号。该值由调试端口的设计人员提供,并且不可以改变
11:1 MANUFACTURER JEDEC 厂商ID,这个11 位的JEDEC 代码用来标识器件的厂商, 见JEDEC 厂商ID
0 - 始终为0b1

JEDEC 厂商ID

JEP-106 区域 ARM 公司注册的值
扩展代码 4位,11:8 b0100,0x4
标识代码 7位,7:1 b0111011,0x3B

控制/状态寄存器CTRL/STAT

访问 功能 描述
31 RO CSYSPWRUPACK 系统掉电确认
30 R/W CSYSPWRUPREQ 系统上电请求
复位之后,该位为低电平(0)
29 RO CDBGPWRUPACK 调试上电确认
28 R/W CDBGPWRUPREQ 调试上电请求
复位之后,该位为低电平(0)
27 RO CDBGRSTACK 调试复位确认
26 R/W CDBGRSTREQ 调试复位请求
复位之后,该位为低电平(0)
25:24 - - 保留,RAZ/SBZP
21:12 R/W TRNCNT 处理计数器
复位之后,该区域的值不可预知
11:8 R/W MASKLANE 表示推动比较和推动验证操作中被屏蔽的字节。见推动比较和推动验证操作的MASKLANE 和位屏蔽部分。
复位之后,该区域的值不可预知
7 RO WDATAERR 如果出现写数据错误,该位置位。它在以下情况下置位:
- 写操作的数据阶段出现数据帧的奇偶校验错误
- 已经被 DP 接受的写操作然后在没有提交给AP 的情况下放弃。
该位可通过向中止寄存器的WDERRCLR写1 来清零。见中止寄存器,ABORT
复位之后,该位为低电平(0)。
6 RO READOK 如果前面的 AP 或RDBUFF 得到OK 响应,则该位置位。如果不是OK 响应,该位清零。该标志始终表示对上一次 AP 读访问的响应。
复位之后,该位为低电平(0)
5 RO STICKYERR 如果AP 处理返回一个错误,则该位置位。为了将其清零:
在 JTAG-DP 上:向该寄存器的这个位写1。
在 SW-DP 上: 向中止寄存器的STKERRCLR 写1,见中止寄存器,ABORT。
复位之后,该位为低电平(0)
4 RO STICKYCMP 如果推动比较或推动验证操作时出现相等的情况,该位置位。为了将其清零:
在 JTAG-DP 上:向该寄存器的这个位写1。
在 SW-DP 上: 向中止寄存器的STKCMPCLR 写1,见中止寄存器,ABORT。
复位之后,该位为低电平(0)
3:2 R/W TRNMODE 该区域用来设置AP 操作的传输模式,见传输模式(TRNMODE)
复位之后,该位为低电平(0)
1 RO STICKYORUN 如果溢出检测使能(见该寄存器的位0),则在出现溢出时该位置位。为了将其清零:
在 JTAG-DP 上:向该寄存器的这个位写1。
在 SW-DP 上: 向中止寄存器的ORUNERRCLR 写1,见中止寄存器,ABORT。
复位之后,该位为低电平(0)
0 R/W ORUNDETECT 该位设为1 来使能溢出检测。
复位之后,该位为低电平(0)

推动比较和推动验证操作的MASKLANE 和位屏蔽

MASKLANE 含义 用于比较操作的屏蔽结果
b1xxx 比较中包含字节通道3 0xFF- - - - - -
bx1xx 比较中包含字节通道2 0x- - FF- - - -
bxx1x 比较中包含字节通道1 0x- - - - FF- -
bxxx1 比较中包含字节通道0 0x- - - - - - FF

传输模式(TRNMODE,位[3:2])

TRNMODE AP 传输模式
b00 常规操作
b01 推动验证操作
b10 推动比较操作
b11 保留

AP 选择寄存器SELECT

功能 描述
31:24 APSEL 选择当前AP
该区域的复位值不可预知
23:8 - 保留,SBZ/RAZ
7:4 APBANKSEL 在当前的AP 上选择有效的4 字寄存器窗口。
该区域的复位值不可预知
3:1 - 保留,SBZ/RAZ
0 CTRLSEL SW-DP 调试端口的地址组选择,见CTRL/STAT,只用于SW-DP。
复位之后,该位为 b0。AP 选择寄存器是只写的,因此,不能读出这个值

CTRLSEL,只用于SW-DP

CTRLSEL 地址 b01 的DP 寄存器
0 CTRL/STAT,见控制/状态寄存器,CTRL/STAT
1 WCR,见线控制寄存器,WCR(只用于SW-DP)

读缓冲RDBUFF

  • JTAG-DP 当指令寄存器(IR)含有DPACC 时,读缓冲寄存器位于地址0xC,读操作时结果为0,写操作忽略(RAZ/WI)
  • SW-DP 当DPnAP 位为1 时,读缓冲寄存器在读操作上位于地址0b11,并且为只读寄存器。对读缓冲的访问不受到SELECT 寄存器的CTRLSEL 位的影响

线控制寄存器WCR(只用于SW-DP)

功能 描述
31:10 - 保留,SBZ/RAZ
9:8 TURNROUND 掉转三态周期,见掉转三态周期,TURNROUND
复位之后,该区域为 b00
7:6 WIREMODE 表示与DP 相连的串行线的操作模式。见线操作模式,WIREMODE
复位之后,该区域为 b01
5:3 - 保留,SBZ/RAZ
2:0 PRESCALER 保留,SBZ/RAZ

掉转三态周期,TURNROUND

TURNROUND 掉转周期
b00 1 个采样周期
b01 2 个采样周期
b10 3 个采样周期
b11 4 个采样周期

线操作模式,WIREMODE

WIREMODE 线操作模式
b00 保留
b01 同步(无过采样(oversampling))
b1x 保留

读再发寄存器RESEND(只用于SW-DP)

  • 所有 SW-DP 实现上都始终具有读再发寄存器。其用途是在无需重复原来的AP 传输的情况下,使读数据能够从被破坏的调试器传输中恢复。
  • 它是一个 32 位只读寄存器,读操作时位于地址0b10。对读再发寄存器的访问不受到SELECT 寄存器中的CTRLSEL 位的影响。
  • 对 RESEND 寄存器执行读操作并没有从AP 中捕获到新的数据。它返回一个值,该值是上次AP 读或DP RDBUFF 读返回的值。
  • 对RESEND 寄存器执行读操作使读数据能够从被破坏的传输中恢复,而无需再次发送原来的读请求或产生新的DAP 或系统级访问。
  • RESEND 寄存器能够执行多次访问。在向DP RDBUFF 寄存器或AP 寄存器执行一次新的访问之前,它始终返回相同的值。