2. AURIX启动流程与底层软件加载
在AURIX TC3xx这类多核安全微控制器上,上电并不意味着CPU立刻开始执行用户代码。芯片内部存在一段由英飞凌固化在BootROM中的启动固件(Firmware),它负责在用户程序接管之前完成最基本的硬件初始化、启动模式判定、固件加载与安全校验。理解BootROM的行为,是判断“为什么我的程序没有跑起来”“为什么调试器连不上”“为什么刷写后芯片变砖”这类问题的前提。
BootROM做了什么
复位释放后,CPU0首先从BootROM的固定入口开始执行。BootROM固件按顺序完成几件事:配置基础时钟与看门狗、读取启动模式相关引脚与Flash配置区(UCB,User Configuration Block)、判断本次启动是“正常启动”还是“引导加载启动(BSL/Bootstrap Loader)”,并在需要时通过CAN、CAN-FD、LIN、ASC(串口)或HSM等接口接收外部固件。BootROM还会对Flash中的启动代码做完整性检查,例如校验启动软件的有效标志(如STAD/ABM等配置),只有通过检查才会跳转到用户Flash入口。
需要特别注意的是,BootROM本身不依赖用户Flash,因此即使Flash被擦除或校验失败,芯片仍能进入BSL模式等待外部刷写。这正是AURIX“刷不死”的基础,但前提是启动模式引脚与UCB配置允许进入BSL。
启动模式选择
TC3xx的启动模式主要由复位时的启动模式锁存引脚(Boot Mode Index,BMI)与UCB中的启动配置共同决定。常见模式包括:
- 内部启动(Internal Start):从用户Flash的启动入口执行,是最常见的量产模式。
- 引导加载启动(Bootstrap Loader):BootROM通过指定接口等待外部主机下发固件,常用于产线刷写或救砖。
- 备用启动(Alternate Boot):从Flash中的备用启动区执行,用于A/B分区或回滚。
- 调试启动:配合调试器在复位后立即接管CPU,用于底层调试。
启动模式引脚在复位释放瞬间被采样并锁存,之后引脚状态变化不再影响本次启动。因此“先拉引脚再复位”是进入BSL的关键时序要求。若引脚在复位期间抖动或上拉/下拉电阻不匹配,芯片可能进入非预期模式,表现为程序不运行或调试器无法连接。
固件加载与调试器连接时机
调试器(如英飞凌DAP miniWiggler、Lauterbach、UDE等)与AURIX的连接时机非常关键。若芯片已从Flash正常启动并运行用户代码,调试器通常通过DAP接口在运行中挂载(attach),此时需要用户代码未关闭调试接口、未进入低功耗或未触发安全保护。若芯片处于BSL模式,调试器一般无法直接接管,因为CPU0正运行BootROM固件,此时应通过刷写工具走BSL接口下发固件,或先让芯片进入内部启动再attach。
对于底层软件调试,推荐的做法是:先让芯片进入内部启动并保持复位可控,调试器在复位释放前完成连接配置,复位释放后立即在启动入口设置断点。这样可以观察BootROM跳转到用户代码后的第一条指令,避免错过早期初始化阶段。
底层软件加载的实际观察点
在调试底层软件时,可以通过以下现象判断启动流程走到了哪一步:
- 若调试器能在复位后立即停在BootROM地址范围(通常为0x8FFF8000附近),说明芯片进入了BSL或BootROM仍在运行。
- 若PC指针已跳到用户Flash入口(如0x80000000或0xA0000000),说明BootROM已完成校验并移交控制权。
- 若反复复位且无法attach,应检查启动模式引脚电平、UCB配置以及供电与复位时序。