文章目录
1. Bootloader
- Bootloader 是嵌入式系统在上电或重启后执行的第一段代码,主要完成 CPU 和相关硬件的初始化,以及将操作系统 os 映像或固化的嵌入式应用程序装载到内存中,最后跳转到操作系统所在的空间,启动操作系统运行。
- Bootloader 作为一个独立的程序,内部包含启动代码、中断、主程序(Boot_main 函数)、操作系统(非必须)等。
1.1 为什么要用 Bootloader
- 假设这样一个场景:车辆某个 ECU 的 Application Software 出现了异常,导致车辆无法正常行驶,当软件工程师修复好 Application Software 的 bug 后,就需要利用 Bootloader 将修复好的Application Software 重新刷写进 ECU。
- 所以 Bootloader 是为更新/修复 Application Software 而生的,那么既然是为更新/修复Application Software 而存在,Bootloader 就没有必要时常更新。当车辆下线以后,Bootloader 就固化在 ECU 指定内存区,不做更新,而 Application Software 可能会因用户的需求存在升级的可能。
1.2 Bootloader 如何更新 App Software
- 了解 Bootloader 如何更新 Application Software 之前,我们需要先了解程序上电的执行流程。
- 上图为 ISO 14229-1 给出的程序上电后的执行流程,可以看出,一个 ECU 包含三个独立部分:Boot Manager、Application Software、Reprogramming Software。而 Boot Software = Boot Manager + Reprogramming Software。在汽车嵌入式开发中,我们常说的 Bootloader 就是指 Boot Software。
- 当 ECU 上电或程序复位后,最先执行 Boot Manager 代码,在这个过程中检查 Application 的更新标志:ProgrammingRequest,判断应用程序是否请求升级。如果没有请求升级,那么再判断一下 ApplicationValid 标志,即检验当前应用程序是否有效,如果有效就跳转到 Application 程序,即 Application 的主程序(main 函数)。注意:如果是多核系统(英飞凌系列芯片),则跳转到 core0_main() 主程序;如果是单核系统,则跳转到单核的 main() 程序;
- 如果 Application 请求升级,则程序跳转到 Reprogramming Software 下的非默认会话进行升级。
1.3 APP Software 程序升级步骤
- 对于汽车 ECU 的 Application Software 升级,OEM 几乎都遵循 UDS 规范,主要分为三个阶段:Pre-Programming Step、Programming Step、Post-Programming Step。
- Pre-Programming Step:此阶段主要做一些 Application Software 升级前的检查,确保正式升级 Application 软件前,车辆工况的安全性。例如:
- 车速:约束车速<3Km/h,即不允许车辆在行驶过程中进行软件升级;
- 诊断电压:诊断电压会被约束在一定的范围内,如:9V~16V,避免升级过程中因电压过低或过高导致刷写失败;
- KL15 信号的有效性:为确保接收到的信号质量,一般会检查 KL15 信号的有效性,有效的信号才能确保升级过程中的稳定性。
当然,每家OEM的条件检查可能有所区别,但是,都为一个目的:安全。
- Programming Step:完成车辆工况的安全检查后,即可进行 Application Software 的软件升级。Application Software 的软件升级遵循 UDS 协议,主要流程如下:
- Step1:进入编程会话,只有在该会话下才能进行 Application Software 升级;
- Step2:执行 27 服务,完成安全访问解锁;
- Step3:写指纹信息,如新的 Application 程序的软件版本号;
- Step4:将 Flash Driver 下载到 ECU 中,为擦除旧的 Application Software 做准备,确切的说是下载内存擦除例程(Memory Erase Routine)。一般 Flash Driver 不会放在 ECU 内部,担心程序异常跑到 Flash Driver 中将有效的 Application 擦除,所以,Flash Driver 只有在 Application 程序升级/更新/修复时才下载到 ECU 的 RAM 区。
- Step5:检查 Flash Driver 的有效性,只有 Flash Driver 下载成功,之后的 Application 程序擦除和更新才能成功。
- Step6:将旧的 Application 擦除;
- Step7-Step8:与 Step4-Step5 过程相似,这里下载的是 Flash Driver 的内存编程例程(Memory Programming Routine)并检查该例程的有效性;
- Step9:刷写新的 Application Software 到 ECU;
- Step10:刷写完成后,检查下载数据的完整性,确保数据可靠;
- Step11:检查 Application Software 的有效性,比如签名(signature)是否正确等;
- Step12:编写配置信息,比如车辆 VIN 等。
- Post-Programming Step:此阶段主要是 Application Software 更新后的网络恢复,即 Application Software 更新好后重新参与工作,常用的做法就是执行 ECU Reset(下左),也可以让诊断刷写的 S3 时间超时,程序重新退至默认会话状态。
2. SBL PBL FBL
- SBL(Secondary Bootloader,第二引导加载程序),对应前面所讲的 Reprogramming Software 部分,仅当应用程序无效或需要升级时使用,即专门用于更新 Application;
- PBL(Primary Bootloader,第一引导加载程序),也称 FBL(Frist Bootloader)。前面讲述了 Application 的更新依赖于 SBL,那么当 SBL 失效后,该如何呢?这就是 PBL 的作用,专门刷写 Reprogramming Software,该程序仅在出厂前烧录一次,以后永远不更新。 PBL 仅限于刷写或激活 SBL,激活 SBL 后,再由 SBL 更新 Application Software。