2. SPC5芯片架构与生产刷写关联
SPC5 是 ST 面向汽车动力总成与车身控制的高可靠 MCU 家族,典型代表如 SPC56、SPC57、SPC58。生产刷写与 EOL 测试并不是“把文件写进去再读出来”这么简单,它受芯片内部架构的硬约束:内核决定谁能执行刷写算法,Flash 决定写入粒度与擦除边界,RAM 决定刷写代码和缓冲区能放多大,外设决定通信通道与时钟来源,启动流程则决定芯片上电后先执行谁、从哪个存储区取指令。理解这些约束,才能解释为什么某些刷写顺序、波特率、块大小和测试项必须这样设计。
内核与执行权限:刷写算法必须“跑在正确的位置”
SPC5 多采用 Power Architecture 的 e200 系列内核(如 e200z0、e200z4、e200z6),带 MMU 或 MPU 保护。生产刷写时,刷写程序(Flash 编程算法)通常不能直接在待擦写的 Flash 里执行,因为擦写同一块 Flash 会导致取指失败。因此典型做法是:Bootloader 先把一段 RAM 驻留的编程函数(RAM routine)通过通信接口下载到 SRAM,再跳转执行,由它去操作 Flash 控制器。内核的指令集、对齐要求和异常向量位置,决定了这段 routine 的编译选项与入口地址。若芯片启用了 MPU,还必须保证 SRAM 区域对这段代码可执行、Flash 控制器寄存器可写,否则会出现取指异常或写保护错误。
Flash 结构:擦除粒度、写入粒度与 RWW 约束
SPC5 的 Flash 一般分为多个物理 bank 或分区,支持 RWW(Read-While-Write)时,一个 bank 在编程/擦除时另一个 bank 仍可读取。这对刷写策略影响很大:如果 Bootloader 与应用程序位于不同 bank,刷写 App 时 Bootloader 仍可运行;若两者在同一 bank,则刷写期间无法从该 bank 取指,必须把关键代码搬到 RAM。擦除通常以 sector 或 page 为单位,写入以 page 或 double-word 为单位。例如某 SPC58 器件 Flash 扇区为 8 KB、编程页为 256 B,则刷写一个 64 KB 的 App 至少需要 8 次扇区擦除和 256 次页编程。生产节拍估算时,必须把擦除时间(通常几十到几百毫秒/扇区)和编程时间(几十微秒/页)分别计入,而不是只算通信时间。
RAM 容量:刷写缓冲区与栈的边界
RAM 要同时容纳:通信接收缓冲区、Flash 编程页缓冲、RAM routine 代码、栈和全局变量。若采用 CAN 刷写,一帧最多 8 字节(经典 CAN)或 64 字节(CAN FD),但为了效率通常累积到一整页再写 Flash。假设页大小 256 B,则至少需要 256 B 页缓冲;RAM routine 约 1~2 KB;栈和变量再留 1 KB。若芯片 SRAM 只有 16 KB,还要给 Bootloader 运行留空间,就必须限制单次刷写块大小或采用边收边写。EOL 测试中若要在 RAM 里做校验和比对,也要预留对应缓冲区,否则会出现栈溢出或数据覆盖。
外设与时钟:通信通道、看门狗与刷写时序
生产刷写常用 CAN/CAN FD、LIN 或 UART。SPC5 的 FlexCAN 模块支持多邮箱和 FIFO,刷写时通常配置一个接收邮箱、一个发送邮箱,并关闭不需要的中断以降低抖动。时钟方面,刷写算法依赖系统时钟和 Flash 控制器时钟,若时钟配置错误,擦除和编程时序会超限,导致写入失败或数据不可靠。看门狗(SWT)在刷写期间必须被定期喂狗,否则芯片复位会中断刷写。EOL 测试还会用到 ADC、PWM、GPIO 等外设,测试项与刷写共用引脚时,必须明确引脚复用状态,避免刷写后外设未初始化导致测试误判。
启动流程:从复位向量到刷写入口
SPC5 上电后从固定复位向量取指,通常先执行 Boot Assist Module(BAM)或用户 Bootloader。BAM 会检查启动模式引脚或 Flash 中的有效标志,决定进入正常启动还是刷写模式。生产刷写正是利用这一机制:通过特定引脚电平或 CAN 唤醒帧,让芯片停留在 Bootloader 等待刷写命令,而不是跳转到 App。若 App 区校验失败,Bootloader 应能回退到刷写模式,这就是“双区”或“A/B 分区”策略的由来。EOL 测试时,测试程序通常也由 Bootloader 加载或直接刷入测试固件,因此启动流程决定了测试入口和测试完成后的跳转目标。
把架构约束落到刷写与测试参数上
在实际产线中,上述约束会直接转化为刷写规范里的具体数字。例如:由于 Flash 页为 256 B,CAN FD 单帧最多 64 B,则每页需要 4 帧数据加 1 帧校验,刷写工具应设置接收超时大于 4 帧传输时间;由于扇区擦除约 200 ms,一个 512 KB 的 App 若按 8 KB 扇区计算需擦除 64 次,仅擦除就约 12.8 s,因此节拍规划必须把擦除时间单独列出。EOL 测试若要在刷写后立即读取 Flash 校验和,必须等待 Flash 控制器忙标志清除,否则读到的是未完成数据。这些细节都来自芯片架构,而不是工具随意设定。
EOL 测试对启动流程的依赖
EOL 测试通常分两种进入方式:一种是由 Bootloader 直接加载测试固件到 RAM 或 Flash 并跳转,测试完成后擦除;另一种是刷入正式 App 后,通过诊断服务触发测试模式。前者对 RAM 容量和 Flash 分区更敏感,后者依赖 App 内的诊断栈和启动标志。无论哪种方式,测试程序都必须知道当前运行在哪个存储区、外设引脚处于什么状态、看门狗是否已初始化。若测试项涉及 Flash 写保护或选项字节,还要在启动早期完成配置,否则后续无法修改。因此,EOL 测试规范不能只写“测什么”,还要写“从哪进、在哪个区跑、跑完跳哪”。
总结来看,SPC5 的内核、Flash、RAM、外设和启动流程共同构成生产刷写与 EOL 测试的物理边界。刷写算法放哪里、一次写多大、擦除多久、测试从哪进入,都不是软件随意决定,而是由芯片架构推导出的工程结论。把这些约束提前纳入刷写规范和测试脚本,才能保证产线节拍稳定、刷写一次通过、测试结果可信。