当前位置: 首页 > news >正文

【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】


请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】

文章目录

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

相关文章:

  • C++ http协议POST body raw 字段向服务器发送请求
  • Linux Vim批量注释和自定义注释
  • flink的CoProcessFunction使用示例
  • 临界资源,临界区,通信的干扰问题(互斥),信号量(本质,上下文切换问题,原子性,自身的安全性,操作)
  • AI搞钱——工具篇之视频、音频转文字
  • FreeRTOS学习笔记——SysTick中断
  • 什么是API接口测试?这可能是全网最全的教程了!
  • 动态规划31(Leetcode188买卖股票的最佳时机4)
  • linux安装jdk和weblogic易错点
  • 首次分享一波
  • Qt中Opencv转Qimage出现重影或者颜色不对
  • linux 3.13版本nvme驱动阅读记录二
  • maven 项目添加 git-hook 脚本,约束提交内容格式
  • ke9案例三:页面提交文件,我服务器端接收
  • ideal一键部署SpringBoot项目jar包到服务器
  • gcc介绍及安装
  • JAVA多线程机制解析-volatilesynchronized
  • JS函数式编程 数组部分风格 ES6版
  • mysql中InnoDB引擎中页的概念
  • supervisor 永不挂掉的进程 安装以及使用
  • swift基础之_对象 实例方法 对象方法。
  • SwizzleMethod 黑魔法
  • WePY 在小程序性能调优上做出的探究
  • 理清楚Vue的结构
  • 聊聊directory traversal attack
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何实现 font-size 的响应式
  • 为视图添加丝滑的水波纹
  • # .NET Framework中使用命名管道进行进程间通信
  • #14vue3生成表单并跳转到外部地址的方式
  • #define、const、typedef的差别
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (三)c52学习之旅-点亮LED灯
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .aanva
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @EnableWebMvc介绍和使用详细demo
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [AAuto]给百宝箱增加娱乐功能
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [Geek Challenge 2023] web题解
  • [HCTF 2018]WarmUp (代码审计)
  • [LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序
  • [Linux] MySQL数据库之索引
  • [MFC] MFC 获取指定窗口截图(大小可调)
  • [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'XXX' 无效
  • [nlp] id2str的vocab.json转换为str2id
  • [poj] 3422 Kaka's Matrix Travels || 最小费用最大流