【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】

文章目录

    • Trace32 CMM 概述
    • 1.1 Trace32 系统命令 SYStem
      • 1.1.1 Trace32 SYStem.CONFIG
      • 1.1.2 SYStem.MemAccess
      • 1.1.3 SYStem.Mode
        • 1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic
        • 1.1.3.2 SRST- Resets the CPU core and peripherals
    • 1.2 Trace32 数据访问
      • 1.2.1 程序内存类型 Program Memory Classes
      • 1.2.2 数据内存类型 Data Memory Classes
      • 1.2.3 处理器访问类型 Access Classes for Core Resources
      • 1.2.4 访问类型属性 Access Class Attributes
      • 1.2.5 访问类型扩展
    • 1.3 Trace32 其它常用项
      • 1.3.1 CMM 脚本注释方法
      • 1.3.2 CMM 脚本信息打印
      • 1.3.3 CMM 脚本控制逻辑

Trace32 CMM 概述

CMM (Command Macro Model) 是由 Lauterbach 公司定义的一种脚本语言,用于控制它的 TRACE32 调试器系列。CMM脚本通常用于自动化调试或测试任务,例如加载代码,配置目标硬件,运行测试等。

1.1 Trace32 系统命令 SYStem

SYStem(缩写sys) 是CMM脚本中的一条命令,它用于控制和查询目标系统的状态。以下是一些常见的 SYStem 命令用法:

  • RESet:复位 Debugger,防止残留以前的配置;
  • SYStem.CPU <cpu>:设置或查询当前的CPU类型。例如:SYStem.CPU CORTEX-M3
  • SYStem.Up:对处理器进行复位并进入debug 模式,比如在复位向量表处 halt 住处理器,这条命令执行之后就有可能访问memory和寄存器了,但是有些设备在复位时是不能通过JTAG进行访问的,这个时候就可以用下面一条命令了;
  • system.attach : 也可以用来连接已经运行的目标芯片,不复位;
  • SYStem.Down:关闭目标系统;
  • SYStem.Mode:设置或查询系统模式(例如单步模式,运行模式等);
  • SYStem.JtagClock:设置或查询JTAG时钟频率;
  • system.cpuaccess enable – 运行时访问cpu。
  • SYStem.Option:用于配置各种系统选项,例如:
    • SYStem.Option ResBreak OFF:关闭重置断点;
    • SYStem.Option.BigEndian [ON | OFF]:大小端控制,Cortex-A/R 不使用,Arm11自动检测;

1.1.1 Trace32 SYStem.CONFIG

该命令用于配置目标系统的各种参数。具体的配置选项因目标系统的不同而不同。其中一些常见的配置参数包括:

  • SYStem.CONFIG DCache: 设置或查询数据缓存状态;
  • SYStem.CONFIG MMU: 设置或查询存储器管理单元状态;
    • SYStem.CONFIG MMU ON: 命令用于开启目标系统的存储器管理单元;
  • SYStem.CONFIG DAP: 用于配置 Debug Access Port (DAP)。 DAP是ARM Cortex系列处理器中的一个组件,它提供了一个通过JTAG或SWD接口访问处理器内部和处理器外围设备的机制。用于选择 DAP的工作模式(JTAG或SWD)以及配置其他DAP相关的参数。
    • SYStem.CONFIG DAP JTAG:设置 DAP 为 JTAG 模式,使用 JTAG 接口就可以访问 Test Access Port controller (TAP), TAP中有一个状态机,这个状态机根据 JTAG 的控制信号可以对 TAP中的指令寄存器和数据寄存器进行访问,JTAG 接口被5跟信号线控制:
      • nTRST (reset)
      • TCK (clock)
      • TMS (state machine control)
      • TDI (data input)
      • TDO (data output)
        JTAG 接口可以通过菊花链(daisy-chain)的方式控制多个TAPs,如果要访问链中的某一个TAP,就需要给链中的其它TAPs 发送 BYPASS pattern,因此debugger 需要知道链中 TAP的具体位置,TAP的位置可以通过下面4个命令来定义:
        • DRPOST <bits>: 定义 TAPs的个数,每个 TAP 占用 DRPOST的一个bit,默认位0;
        • DRPRE <bits>:同上;
        • IRPOST <bits>:所有 TAPs 中指令寄存器的位数,TAR与TDI之间;
        • IRPRE <bits>:所有 TAPs 中指令寄存器的位数, TAP与 TDO之间;

        如果不确定上面4个寄存器的配置可以通过 SYStem.DETECT.DaisyChain 命令来获取(目前很少使用菊花链的方式)。
- SYStem.CONFIG DAPIRPOST 4
- SYStem.CONFIG DAP SWD:设置 DAP 为 SWD 模式;
- SYStem.CONFIG DAP Clock <frequency>:设置 DAP 的时钟频率。
- SYStem.CONFIG.COREDEBUG.Base <address>:如果使用 Cortex-A 或者 Cortex-R core,需要指定debug 寄存器块的基地址。

在 Arm soc-400 系统中使用 SYStem.CONFIG 命令可以为 memory busses 配置 0-255 个端口号,如下:

AHBAPn.Port <port>
APBAPn.Port <port>
AXIAPn.Port <port>

在 Arm soc-600 使用的是基地址而不是端口号了,如下:

SYStem.CONFIG.APBAP1.Base DP:0x1000000 ; first APB AP: index 1
SYStem.CONFIG.APBAP2.Base DP:0x2000000 ; second APB AP: index 2
SYStem.CONFIG.AXIAP.Base DP:0x3000000 ; first AXI AP: index 1 (implied)
Data.dump APB1:0x80000000 ; use access class of first APB AP
Data.dump APB2:0x90000000 ; use access class of second APB AP
Data.dump AXI:0x30000000 ; use access class of first AXI AP

SYStem.CONFIG 参数太多,后面会有专门章节介绍。

1.1.2 SYStem.MemAccess

该命令用于配置访问目标系统内存的方式。通常情况下,可以通过JTAG接口直接访问目标系统的内存,但在某些情况下(比如目标系统处于低功耗模式或者内存被锁定),可能需要通过其他途径(比如通过CPU或者特定的硬件接口)来访问内存,

语法

SYStem.MemAccess <mode>

SYStem.MemAccess mode 选项如下表:

modedescription
AHB / AXI/\APB / … (SoC-600)根据具体的实现,SOC600有DAP,但不用于访问run-time memory
DAP (SoC-400)通过 AHB/AXI 进行非侵入式的 run-time memory 访问
Enable"激活"memory访问
Denied禁止memory访问,当cpu在执行程序的时候
StopAndGo暂时halt cpu,然后去进行memory访问
NEXUS通过 Nexus 接口来访问memory,为 MAC7xxx 处理器设计

1.1.3 SYStem.Mode

控制或改变系统运行模式的命令。

  • SYStem.Mode Down:禁用调试器,CPU的状态不会改变;

  • SYStem.Mode Nodebug:同down,禁用调试器,CPU的状态不会改变;

  • SYStem.m.preprare: 命令通常与SYStem.m.system命令一起使用;
    SYStem.m.system:负责实际的内存初始化过程,而SYStem.m.prepare 则在这个过程开始之前被调用,用于准备必要的硬件配置;

  • SYStem.Mode Go:通过复位线复位目标,初始化调试端口(JTAG、SWD、cJTAG),并开始进程执行。对于重置,重置线必须连接到调试连接器;

  • SYStem.Mode Attach:不会发生重置,CPU状态(正在运行或停止)不会更改。调试端口(JTAG,SWD,cJTAG)将被初始化。 执行此命令后,例如,可以使用 Break 命令停止用户进程;

  • SYStem.Mode StandBy:通过复位线使目标保持复位状态,并等待检测到电源。对于重置,重置线必须连接到调试连接器。 一旦检测到电源,调试器就会恢复尽可能多的调试寄存器(例如片上断点、矢量捕获事件、控制),并从复位中释放CPU以启动进程执行。 检测到 CPU 断电时,调试器会自动切换回待机模式。这允许调试电源周期,因为调试寄存器将在上电时恢复。 注意:通常只能在CPU运行时设置片上断点和矢量捕获事件。要设置软件断点,必须停止 CPU。

  • SYStem.Mode Up:通过复位线复位目标,初始化调试端口(JTAG、SWD、cJTAG),停止CPU,并进入调试模式,相关寄存器被恢复为默认值。 对于重置,重置线必须连接到调试连接器。 所有寄存器的当前状态都是从 CPU 读取的。

  • SYStem.Mode Prepare:reset 目标处理器,可以通过重置信号(reset line)或者CPU中特殊的 reset 寄存器来实现。之后,将提供对 CoreSight DAP接口 的直接访问。对于reset,reset line必须连接到调试器。

    调试器将初始化一些 debug 端口(JTAG,SWD,cJTAG)以及 CoreSight DAP接口,但是并不连接到CPU。这种 Mode 可以用于一些不需要 debug CPU或者绕过CPU的场景,调试器直接通过内存总线(memory bus),比如AXI,AHB或者APB等,直接通过CoreSight DAP 的内存访问端口,比如:

    • 调试器绕过CPU,直接访问物理内存。如果改映射存在,内存应该在被访问前,被初始化;
    • 调试器访问外设,例如,在调试模式下,停止CPU之前配置寄存器。可能需要先对外设进行计时和供电,然后才能访问它们;
    • 第三方软件或一些特殊调试器使用 TRACE32 API通过 TRACE32 调试器硬件访问调试端口和 DAP。
1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic

下图为 Trace32 工具为 ARM debug设计的 JTAG pin 脚图:
在这里插入图片描述
其中,TRST 和 SRST 信号是可选的。

Test Reset 信号用于JTAG Test Access Port (TAP)的异步重置。它将 reset TAP的状态机,以及绝大部分ARM系列的debug相关寄存器。从调试器的视角,TRST信号从调试器输出至目标板。它是低电平有效。

1.1.3.2 SRST- Resets the CPU core and peripherals

System Reset,低电平有效,用于reset 目标系统。这个信号同样也可以用于调试器检测目标处理器是否处于reset状态。该信号可以是输入或者输出。
在这里插入图片描述

1.2 Trace32 数据访问

访问类型(Access Class)被 Trace32的PowerView用于指定访问内存、外设的寄存器、可寻址的core资源、协处理寄存器以及Trace32的虚拟内存等。

在Trace32中,寻址包括两部分:访问类型+地址,比如:

Data.Dump type:0x1234567

其中 type 为访问类型,0x0123456 为访问的地址,二者之间用冒号 连接。

访问类型可以是

  • 程序内存类型(program memory class)
  • 数据内存类型( data memory class)

1.2.1 程序内存类型 Program Memory Classes

通常使用字母 P(Program)来表示程序内存类型(可省略),比如以下命令:

List P:0x4568
List 0x4568

P可以省略,上述两个命令都是在程序地址为 0x4568的地方,打开源代码窗口。

除了 P类型之外,还有 R, TV等程序内存类型,这些类型是处理器架构用来指定不同指令集的编码格式:

程序内存类型架构
R针对ARM架构,表示 ARM 指令集编码
T针对ARM架构,表示 THUMB 指令集编码
V针对POWER架构,表示 VLE 指令集编码

可用的程序内存类型取决于当前所使用的处理器架构

1.2.2 数据内存类型 Data Memory Classes

通常使用字母 D(Data)来表示程序内存类型(可省略),比如以下命令:

Data.dump D:0x6770
Data.dump 0x6770

D可以省略,所以上述两个命令都是同一个操作。

此外,对于一些特殊场景,还可以使用其他的字母来表示内存类型,比如 X表示针对MMDSP架构,使用 X总线来访问数据内存。
比如其中修饰内存地址的 SD就代表“Supervisor Data ”。

如果访问类型被忽略,Trace32将会使用默认的访问类型。比如直接对内存地址 0x40080000进行 Data.dump,则可以发现默认使用了 ZSD的访问类型进行修饰,关于 ZSD代表何种类型,将在下文中解释。

1.2.3 处理器访问类型 Access Classes for Core Resources

以下是一些处理器资源常用的缓存访问类型:

缓存访问类型解释
ICInstruction Cache指令缓存
DCData Cache数据缓存
L2Level 2 Cache 二级缓存
NCNo Cache (access with caching inhibited)限制缓存的访问

比如下面这些指令
Data.dump DC:0x6770
显示地址0x6770处的16进制数据转存,DC 表面数据从Data cache上获得的。

Data.dump NC:0x6770
NC表示不经过缓存,数据是从物理内存 physical memory 上读取的。

1.2.4 访问类型属性 Access Class Attributes

访问类型属性解释
E运行时访问,优先采用非侵入性访问,如果不支持,就是侵入性访问
A物理地址的访问,绕过MMU(MMU可以将虚拟地址和物理地址进行转换)
SSupervisor 内存,特权访问
U用户内存,非特权访问
Z安全访问(比如ARM的TrustZone)
N非安全访问

比如以下命令:

Data.dump A:0x29876

dump 物理地址为 0x29876上的数据

Data.dump AD:0x29876

D 表示 Data,代表数据内存,所以同上命令

Data.dump ADC:0x29876

A同上,DC表示 Data Cache,表示 dump 物理地址为0x29876上的数据,数据的来源为 Data Cache

1.2.5 访问类型扩展

如果用户忽略指定访问类型,Trace32将根据经验进行填充,填充的规则基于:

  • 当前CPU的上下文context(架构特有的)
  • 使用的窗口类型(比如Data.dump是显示数据内存,List.Mix窗口是显示代码内存)
  • 所加载应用的符号信息(比如代码和数据的结合)
  • 使用不同的指令集的段segments
  • 特殊的调试设置(比如SYStem.Option.*)

比如通过CPU访问,假设CPU处于非安全的supervisor模式,执行32bits代码。Trace32会根据当前处理器上下文自动将A扩展成 ANSD或者 AZSD,将Z扩展成ZSD


Data.SET 命令是一种常用的设置目标系统内存值的命令。DP(Data Pointer)是此命令中的一个参数类型,指的是一个地址(pointe)。
Data.SET 命令的一般格式为 Data.SET <type> : <address> <value>,其中:

  • <type> 指定了数据的类型,可以是 DP(地址/指针),DD(双字,即4字节整数),DF(双精度浮点数)等。
  • <address> 指定了要设置的内存地址。
  • <value> 是要写入的数据值。

举个例子,如果你想要将一个地址值(假设为 0x12345678)写入到内存地址 0x40000000,你可以这样写:

Data.SET DP 0x40000000 0x12345678

这行命令将使得内存地址 0x40000000 的值被设置为 0x12345678

1.3 Trace32 其它常用项

1.3.1 CMM 脚本注释方法

关于CMM脚本的注释,以 ; 或者 // 开头的行将被视为注释,例如:

; This is a comment 
// This is also a comment SYStem.Up

1.3.2 CMM 脚本信息打印

PRINT 命令用于在调试控制台上打印信息。它可以用于打印字符串,也可以用于打印表达式的结果。例如:

PRINT "Hello, world!"

会在控制台上打印出"Hello, world!",PRINT Var.VALUE 会打印变量 Var的值。

1.3.3 CMM 脚本控制逻辑

IFENDDO用于控制脚本的流程。IF后面跟一个条件表达式,如果条件表达式的结果为真(非零)则执行紧接着的代码块,否则跳过这个代码块。ENDDO标记了IF代码块的结束。例如:

IF Var.VALUE == 1 PRINT "Var is 1" 
ENDDO

这段代码的含义是,如果变量Var的值等于1,那么在控制台上打印"Var is 1"。

推荐阅读
https://repo.lauterbach.com/manual.html
https://blog.csdn.net/luolaihua2018/article/details/130772896

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure - 自动化机器学习AutoML Azure使用详解

目录 一、AutoML是如何工作的&#xff1f;二、何时考虑AutoML&#xff1f;三、AutoML助力训练与集成过程四、实战案例五、总结 自动化机器学习&#xff0c;简称为AutoML&#xff0c;旨在将机器学习模型的开发中繁琐且重复的任务自动化。这使得数据科学家、分析师以及开发人员能…

ThinkPad电脑HDMI接口失灵如何解决?

ThinkPad电脑HDMI接口失灵如何解决&#xff1f; 如果平时正常使用的外接显示器&#xff0c;某天突然无法使用了&#xff0c;重新插拔依然无信号的话&#xff0c;可以打开系统的设备管理器&#xff08;快捷键winx&#xff09;&#xff0c;首先看一下监视器的识别情况&#xff0c…

Istio 实战

文章目录 Istio流量管理分享会【1】什么是istio?【2】istio 可以干什么?【3】业务中的痛点?【4】istio 高级流量管理5.1 istio 组件介绍与原理5.2 sidercar何时注入?如何控制是否注入?5.3 查看sidecar 容器插入的容器中的iptablesDestination RuleVirtual ServiceGateways…

Camtasia Mac 2023版怎么给视频加字幕

在视频制作过程中&#xff0c;字幕和马赛克是两项非常常用的编辑功能&#xff0c;添加字幕可以提高观众的观看体验&#xff0c;添加马赛克可以保护视频创作者不想公开的画面内容。Camtasia作为一款知名的视频制作软件&#xff0c;在具备基本的录制和视频编辑功能的同时&#xf…

win10安装spark

一、进入spark下载页面 连接 Downloads | Apache Spark 二、解压下载后的.tgz文件 直接解压即可 三、运行 运行bin目录下的 spark-shell.cmd 提示 Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.hom…

二蛋赠书六期:《Linux管理入门经典(第8版)》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

[量化投资-学习笔记002]Python+TDengine从零开始搭建量化分析平台-MA均线的多种实现方式

MA 均线时最基本的技术指标&#xff0c;也是最简单&#xff0c;最不常用的&#xff08;通常使用EMA、SMA&#xff09;。 以下用两种不同的计算方法和两种不同的画图方法进行展示和说明。 MA 均线指标公式 MA (N)(C1 C2 C3 …C N )/N目录 方式一1.SQL 直接查询均值2.使用 pyp…

RHCE---shell脚本编程sed

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Liunx中筛选文本时常用的命令&#xff0c;常常会被提及文本三剑客&#xff0c;前文我们学习了文本三剑客中的grep 命令&#xff0c;除了grep命令我们也常用到sed命令&#xff0c;sed命令有…

window系统修改rabbitmq 默认端口

安装完rabbitmq之后&#xff0c;默认的client端口是5672, 控制台访问端口是15672&#xff0c;rabbitmq管理工具启动之后在浏览器中输入地址&#xff1a; ​ ​http://localhost:15672/​​​ 就可以访问后台​ ​​​&#xff0c; 默认管理员账号&#xff1a;guest 密码&#x…

【0基础学Java第四课】-- 逻辑控制

4. 逻辑控制 4.1 顺序结构4.2 分支结构4.2.1 if语句判断一个数字是奇数还是偶数判断一个数字是正数&#xff0c;负数&#xff0c;还是零判断一个年份是否为闰年 4.2.2 switch 语句 4.3 while循环打印 1 - 10 的数字计算 1 - 100 的和计算 5 的阶乘计算1&#xff01;2&#xff0…

Openssl数据安全传输平台014:OCCI环境搭建和使用:Centos8-Oracle19c代码跑通 + Window代码没跑通(不影响本项目)

文章目录 0 代码仓库1 启动Centos oracle数据库2 Winsows安装配置OCCI库2.1 下载文件2.2 VS 配置2.2.1 VC包含目录2.2.2 VC库目录2.2.3 连接器-附加依赖项2.2.4 代码测试-Oracle11g2.2.4.1 准备2.2.4.2 代码测试 3 Centos安装配置occi库3.0 强调3.1 下载instantclient库文件压缩…

ubuntu 安装串口工具和添加虚拟串口

目录 一、串口工具安装 二、使用Windows本身虚拟的串口 &#xff08;一&#xff09;添加串口 1、保证虚拟机是关闭状态&#xff0c;打开“虚拟机设置”&#xff0c;点击“添加”。 2、选中“串行端口”&#xff0c;点击“完成”。 3、选中刚添加的串口&#xff0c;下拉选…

python快速入门

语法结构 基本输出 使用print函数来完成基本输出 print("I am xl")注释 单行注释使用# 多行注释 多行注释""" 多行注释 """缩进 python和其他语言最大的区别就是用缩进来区分子代码区域而不是大括号 续行 使用\符号来完成续行…

宠物用品小程序

近年来&#xff0c;越来越多的人选择将宠物视为家庭的一员&#xff0c;为宠物购买各种用品成为了一项重要的消费活动。因此&#xff0c;宠物用品小程序应运而生&#xff0c;为消费者提供了一个便捷的购买平台&#xff0c;同时也为宠物带来了更加幸福的生活。 登录乔拓云平台进入…

京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜

鲸参谋监测的京东平台9月份吸尘器市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年9月&#xff0c;京东吸尘器的销量为19万&#xff0c;环比下滑约12%&#xff0c;同比下滑约25%&#xff1b;销售额为1.2亿&#xff0c;环比下滑约11%&…

前端实现埋点监控

前端实现埋点&监控 实现埋点功能的意义主要体现在以下几个方面&#xff1a; 数据采集&#xff1a;埋点是数据采集领域&#xff08;尤其是用户行为数据采集领域&#xff09;的术语&#xff0c;它针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。通过埋…

本地生活商家用批量剪辑有用吗?

可以用&#xff0c;现在很多本地生活商家&#xff0c;都会通过借助批量剪辑工具来提升视频的曝光量&#xff0c;从而带动店铺的客流量。 推荐本地生活商家使用超级编导批量剪辑工具&#xff0c;这是一款0基础小白也可以很快上手的批量剪辑工具&#xff0c;剪辑页面布局以及功能…

python_PyQt5日周月K线纵向对齐显示_3_聚焦某段图形

目录 写在前面&#xff1a; 结果显示&#xff1a; 代码&#xff1a; 写在前面&#xff1a; “PyQt5日周月K线纵向对齐显示”&#xff0c;将分三篇博文描述 1 数据处理。将数据处理成适合图形显示的格式。&#xff08;已写&#xff0c;请看往期博文&#xff09; 2 显示工具…

不小心commit错误代码,还没push的回滚解决方法

命令&#xff1a;git reset --soft HEAD^ 第一步&#xff1a;找到项目所在文件夹 第二步&#xff0c;右键点击git base here 第三步&#xff0c;命令行输入git reset --soft HEAD^ 回车即可

【斗破年番】暗杀行动开始,萧炎斩杀负伤,彩鳞心疼霸气回击

【侵权联系删除】【文/郑尔巴金】 深度爆料&#xff0c;《斗破苍穹》年番第69集刚刚更新了&#xff01;在这集剧情中&#xff0c;萧炎和美杜莎筹划了一场暗杀行动&#xff0c;以保障炎盟的安全。他们根据小医仙提供的地图&#xff0c;分别负责击杀慕兰三老和雁落天这两位敌方强…