Trace32中文网站 > 最新资讯 > TRACE32怎么烧写Flash程序 TRACE32烧写Flash失败如何检查配置
教程中心分类
TRACE32怎么烧写Flash程序 TRACE32烧写Flash失败如何检查配置
发布时间:2026/07/31 17:56:40

  使用TRACE32烧写Flash,连接成功只是起点,芯片脚本、Flash地址、目标RAM、看门狗、缓存和程序文件还要逐项匹配。下面围绕“TRACE32怎么烧写Flash程序TRACE32烧写Flash失败如何检查配置”展开,直接按照实际操作顺序说明烧写与排查方法。

  一、TRACE32怎么烧写Flash程序

 

  操作前先确认目标是片内Flash还是外部NOR Flash,并优先使用完整芯片型号对应的PRACTICE脚本。相近型号即使内核相同,Flash控制器、扇区结构和烧写算法也可能不同。

 

  1、查找并核对Flash脚本

 

  ①记录芯片完整型号、内核架构、Flash起始地址、容量和程序文件格式。

 

  ②进入TRACE32安装目录,在~~/demo//flash/中查找对应的.cmm脚本,~~代表TRACE32安装目录。

 

  ③查看脚本开头的参数说明,确认CPU型号、Flash类型以及是否支持PREPAREONLY参数。

 

  ④需要修改板级时钟、复位或外部总线时,先把脚本复制到项目目录,不要直接改动安装目录中的原文件。

 

  2、建立连接并测试目标RAM

 

  ①给目标板正常供电,检查VTref、复位线以及JTAG或SWD接线。

 

  ②在命令行窗口执行启动脚本,例如:

 

  DO board_start.cmm

 

  该脚本用于完成CPU、调试接口、复位方式和基础时钟初始化。

 

  ③执行SYStem.Up建立连接,再执行Break停止CPU,确认寄存器能够正常读取。

 

  ④从MAP文件中选择一段确定未使用的RAM地址,进行写入和读回测试。RAM访问不稳定时,暂缓Flash烧写,先检查RAM时钟、地址映射和访问权限。

 

  3、执行Flash烧写和比较

 

  ①运行对应的Flash脚本;脚本支持准备模式时,可执行:

 

  DOPREPAREONLY

 

  ②执行FLASH.List,核对Flash起止地址、扇区数量和程序文件覆盖范围。

 

  ③执行下面的命令进入重编程状态:

 

  FLASH.ReProgram ALL/Erase

 

  加入/Erase可以清理虚拟编程区,避免旧程序未覆盖的内容继续保留。

 

  ④烧写ELF文件时执行:

 

  Data.LOAD.Elf

 

  烧写BIN文件时执行:

 

  Data.LOAD.Binary

 

  BIN文件本身不包含加载地址,因此必须与芯片存储器映射和工程链接地址一致。

 

  ⑤文件加载完成后执行:

 

  FLASH.ReProgram off

 

  这一步会把待处理扇区真正写入目标Flash,执行期间不能复位目标板、关闭电源或断开调试器。

 

  ⑥烧写ELF文件后执行差异比较:

 

  Data.LOAD.Elf/DIFF

 

  BIN文件进行比较时,仍要使用与烧写时相同的起始地址。标准流程为进入重编程状态、加载程序、关闭重编程状态,再比较目标Flash中的实际数据。

 

  4、复位并验证程序启动

 

  ①按照芯片脚本规定的方式复位目标,恢复烧写期间临时调整的缓存、PLL和总线配置。

 

  ②读取复位向量和程序计数器,确认CPU进入工程设定的启动地址。

 

  ③运行程序并检查串口输出、程序版本号或板级状态。

 

  ④Flash比较没有差异,但程序仍然无法运行时,应转查启动引脚、向量表、链接地址、引导模式和安全启动设置,不要继续重复烧写。

  二、TRACE32烧写Flash失败如何检查配置

 

  排查时要先记录失败发生在哪条命令。连接、Flash声明、算法运行和数据比较对应的检查方向不同,把全部设置一起修改会让问题更难复现。

 

  1、根据报错位置确定范围

 

  ①SYStem.Up执行失败时,检查目标供电、VTref、复位线、调试接口、调试时钟和CPU型号。

 

  ②FLASH.List显示的地址缺失或范围错误时,重新选择Flash脚本,并检查脚本中的器件型号。

 

  ③出现bus error时,检查Flash基地址、地址映射、外部总线控制器和CPU写权限。

 

  ④出现erase error或programming error时,检查扇区保护、目标供电、Flash工作时钟和数据访问宽度。

 

  ⑤出现FLASH algorithm did not execute completely时,重点检查看门狗、数据缓存和算法使用的目标RAM。

 

  2、重新检查调试连接

 

  ①降低JTAG或SWD时钟,再执行启动脚本和SYStem.Up。

 

  ②核对脚本中的CPU型号与芯片丝印,不能仅根据Cortex-M、Cortex-R或TriCore等内核名称选择近似型号。

 

  ③让CPU在复位后立即停止,暂时关闭用户程序触发的看门狗、低功耗和软件复位。

 

  ④连续读取同一段RAM与Flash地址,确认数据保持稳定后再继续擦写。

 

  3、重新建立Flash声明

 

  ①执行FLASH.RESet清除旧的Flash声明。

 

  ②重新运行与准确芯片型号对应的Flash脚本。

 

  ③执行FLASH.List,比对起止地址、扇区边界、总线宽度和器件单元编号。

 

  ④使用外部NOR Flash时,检查片选范围、数据宽度、等待周期和总线写权限。

 

  ⑤新器件脚本尚未验证时,可先采用工具控制式烧写。确认Flash声明、总线配置和基本擦写正常后,再切换为速度更快的目标控制式烧写。

 

  4、检查Flash算法是否被中断

 

  ①关闭看门狗,防止Flash算法运行期间CPU突然复位。

 

  ②关闭Flash地址范围对应的数据缓存,避免Flash状态寄存器的读取和更新受到缓存干扰。

 

  ③核对算法代码区、数据缓冲区和堆栈使用的RAM,确认这些地址真实存在、可以写入且没有被其他程序占用。

 

  ④执行下面的命令,仅分析程序文件的加载区域:

 

  Data.LOAD.auto/NoCODE

 

  ⑤继续执行:

 

  sYmbol.List.MAP

 

  查看ELF文件中的代码段和数据段分别会加载到哪些地址。

 

  ⑥发现ELF中的RAM段覆盖Flash算法工作区时,调整算法RAM地址,或者把程序下载范围限制在Flash地址段内。看门狗复位、数据缓存开启和程序文件覆盖算法区,都可能导致Flash算法没有完整执行。

 

  5、检查文件地址和写保护

 

  ①查看ELF工程的MAP文件,确认代码段、向量表和常量段都处于Flash声明范围内。

 

  ②烧写BIN文件时,计算起始地址加文件长度,确认文件结束位置没有超出Flash范围。

 

  ③出现数据对齐错误时,让加载命令的访问宽度与Flash声明中的总线宽度保持一致。

 

  ④确认目标扇区是否已经启用写保护。只有芯片脚本明确要求时,才执行FLASH.UNLOCK ALL。

 

  ⑤不要随意擦除OTP、安全配置区、启动配置区或芯片生命周期区域,这些区域的部分设置可能无法恢复。

 

  ⑥重新烧写后再次执行/DIFF比较,记录首个差异地址,再检查对应扇区的保护状态、ECC配置和地址映射。

 

  三、把烧写流程保存为脚本

 

  稳定的烧写方案应拆成连接、准备、烧写和验证几个阶段,让每一步都能够单独停止和复查。

 

  1、整理分阶段脚本

 

  ①连接脚本只配置CPU、调试接口、复位方式和调试时钟。

 

  ②准备脚本关闭看门狗与缓存,初始化RAM、外部总线并建立Flash声明。

 

  ③烧写脚本依次执行FLASH.ReProgram ALL/Erase、加载程序文件、FLASH.ReProgram off和差异比较。

 

  ④把芯片型号、程序文件路径、BIN起始地址和算法RAM地址设置成集中变量,更换固件时只修改这些位置。

  2、保留烧写验证结果

 

  ①在脚本开始时输出芯片型号、Flash范围、文件名称和BIN起始地址。

 

  ②出现失败时,记录具体命令、错误信息和首个差异地址。

 

  ③烧写完成后复位目标,分别记录“数据比较通过”和“程序启动正常”,避免把两种结果混为一项。

 

  总结

 

  处理“TRACE32怎么烧写Flash程序TRACE32烧写Flash失败如何检查配置”时,要按照芯片脚本、调试连接、Flash声明、算法RAM、文件地址和保护状态逐项验证。烧写结束后还要完成差异比较与启动检查,不能只看程序文件是否加载完成。希望本文对大家完成TRACE32烧写和故障排查有所帮助,如需进一步了解相关配置,可联系咨询。

135 2431 0251