文章目录
- T32MARM 介绍
- Trace32 .t32 和 .cmm 差异
- veloce 下启动TRACE32
- 1.1.3 TAP 状态机操作命令
- 1.1.3.1 IDCODE(Identification Code)寄存器 介绍
T32MARM 介绍
T32MARM 是 Lauterbach 的 Trace32 软件包的一部分,专门用于 ARM 基础架构的微处理器。Trace32 是一款强大的系统级调试器,广泛用于嵌入式系统和微处理器的开发。
T32MARM 提供了对 ARM 核心和多核心设备的全面支持,支持各种不同的 ARM 核心,包括 Cortex-A、Cortex-R 和 Cortex-M 系列,以及旧的 ARM7 和 ARM9 核心。T32MARM 提供了丰富的功能,包括源代码级调试、汇编级调试、系统级调试、实时追踪、性能分析等。
T32MARM 通过一个图形用户界面(GUI)来操作,提供了直观的操作界面和丰富的可视化功能。同时,T32MARM 也提供了命令行接口,用户可以编写脚本来自动化调试过程。
在使用 T32MARM 时,你需要连接到一个 Lauterbach 的硬件调试探针,例如 PowerTrace 或者 PowerDebug。这些调试探针通过 JTAG、SWD 或者 cJTAG 接口连接到你的目标设备,并通过 USB 或者以太网连接到你的主机计算机。
Trace32 .t32 和 .cmm 差异
Trace32 是由 Lauterbach 公司开发的一套强大的嵌入式系统调试工具。它支持. CMM
脚本和 .t32
配置文件,这两种文件在 Trace32 调试环境中扮演着不同的角色。
- .t32 文件:这种文件类型是用来配置 Trace32 调试器的。它包含了一系列用于初始化调试器的配置命令,例如设置调试器的工作目录、加载目标板的配置文件,以及设置各种用户界面选项等。通常在打开 Trace32 调试器时加载这个文件。
- .cmm 文件:这种文件类型是 Trace32 的脚本文件,使用了 CMM 脚本语言。CMM 是一种由 Lauterbach 开发的脚本语言,用于编写控制 Trace32 调试器的自动化脚本。这些脚本可以用于执行各种复杂的调试任务,如下载和运行代码、设置断点、读写内存和寄存器、控制执行流程、记录和分析数据等。在调试过程中可以加载和运行这个文件。
总的来说,.t32
文件主要用于配置 Trace32 调试器,而 .cmm
文件用于编写和执行自动化调试脚本
veloce 下启动TRACE32
首先在veloce run目录下执行 t32marm
命令,可以通过 -c
指令配置文件,其它参数如下(执行 t32marm -h
):
然后会出现如下界面,然后再点击 “File->Run Script...
”找到对应的脚本执行。
执行脚本之后如下状态:
脚本内容如下:
SYStem.CPU STAR
SYStem.OPTION WAITRESET OFF
SYStem.OPTION ENRESET OFF
SYStem.OPTION RESBREAK OFF
SYStem.CONFIG SLAVE OFF
SYStem.CONFIG.ahbap1.base dp:0x80000000
SYStem.CONFIG.COREBASE E:0xe000e000
SYStem.CONFIG.ITMBASE E:0xe0000000
SYStem.CONFIG.DWTBASE E:0xe0010000
SYStem.CONFIG.DWTBASE E:0xe0410000
;SYStem.CONFIG.TPIUBASE DAP:0xXXXXXXXX
SYStem.CONFIG.DAPIRPOST 4.
system.option waiterset
:这条命令设置了在等待目标系统复位时的等待时间。例如,system.option waiterset 5s 将等待时间设置为5秒。system.option enreseset
:这条命令启用或禁用系统复位。如果启用 (ON), 在执行复位命令时,将会复位整个系统。如果禁用 (OFF), 复位命令将不会影响系统。system.option resbreak
:这条命令设置了在系统复位后是否立即进行断点。如果启用 (ON), 在系统复位后,会立即进行断点,即使没有设置断点。如果禁用 (OFF), 则不会。system.option slave
:这条命令用于设置是否透明地将调试命令传递给从设备。当设置为 ON 时,调试命令会被透明地传递给从设备。当设置为 OFF 时,将不会传递。system.option ahbap1.base
:这条命令设置了AHB-AP(AMBA Advanced High-performance Bus Access Port)的基地址。例如,system.option ahbap1.base 0x80000000
将AHB-AP的基地址设置为0x80000000
。
请注意,以上解释可能会根据目标系统和调试适配器的具体配置有所不同,建议参考 Lauterbach 的官方文档以获取更准确的信息。
1.1.3 TAP 状态机操作命令
jtag.pin enable
:这条命令用于使能 JTAG 模式。JTAG(Joint Test Action Group)是一种用于测试集成电路连续性的技术,也常用于嵌入式设备的调试。当你想让你的设备进入 JTAG 模式时,你可以用这条命令。jtag.shifttms
:这条命令用于在 JTAG 的 TMS(Test Mode Select)引脚上进行位操作。这个命令需要你提供一个包含要移位的二进制数字的字符串,例如:jtag.shifttms "1 1 1 1 1"
:复位 JTAG interface,让 TAP 状态机进入Test-Logic Reset
状态;jtag.shifttms "0 1 1 0 0"
:让 TAP 状态机进入Shift-IR
状态;jtag.shifttms "0 1 1 1 1 1 1 1"
:shift in IDCODE instruction;jtag.shifttms "1 1 0 0"
:让 TAP 状态机进入Shift-DR
状态;jtag.shifttms "0 0 0 0....0 0"
:shift in 32 dummy bits to get the IDCODE;在执行&ID_CODE=JTAG.SHIFT()
此命令从 JTAG 的 TDO(Test Data Out) 引脚读取数据,并将读取的数据分配给 id_code 变量。
jtag.shiftreg
:这条命令用于在 JTAG 的数据寄存器上进行位操作。这个命令也需要你提供一个包含要移位的二进制数字的字符串,例如:jtag.shiftreg "1011"
。jtag.shift
:这条命令用于在 JTAG 的 TDI(Test Data In)引脚上进行位操作。这个命令也需要你提供一个包含要移位的二进制数字的字符串。jtag.shift()
:是在 JTAG 的 TDI(Test Data In)引脚上进行位操作的命令。在此种情况下,它将从 JTAG 的 TDI 引脚中移出并返回数据。
1.1.3.1 IDCODE(Identification Code)寄存器 介绍
IDCODE(Identification Code)寄存器是 DP 中的一个重要寄存器,用于储存关于目标设备的关键信息,包括制造商 ID、部件编号和版本信息。
IDCODE 寄存器的位布局如下(从最高位到最低位):
- Bits 31:28 - Version:4位字段,表示 ARM 的版本号。
- Bits 27:12 - Part number:DP的Part Number是一个16位的字段,位于IDCODE寄存器的第12到27位。它是ARM用来标识具体的DP类型的编号。例如,对于SW-DP,Part Number通常为
0xBA00,对于JTAG-DP,Part Number通常为0xBA10。。 - Bits 11:1 - JEDEC(Joint Electron Device Engineering Council)manufacturer identity:11位字段,表示 JEDEC 标准制造商身份代码。
- Bit 0 - Always 1:这一位总是被设置为 1。
通过读取 IDCODE 寄存器,调试主机可以识别和验证连接的目标设备的类型和版本,从而选择适当的调试策略。