ARM cortex-M4 DAP 访问 方法总结


cortex-M debug 的实现都是 coresight
cortex-M4 属于 cortex-M 
cortex-M4/M1 都只有一种DP(虽然可实现为多种,但是一旦实现,就只有一种DP) 和一个AP(可实现就为一种,为AHB-AP)
  • 对于 JTAG-DP 寄存器的访问
1. 走 IR 链, 选中 DPACC				  // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P146
2. 走 DR 链, 读写 DPACC 下的某个 寄存器 // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P185
  • 在 JTAG-DP 存在的情况下,对 AHB-AP寄存器的访问
1. 走 IR 链,选中APACC				 // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P146
2. 走 DR 链, 写 DPACC 下的 "AP Select Register" 选中 某个AP的某个BANK // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P185
// 此时已经选中 某个AP的某个BANK,假设步骤2 TDI 为0x04,则选中了 AHB-AP 的bank0
// 一个bank中有四个寄存器,用 两个(A[3:2]) 二进制位寻址
// 系统中只有一个DPACC,DPACC只有一个bank
// 系统中有m个  APACC,APACC有n个bank
// 所以对于 DPACC, 选中DPACC就选中了 唯一的bank
// 所以对于 APACC, 选中m和n才选中 唯一的bank
3. 走 IR链, 选中 APACC				 // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P146
4. 走 DR链, 读写 APACC 下的某个 寄存器 // 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P201

IR寄存器的 TDI

同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P146

0b1000 ABORT
0b1010 DPACC
0b1011 APACC
0b1110 IDCODE
0b1111 BYPASS 

DPACC/APCCC寄存器的TDI

TDI[0]
	0 : write
	1 : read
TDI[2:1]
	对于 DPACC(唯一的bank) : 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P185
		00 : reserved
		01 : DP Control/Status Register
		10 : Select Register
		11 : Read Buffer
	对于 APACC(AHB-AP的bank0) : 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P201
		00 : Control/Status Word, CSW
		01 : Transfer Address, TAR
		10 : reserved
		11 : Data Read/Write, DRW
	对于 APACC(AHB-AP的bank1) : 同级寄存器列表在 DDI0413C_cortexm1_r0p1_trm.pdf 的 P201
		00 : BD0
		01 : BD1
		10 : BD2
		11 : BD3
	对于 APACC(MEM-AP的bank0) : 
		00 : ...
		01 : ...
		10 : ...
		11 : ...
TDI[34:3]
	对于write,标识写入数据
	对于read, ignore

Guess you like

Origin blog.csdn.net/u011011827/article/details/121192181