Trace32中文网站 > 使用教程 > Trace32 Flash脚本怎么写 Trace32自动擦写与校验怎么做
教程中心分类
Trace32 Flash脚本怎么写 Trace32自动擦写与校验怎么做
发布时间:2026/04/27 14:46:34

  Trace32 Flash脚本怎么写,先不要把重点放在“命令越多越完整”。Lauterbach官方资料里,真正稳定的Flash流程通常就三段,先连目标并准备Flash驱动,再进入重编程模式装载镜像,最后退出重编程模式并重新装入符号。官方示例里已经给出了这条主线,而且也明确说明PRACTICE脚本就是TRACE32用来做自动化的标准脚本形式,扩展名是.cmm。

  一、Trace32 Flash脚本怎么写

 

  真正写脚本时,先别自己从空白命令开始猜。Lauterbach官方明确提供了demo和start-up scripts搜索入口,也建议到处理器架构手册和demo目录里找对应脚本,因为具体Flash driver会跟CPU架构、片上Flash还是外部Flash、以及板级连接方式一起变化。也就是说,脚本框架可以通用,驱动文件和部分细节要按目标平台替换。

 

  1、先把脚本骨架搭起来

 

  最常见的骨架就是“目标连接、驱动准备、重编程、镜像装载、退出重编程、重新装符号”这六步。Lauterbach在官方TrustZone培训材料里给出的Flash编程示例,正是按这个顺序展开的。

 

  2、标准骨架可以先按下面这样写

 

  下面这段不是随意拼出来的,而是按Lauterbach官方示例的顺序整理成了更适合保存和截图的窄行版本。具体的CPU名称、driver文件和ELF文件名,需要替换成你自己的目标。

  3、这段脚本里每一步在干什么

 

  【SYStem.CPU】和【SYStem.Up】用于建立目标连接;【DO...PREPAREONLY】先准备Flash编程所需的驱动声明;【FLASH.ReProgram ALL】打开重编程流程;【Data.LOAD.Elf.../NoSYmbol】把程序实际写入Flash;【FLASH.ReProgram OFF】结束重编程;最后再用【Data.LOAD.Elf.../NoCODE】只装入符号和调试信息,方便后续调试。这个顺序与Lauterbach官方示例一致,其中【FLASH.ReProgram】也在官方发布历史里被明确描述为用于提升Flash重编程效率的命令。

 

  二、Trace32自动擦写与校验怎么做

 

  自动擦写这件事,在TRACE32里通常不是单独再写一长串擦除命令,而是把【FLASH.ReProgram】包在镜像装载前后。Lauterbach官方示例就是这样做的,先进入【FLASH.ReProgram ALL】,再装载ELF,最后【FLASH.ReProgram OFF】退出。对很多常见目标来说,这已经是自动擦写加编程的主流程。

 

  1、自动擦写先放进统一脚本,不要手工点

 

  PRACTICE本来就是TRACE32的自动化脚本语言,官方也支持通过【File】→【Run Script】或命令行【DO】来执行脚本。因此更稳的做法,是把目标初始化、擦写、编程和校验都放进一份.cmm里统一跑,而不是每次手工点几条命令。这样后面版本切换、夜构烧写和问题复现都会容易很多。

 

  2、自动校验建议紧跟在编程后面

 

  Lauterbach公开的PRACTICE参考卡给出了【Data.ComPare】配合【FOUND()】和【TRACK.ADDRESS()】的标准比较写法,可以用来判断两个地址区是否一致,并拿到首个差异地址。换到Flash流程里,最稳的做法通常就是在烧写完成后,拿已编程的Flash地址区去和你的期望镜像地址区做一次回读比对。这里的“期望镜像地址区”怎么准备,取决于你当前工程的装载方式,但“编程后紧跟比对”这个思路是成立的。

  3、校验子过程可以写成单独子程序

 

  如果你不想把校验逻辑和烧写逻辑揉在一起,可以把比较过程单独封装成一个子程序。Lauterbach的PRACTICE参考卡就给出了【Data.ComPare】加【RETURNVALUES】的子程序写法,适合在脚本结尾统一判断成功还是失败。下面这段是按官方参考卡结构整理后的窄行版本。

  4、自动流程里最好再加错误处理

 

  如果脚本里一旦出错就直接停掉,后面批量烧写时很难知道是连接问题、驱动问题,还是校验失败。Lauterbach的PRACTICE参考卡给了【ON ERROR GOSUB】这种标准错误处理写法,所以更稳的方式,是在脚本开头就把错误入口设好,把烧写失败、文件不存在和校验失败统一收口到日志输出。

 

  三、Trace32脚本落地时哪些地方最容易出错

 

  很多Flash脚本不是结构错了,而是目标相关部分没替换干净。Lauterbach官方一直把demo目录和处理器架构手册作为首选入口,这本身就在说明一个事实,Flash驱动和初始化命令是强目标相关的。脚本框架能复用,但驱动文件、CPU类型、镜像文件和校验地址范围,不能直接从别人的脚本里生搬。

 

  1、驱动文件路径没换

 

  官方示例里用的是【DO~~/demo/arm/flash/.cmm PREPAREONLY】这种形式,这里的driver只是占位,不是固定文件名。你如果直接照抄而不替换成自己目标对应的driver,脚本形式看上去是对的,真正运行时还是会失败。

 

  2、编程后忘了重新装符号

 

  很多人脚本写到【FLASH.ReProgram OFF】就停了,结果后面想调试时发现符号、源码和断点状态都不对。Lauterbach官方示例在重编程结束后,又专门补了一次【Data.LOAD.Elf.../NoCODE】来装载符号,这一步不要省。

 

  3、校验范围和镜像范围没对齐

 

  【Data.ComPare】本身只能比较两个地址区是否一致,比较什么范围、从哪个起始地址开始、镜像期望值放在哪个地址区,这些都要你自己先定准。若范围写大了、地址区写错了,校验失败并不一定说明Flash没烧好,也可能只是你比较的不是同一段内容。这个判断是基于Lauterbach给出的【Data.ComPare】使用方式做出的实施要求。

  总结

 

  Trace32 Flash脚本怎么写Trace32自动擦写与校验怎么做,最稳的思路不是把命令越堆越多,而是先把脚本分成“目标连接、驱动准备、重编程、镜像装载、校验收口”这几段。自动擦写可以直接放进【FLASH.ReProgram】包裹的装载流程里,自动校验则建议紧跟编程后,用【Data.ComPare】和错误处理把结果收住。只要脚本骨架固定、driver和地址范围按目标替换,后面这类流程就很容易稳定下来。

135 2431 0251