2. AURIX TC3xx存储与启动架构
在AURIX TC3xx上开发Bootloader,第一件必须搞清楚的事不是通信协议,而是“代码到底放在哪里、上电后CPU从哪里取第一条指令”。TC3xx的存储体系不是一块连续Flash,而是由PFlash、DFlash、UCB、BMHD、HSM等多个物理与逻辑区域共同构成,启动入口又受BMHD和启动模式引脚共同约束。如果这些区域的位置和职责没有理清,后续刷写地址、擦除扇区、跳转入口都会出错。
一、PFlash与DFlash:程序与数据的物理分区
TC3xx的片上非易失存储主要分为两类:Program Flash(PFlash)和Data Flash(DFlash)。PFlash用于存放启动代码、应用程序、中断向量表以及Bootloader本体,按Bank和Sector组织,典型扇区大小为16 KB或更小,擦除以扇区为单位,写入以Page为单位。DFlash则用于存放标定数据、EEPROM仿真数据、配置参数等,擦写粒度更细,适合频繁更新的小数据块。
以TC375为例,PFlash通常包含多个Bank,例如PF0、PF1、PF2等,每个Bank又划分为若干Logical Sector。Bootloader一般驻留在PFlash的起始区域,例如0xA0000000开始的PF0 Sector 0~Sector 2,而应用程序放在其后的Sector中。这样做的原因是:TC3xx复位后,CPU从固定的Boot ROM入口开始执行,Boot ROM会根据BMHD和启动模式决定是否跳转到用户代码。Bootloader放在最前面,可以保证在任何应用被擦除或损坏的情况下,系统仍能进入刷写模式。
DFlash在Bootloader场景中通常承担“刷写标志位、版本号、刷写计数、校验和”等小数据的存储。例如可以把“是否请求进入Bootloader”的标志放在DFlash的某个Page中,应用程序在跳转前写入该标志,复位后Bootloader读取该标志决定是否停留在刷写模式。DFlash的擦写次数远高于PFlash,适合这种频繁修改的场景。
二、UCB与BMHD:启动配置的源头
UCB(User Configuration Block)是TC3xx中一组特殊的配置块,位于DFlash区域,每个UCB包含多个Page,用于存放启动模式、时钟、调试接口、Flash保护等配置。UCB不是普通数据,它带有冗余和校验机制,写入后需要正确计算校验和,否则会被Boot ROM判为无效。
BMHD(Boot Mode Header)是UCB中最重要的结构之一。它定义了复位后的启动行为,关键字段包括:
- STAD:用户代码起始地址,即Bootloader或应用程序的入口地址。
- BMI:Boot Mode Index,决定启动模式,例如内部启动、外部启动、Alternate Boot Mode等。
- BMHDID:标识该BMHD是否有效。
- CRC:整个BMHD的校验和,Boot ROM会验证。
TC3xx通常有多个BMHD副本(例如BMHD0~BMHD3),Boot ROM会按顺序检查,选择第一个有效的BMHD。如果所有BMHD都无效,芯片会进入Boot ROM的应急模式。因此,在量产刷写系统中,Bootloader必须保证至少一个BMHD始终有效,且其STAD指向Bootloader入口,而不是应用程序入口。应用程序的跳转由Bootloader自己完成,而不是依赖BMHD直接指向应用。
三、HSM与启动模式选择
HSM(Hardware Security Module)是TC3xx中独立的安全核,拥有自己的存储和启动流程。HSM的启动与主核启动并行但相互约束:主核Boot ROM会检查HSM是否使能,如果HSM使能且配置了安全启动,主核会等待HSM完成校验后才继续。对于Bootloader而言,如果量产系统启用了HSM,刷写流程必须考虑HSM固件是否也需要更新,以及HSM对PFlash区域的访问权限是否会影响Bootloader的擦写操作。
启动模式选择由BMI字段和外部引脚共同决定。常见模式包括:
- Internal Start:从内部PFlash启动,最常用。
- Alternate Boot Mode:从备用区域启动,常用于Bootloader与应用程序互为备份。
- External Start:从外部总线启动,量产中较少使用。
- Boot ROM Mode:进入Boot ROM的串行刷写模式,通常用于工厂首次刷写。
实际项目中,Bootloader通常利用“Internal Start + BMHD指向Bootloader”的组合。上电后,Boot ROM读取BMHD,跳转到Bootloader入口;Bootloader初始化时钟、CAN或以太网,检查DFlash中的刷写标志。如果标志有效,则停留在刷写模式等待上位机命令;如果标志无效,则校验应用程序的CRC,通过后跳转到应用程序入口。
四、Bootloader在存储映射中的驻留位置与启动入口
综合以上结构,Bootloader在TC3xx中的典型驻留策略是:
- 物理位置:PFlash Bank 0 的起始Sector,例如0xA0000000~0xA0007FFF,占用3个16 KB Sector。
- BMHD配置:至少一个有效BMHD的STAD指向0xA0000000,BMI设置为Internal Start。
- DFlash标志:在DFlash中分配一个Page,例如0xAF000000,存放“进入Bootloader请求”标志和应用程序CRC。
- 应用程序入口:由Bootloader在运行时读取应用程序向量表的复位向量,通过函数指针跳转,而不是由BMHD直接指向。
这种布局的好处是:应用程序可以被完整擦除和重写,而Bootloader始终位于BMHD指向的固定入口,不会因为应用更新失败而变砖。量产刷写系统在上位机侧只需要知道Bootloader的通信接口和刷写协议,不需要关心应用程序的具体地址,因为地址映射由Bootloader内部的Flash驱动管理。
理解这些存储区域和启动路径之后,后续的Flash驱动、擦写地址计算、跳转逻辑才有明确的依据。Bootloader的入口不是“随便放一个地址”,而是由BMHD、PFlash物理布局和启动模式共同决定的固定锚点。