图解基于UDS的Flash BootLoader
这张图和恒润教程中的BootLoader流程大体是一致的。
预编程阶段
1. 3E TP报文。
2. 10服务切换到03扩展模式。
3. 85服务和28服务,关DTC和非诊断报文。使整个CAN网路处于安静的状态。
主编程阶段
1. 10服务切换到编程模式,肯定响应后应跳转到boot段程序。
2. 读取一个DID,tester要判断一下返回值。返回值里面可能包含密钥的一部分信息。
3. 27服务,解锁,通过安全验证。
4. 写DID指纹,标记写软体人的身份,ECU回复写指纹成功。(该步骤是否为必须实现?)
5. 31服务,擦除Flash。ECU肯定响应,擦除成功。
6. 34服务,请求数据下载,ECU回复确认最大块大小。
7. 36服务,开始传输数据。每个块传输完成后,ECU肯定响应。
8. 37服务,请求退出传输。ECU肯定响应。判断是否还有更多块需要下载。若有更多块需要下载,重新执行34-36-37服务。若无,往下执行。
9. 31服务,校验APP段程序,检查编程一致性/完整性。ECU肯定响应。校验成功。
10. 11服务,ECU复位。之后应直接跳转到新下载的APP段程序中。
后编程状态
1. 10服务切换到03扩展会话。
2. 执行85服务和28服务,使能DTC和非诊断报文。
3. 27服务,安全校验,准备写入数据。
4. 2E服务,将编程信息写入到ECU中。
5. 10服务,退回01默认会话。结束。
BootLoader的启动顺序与转换流程
1. ECU上电或复位后,先进入Boot段。从Flash/EEPROM中读取 App有效标志,运行boot标志 。
2.判断 运行boot标志 ,若为1,则进入Boot段的编程会话(安全等级为上锁),之后写Flash/EEPROM, 运行boot标志 清零。若S3定时器超时则退回Boot段默认会话。
3. 经过安全访问进入Level2解锁状态,开始执行App内存擦除,擦除后 App有效标志 清零。
4. 开始烧写。烧写成功后 运行boot标志 写0,App有效标志 写1。
2*. 判断 运行boot标志 ,若为0,则进入Boot段的默认会话。
3*. 50ms后判断 App有效标志 ,若为1,则 跳转到 App段默认会话。实现时使用汇编指令执行APP段程序;若为0,退回Boot段默认会话,且不再判断 App有效标志,不会再尝试进入App段。
4*. App段程序若收到了编程会话请求, 运行boot标志写1 ,随即执行ECU复位,这样会重新进入boot段程序。
注:从BOOT跳入APP前需要判断APP的数据完整性,例如进行CRC校验。
未完工
参考资料:
1.汪春华, 白稳峰, 刘胤博, et al. 基于CAN汇流排UDS服务BootLoader应用开发[J]. 电子测量技术, 2017, 40(2):166-170.
2.FlashBootloader - 图文 - 百度文库
3.https://blog.csdn.net/u010875635/article/details/84660611
4.http://blog.xueming.org/archives/63
5.张丁:基于UDS的ECU软体刷写流程
推荐阅读: