惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

博客园 - yooooooo

【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 PCIe 总线的 ASPM 和 链路状态机制总结 fw_devlink 功能 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 Android Camera性能分析 录像Buffer Path详解 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 sched feature TTWU_QUEUE 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 UEFI:FDF文件及FD、FV、FFS EDK II PCD的概念、类型、使用 PELT算法浅析 load_balance函数代码详解 - yooooooo UEFI Boot Manager Linux misfit task Linux 内核中sched_prio_to_weight转换关系 CFS任务放置代码详解 CFS任务的负载均衡(load balance)
【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】
yooooooo · 2026-04-19 · via 博客园 - yooooooo

T32 MARM介绍

T32 MARM 是Lauterbach的Trace32软件包的一部分,专门用于ARM基础架构的微处理器。Trace32是一款强大的系统级调试器,广泛用于嵌入式系统和微处理器的开发。

T32MARM提供了对ARM核心和多核心设备的全面支持,支持各种不同的ARM核心,包括Cortex-A、Cortex-R和Cortex-M系列,以及旧的ARM7和ARM9核心。T32MARM提供了丰富的功能,包括源代码级调试、汇编级调试、系统级调试、实时追踪、性能分析等。

T32MARM通过一个图形用户界面(GUI)来操作,提供了直观的操作界面和丰富的可视化Q功能。同时,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):

image

然后会出现如下界面,然后再点击“File->Run Script..”找到对应的脚本执行。执行脚本之后如下状态:

image

image

脚本内容如下:

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.optionwaiterset5s将等待时间设置为5秒。
  • system.option enreseset:这条命令启用或禁用系统复位。如果启用(ON),在执行复位命令时,将会复位整个系统。如果禁用(OFF),复位命令将不会影响系统。
  • system.option resbreak:这条命令设置了在系统复位后是否立即进行断点。如果启用(ON),在系统复位后,会立即进行断点,即使没有设置断点。如果禁用(OFF),则不会。
  • system.option slave:这条命令用于设置是否透明地将调试命令传递给从设备。当设置为ON时,调试命令会被透明地传递给从设备。当设置为OFF时,将不会传递。
  • system.option ahbap1.base:这条命令设置了AHB-AP(AMBAAdvanced High-performance Bus Access Port)的基地址。例如, system.option ahbap1.base 0x80000000将AHB-AP的基地址设置为0x80000000。

请注意,以上解释可能会根据目标系统和调试适配器的具体配置有所不同,建议参考Lauterbach的官方文档以获取更准确的信息。

TAP状态机操作命令

  • jtag.pin enable:这条命令用于使能JTAG模式。JTAG(Joint TestAction Group)是一种用于测试集成电路连续性的技术,也常用于嵌入式设备的调试。当你想让你的设备进入JTAG模式时,你可以用这条命令。
  • jtag.shifttms:这条命令用于在JTAG的TMS(TestMode Select)引脚上进行位操作。这个命令需要你提供一个包含要移位的二进制数字的字符串,例如:
    • jtag.shifttms "1 111 1":复位JTAG interface,让 TAP状态机进入 Test-Logic Reset 状态;
    • jtag.shifttms "0 110 0":让TAP状态机进入 Shift-IR 状态;
    • jtag. shifttms "0 1 1 1 1 1 1 1": shift in IDCODE instruction;
    • jtag.shifttms "1 10 0":让TAP状态机进入 Shift-DR 状态;
    • jtag. shifttms "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引脚中移出并返回数据。

IDCODE(Identification Code)寄存器介绍

image

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寄存器,调试主机可以识别和验证连接的目标设备的类型和版本,从而选择适当的调试策略。