ARM cortex-M4 jtag 读取 dp 和 ap 寄存器 实例 解读

发布者:以泉换泉最新更新时间:2022-09-29 来源: csdn关键字:ARM  cortex-M4  jtag  寄存器 手机看文章 扫描二维码
随时随地手机看文章

https://www.linmingjie.cn/index.php/archives/253/

DDI0413C_cortexm1_r0p1_trm.pdf // https://developer.arm.com/documentation/ddi0413/c/Babeagge

stm32f407zg 开发板 // 随意一个 这样的卡发版即可

dsview 套装(逻辑分析仪)

jlink for windows 软件

jlink (usb转jtag)


因为 没有合适的资料,所以选取了 m1 的 trm 

DDI0413C_cortexm1_r0p1_trm 中 有详细的 DAP 描述


读者可以 以 cortex-M1 开发板 为基准做资料


实验重点

在 Jlink.exe 命令行中 运行 https://www.linmingjie.cn/index.php/archives/253/ 中的 三条命令

writedp 2 0 

writeap 1 20000000

readap 3  

并 抓 jtag 时序(非swd),并加以解析


# 写DP,选AP[0] Bank[0]                                           

J-Link>writedp 2 0                                              

Writing DP register 2 = 0x00000000 (0 write repetitions needed) 

# 写AP[0] BANK[0] Address寄存器

J-Link>writeap 1 20000000                                       

Writing AP register 1 = 0x20000000 (0 write repetitions needed) 

# 读操作代表读memory, 可以看到结果已经变化

J-Link>readap 3                                                 

Reading AP register 3 = 0x12345678 (0 read repetitions needed)  


1. 准备工作 环境搭建 和 建立软件链接

安装 jlink for windows

连接物理设备

建立软件链接


SEGGER J-Link Commander V7.22b (Compiled Jun 17 2021 17:23:58)

DLL version V7.22b, compiled Jun 17 2021 17:22:49


Connecting to J-Link via USB...O.K.

Firmware: J-Link V9 compiled May  7 2021 16:26:12

Hardware version: V9.20

S/N: -1

VTref=3.285V


Type "connect" to establish a target connection, '?' for help

J-Link>connect

Please specify device / core. : STM32F407VG

Type '?' for selection dialog

Device>

Please specify target interface:

  J) JTAG (Default)

  S) SWD

  T) cJTAG

TIF>

Device position in JTAG chain (IRPre,DRPre) : -1,-1 => Auto-detect

JTAGConf>

Specify target interface speed [kHz]. : 4000 kHz

Speed>

Device "STM32F407VG" selected.


Connecting to target via JTAG

InitTarget() start

Can not attach to CPU. Trying connect under reset.

InitTarget() end

TotalIRLen = 9, IRPrint = 0x0011

JTAG chain detection found 2 devices:

 #0 Id: 0x4BA00477, IRLen: 04, CoreSight JTAG-DP

 #1 Id: 0x06413041, IRLen: 05, STM32 Boundary Scan

DPv0 detected

Scanning AP map to find all available APs

AP[1]: Stopped AP scan as end of AP map has been reached

AP[0]: AHB-AP (IDR: 0x24770011)

Iterating through AP map to find AHB-AP to use

AP[0]: Core found

AP[0]: AHB-AP ROM base: 0xE00FF000

CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)

Found Cortex-M4 r0p1, Little endian.

FPUnit: 6 code (BP) slots and 2 literal slots

CoreSight components:

ROMTbl[0] @ E00FF000

ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7

ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT

ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB

ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM

ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU

ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM

Cortex-M4 identified.

J-Link>


写地址 20000000 为 12345678


读地址 20000000 , 以验证写入正确


实验开始

第1步

J-Link>writedp 2 0

Writing DP register 2 = 0x00000000 (0 write repetitions needed)

// 作用 : 选中 第0个AP中的第0个bank// 从0开始计数

// 参数分析

// writedp : 会产生 IR ,0b1010 , 选中 DPACC

// 2 : 选中 Select Register  // P151 In the case of a DPACC access, to read a debug port register, by the value shifted into A[3:2].

// 0 : 写入 Select Register 中的值(包括选择哪个AP和选择哪个bank)


jtag 时序


以 DDI0413C_cortexm1_r0p1_trm.pdf 分析 , 之后的 Pxx ,都是该书中的页码

分析

1. IR TDI 传入 0x1FA

P145 : On debug logic reset, IDCODE becomes the current instruction

所以,此时 必须 走 IR 链 选中 DPACC

传入 0b1010 (同时TDO 0b0001) 选中 DPACC // 但是 写入的是 9bit(0x1FA),高5位无效

2. DR TDI 传入  0x04

P149 : DPACC

P151 : RnW为0 ,表示写DATAIN[31:0]到某个寄存器 //If RnW is shifted in as 0, the request is to write the value in DATAIN[31:0] to the addressed register.

P151 : A[3:2]即TDI[2:1](值为0b10)选中寄存器P185 "AP Select Register", In the case of a DPACC access, to read a debug port register, by the value shifted into A[3:2].See JTAG-DP register map on page 9-53 for the addressing details

// 注意 : DP 只有一个,AP可以有多个

P185 : AP Select Register 的 Address[3:2] 为0b10

此时标志要 写 DATAIN[31:0]即 TDI[34:3]进入 AP Select Register. // 注意 : 此次TDI传输了36bit, 高1位无效

根据 P195 "AP Select Register" 的定义 , APSEL 为0 ,APBANKSEL为0 , 即第0个AP,第0个bank

注意 : M0 中只有一个 AP(即AHB-AP) , M4 也只有一个 AP(即AHB-AP) , APSEL 域 只能填入0


第2步

J-Link>writeap 1 20000000

Writing AP register 1 = 0x20000000 (0 write repetitions needed)

// 作用 : 之前已经选中"某AP的某bank",此时写入 20000000 到该bank 中的 第1(从0开始计数)个寄存器

// 参数分析

// writeap : 会产生 IR ,0b1011 , 选中 APACC

// 1 : 选中 Transfer Address Register  // P151 In the case of a APACC access, to read an access port register, by the combination of: the value shifted into A[3:2]

// 0 : 写入 Transfer Address Register 中的值(要读的地址)


jtag 时序


以 DDI0413C_cortexm1_r0p1_trm.pdf 分析 , 之后的 Pxx ,都是该书中的页码

分析

1. IR TDI 传入 0x1FB

之前已经选中APACC,而现在要操作 APACC 组的寄存器

所以,此时 必须 走 IR 链 选中 APACC

传入 0b1011 (同时TDO 0b0001) 选中 APACC // 但是 写入的是 9bit(0x1FB),高5位无效

2. DR TDI 传入 0x1 0000 0002 // LSB

P149 : APACC

P151 : RnW为0 ,表示写DATAIN[31:0]到某个寄存器 //If RnW is shifted in as 0, the request is to write the value in DATAIN[31:0] to the addressed register.

P151 : 

1. P151 : In the case of a APACC access, to read an access port register, by the combination of:the current value of the SELECT register in the DP, see AP Select Register,SELECT on page 9-63.

  知道了当前选中的 AP 那哪个(上一条命令决定了是 AHB-AP)

2. 根据 AP是哪个 A[3:2]即TDI[2:1](值为0b01) 选中寄存器P201 "Transfer Address, TAR",In the case of a APACC access, to read an access port register, by the combination of: the value shifted into A[3:2]

P201 : Transfer Address, TAR 的 offset[3:2] 为 0b01

此时标志要 写 DATAIN[31:0]即 TDI[34:3]进入 "Transfer Address, TAR" // 注意 : 此次TDI传输了36bit, 高1位无效

根据 P203 "Transfer Address, TAR" 的定义 ,Address of the current transfer 为填充为 0x2000 0000 // 注意 (0x1 0000 0002 是 LSB)

写入后,会产生一次transter , 以  "Transfer Address, TAR" 中的值为地址, 读该地址中的内容到 该AP的 "Data Read/Write, DRW"寄存器


第3步

J-Link>readap 3

Reading AP register 3 = 0x12345678 (0 read repetitions needed)


// 作用 : 之前已经选中"某AP的某bank",此时读 该bank 中的 第3(从0开始计数)个寄存器

// 参数分析

// writeap : 会产生 IR ,0b1011 , 选中 APACC

// 3 : 选中 "Data Read/Write, DRW"


jtag 时序


以 DDI0413C_cortexm1_r0p1_trm.pdf 分析 , 之后的 Pxx ,都是该书中的页码

分析

1. IR TDI 传入 0x1FB

之前已经选中APACC,而现在要操作 APACC 组的寄存器

所以,此时 必须 走 IR 链 选中 APACC

传入 0b1011 (同时TDO 0b0001) 选中 APACC // 但是 写入的是 9bit(0x1FB),高5位无效

2. DR TDI 传入 0x7 // LSB

P149 : APACC

P151 : RnW为1 ,表示读某个寄存器 

//If RnW is shifted in as 1, the request is to read the value of the addressed register. 

// The value in DATAIN[31:0] is ignored. 

// You must read the scan chain again to obtain the value read from the register.

P151 : 

1. P151 : In the case of a APACC access, to read an access port register, by the combination of:the current value of the SELECT register in the DP, see AP Select Register,SELECT on page 9-63.

  知道了当前选中的 AP 那哪个(上一条命令决定了是 AHB-AP)

2. 根据 AP是哪个 A[3:2]即TDI[2:1](值为0b11) 选中寄存器P201 "Data Read/Write, DRW",In the case of a APACC access, to read an access port register, by the combination of: the value shifted into A[3:2]

P201 : Data Read/Write, DRW 的 offset[3:2] 为 0b11

此时标志要 读 P204 "Data Read/Write, DRW"

注意 : 之前讲述的

1. The value in DATAIN[31:0] is ignored.

2. You must read the scan chain again to obtain the value read from the register.

TODO : 要读哪个寄存器? 猜测是 DPACC 中的 "Read Buffer"


3. DR TDI 传入 0x1FA // LSB

选中 DPACC

4. DR TDI 传入 0x7 , TDO 传出 0x91A2B3C2 // 实际传送了 36bit , 最高为无效

RnW 为1 ,表示读

TDI[2:1] 为 0b11 , 对应 P185 中的 "Read Buffer"

TDI[34:3] 被忽略

TDO的[34:3] 是 value

TDO[3] 是 第1个字节的最低位

0x91A2B3C2:000010010001101000101011001111000010

  :{0} 0001 0010 0011 0100 0101 0110 0111 100[0] 010 // [0] 为 TDO[3] , {0} 为无效位

  :    1    2    3    4    5    6    7    8

关键字:ARM  cortex-M4  jtag  寄存器 引用地址:ARM cortex-M4 jtag 读取 dp 和 ap 寄存器 实例 解读

上一篇:ARM cortex-M4 DAP 访问 方法总结
下一篇:TQ2440 AD中断方式采集数据

推荐阅读最新更新时间:2024-11-13 23:46

TQ2440(ARM9)的第一个无OS实验【流水灯】
#include 2440addr.h //包含2440相关寄存器的设置 //四个LED对应GPB5.6.7.8 #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #define Bit(x) (1 x) //将某位置位 #define Output(x) (1 2*x) //将对应IO置为输出 /******************************************* * 名称:Delay * 功能:延时 * 入口参数:无 * 出口参数:无 ************************
[单片机]
基于ARM的紧凑型图像采集系统设计
利用ARM7(Lpc2210)与CMOS感光芯片(OV7620)实现了一个紧凑型圈像采集、处理系统;通过夸理利用LPC2210数据总线的工作方式,有效地消除了OV7620对系统数据总线的干扰。SCCB控制,图像数据的采集、处理以及传输都由一片LPC22lO完成,特别适合于对功耗、体积要求较严格的嵌入式应用。 0V7620是一种CMOS图像传感器,它被广泛应用在网络摄像头、摄像手机等产品中。由它组成的图像采集系统,比较常见的设计方法为 OV7620搭配OV5ll+或CPLD/FPGA。OV511+或CPLD/FPGA采集的图像数据通过USB总线或双端口RAM输出到PC或 MCU(ARM、DSP等),由PC或MCU对图像数据进行进
[单片机]
基于<font color='red'>ARM</font>的紧凑型图像采集系统设计
基于ARM7及GPRS的路灯监控通信系统终端
0 引言 对于城市路灯管理部门来说,防盗、节能等一直是一件非常头疼的事情,需要投入大量的人力、物力和财力,因为路灯数量众多,地理位置分散,给工作人员带来极大的困难。GPRS即通用分组无线业务 ,英文全称为General Packet Radio Service,这种无线业务是在现有GSM网络上开通的一种新型的分组数据传输业务。GPRS采用分组交换技术,它可以让多个用户共享某些固定的信道资源。GPRS特别适用于间断的、突发性的或频繁的、少量的数据传输,也适用于偶尔的大数据量传输,具有实时在线、按量计费、快捷登录、高速传输、自如切换等优点。因此,利用GPRS组建的无线通信系统是一种造价低,易于维护和推广,无制约,可靠性高,稳定性好,具
[单片机]
基于<font color='red'>ARM</font>7及GPRS的路灯监控通信系统终端
SD卡读CID寄存器
/** * @brief Card Identification Data: CID Register */ typedef struct { uint8 ManufacturerID; // 生产标识ID uint16 OEM_AppliID; // OEM/应用 ID uint32 ProdName1; // 产品名称1 uint8 ProdName2; // 产品名称2 uint8 ProdRev; // 产品版本 uint32 ProdSN; // 产品序号 uint8 Reserved1; // 保留 uint16 Manufa
[单片机]
ARM的37个寄存器和异常处理机制详解
1.ARM的37个寄存器 ARM的37个寄存器中,30个寄存器是“通用”,1个固定用作PC(程序控制寄存器),一个固定用作CPSR(程序状态寄存器),5个固定用作5种异常模式下的SPSR(程序状态保存寄存器),特别注意user模式和sys模式共用寄存器集。上面的37个寄存器不是同时可见的,只有在特定模式下才能访问某些寄存器。例如sp和lr寄存器各有6个,但是只有在相应模式下才能访问相应的寄存器,在user模式下访问的是user的sp和lr,FIQ模式下访问的是FIQ的sp和lr,这叫做影子寄存器。模式切换时寄存器会自动切换,其中用r13作sp,用r14作lr并不是一定的,用其他的寄存器作sp和lr也是可以的,只是大家约定俗成的
[单片机]
<font color='red'>ARM</font>的37个<font color='red'>寄存器</font>和异常处理机制详解
软银旗下芯片技术公司ARM去年营收27亿美元 创下历史纪录
北京时间5月13日凌晨消息,软银集团旗下芯片技术公司ARM周四公布报告称,该公司2021年的营收创下历史纪录。    ARM首席执行官雷内·哈斯(Rene Haas)在接受采访时表示,该公司的新芯片设计业务显示出了强劲的前景。    在软银集团将ARM出售给美国芯片制造商英伟达的交易由于监管障碍而流产之后,该集团现在计划让这家英国科技公司上市。    ARM开发用于设计芯片的基本蓝图,该公司周四公布的报告显示去年营收为27亿美元,与此前一年相比增长35%。其中,授权业务的营收同比增长61%,至11.3亿美元;芯片技术特许权使用费增长20%,至15.4亿美元。    哈斯表示,授权业务旨在“让(客户)公司与ARM一起花钱,为未来设计
[半导体设计/制造]
基于DSP和ARM9的汽车纵向碰撞预警系统设计
  引言   利用图像传感器感知前方道路交通环境与障碍物位置,实现安全车距测量,对处于碰撞危险的汽车及时报警有利于减少交通事故,提高道路交通安全。由于理论计算的安全车距首先要以保障安全为前提,经常与驾驶员在行驶过程中认可的安全车距有较大的出入,导致驾驶员对预警系统的不信任感,不利于系统的推广使用。同时,作为安全辅助驾驶系统的处理平台,PC机的体积、成本及功能的冗余性是应用在车载系统中难以克服的瓶颈。   本文以图像方式测量本车与前车的车距为基础,建立汽车纵向碰撞预警模型,解决理论计算的安全距离与驾驶员认可的习惯距离不相一致的矛盾;考虑嵌入式系统处理的实时性与体积小巧性等特点,采用嵌入式方法完成汽车纵向碰撞预警系统的设计。
[单片机]
基于DSP和<font color='red'>ARM</font>9的汽车纵向碰撞预警系统设计
arm召开2025二季度财报会,V9架构继续大获成功
2024年9月30日,arm召开了2025财年第二季度收益电话会议。公司CEO Rene Haas表示:“在这一年中,我们在执行增长战略方面超出了所有预期。无处不在的人工智能需求正在增加对 arm 计算平台的需求。自成立以来,arm芯片的出货量已超过 3000 亿颗。” 二季度总收入达到8.44亿美元,超过预期。其中,版税收入5.14亿美元,同比增长23%,创下历史新高,主要受arm v9架构的持续采用及CSS(计算子系统 Compute Subsystems)技术的推广推动。Rene解释道:“版税收入增长的推动力是每片芯片价值的提高。在过去一个季度,arm v9架构占版税收入的 25%,而一年前仅为 10%。” 智能手机
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved