使用TRACE32烧写Flash,连接成功只是起点,芯片脚本、Flash地址、目标RAM、看门狗、缓存和程序文件还要逐项匹配。下面围绕“TRACE32怎么烧写Flash程序TRACE32烧写Flash失败如何检查配置”展开,直接按照实际操作顺序说明烧写与排查方法。
一、TRACE32怎么烧写Flash程序
操作前先确认目标是片内Flash还是外部NOR Flash,并优先使用完整芯片型号对应的PRACTICE脚本。相近型号即使内核相同,Flash控制器、扇区结构和烧写算法也可能不同。
1、查找并核对Flash脚本
①记录芯片完整型号、内核架构、Flash起始地址、容量和程序文件格式。
②进入TRACE32安装目录,在~~/demo/
③查看脚本开头的参数说明,确认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脚本;脚本支持准备模式时,可执行:
DO
②执行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
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
⑤继续执行:
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烧写和故障排查有所帮助,如需进一步了解相关配置,可联系咨询。