BootLoader—基于CAN的FBL详解

功能概述

BootLoader,顾名思义,就是驻留在ECU非易失性存储器(NVM)中的一段程序加载代码,每次ECU复位后,都会运行bootloader。它会检查是否有来自通信总线的远程程序加载请求(外部重编程请求,比如10 02),如果有,则进入bootloader模式,建立与程序下载端(通常为PC上位机)的总线通信并接收通信总线下载的应用程序、解析其地址和数据代码,运行NVM驱动程序,将其编程到NVM中,并校验其完整性,从而完成应用程序更新。如果没有来自通信总线的远程程序加载请求,则直接跳转到应用程序复位入口函数。

FBL刷写流程图

Start或者Reset以后,首先会检查是否有外部重编程请求(10 02),如果有重编程请求,此时就会直接进入BT的编程会话进行软件升级操作。

如果没有外部重编程请求,再检查APP是否有效,如果APP有效,就跳到APP默认会话;如果APP无效,就跳到BT里面的默认会话。

如果没有外部重编程请求,且APP有效,这时候就进入APP里的默认会话,在APP默认会话里请求10 03进入扩展会话,扩展也可以请求10 01进入默认会话,但是扩展会话请求10 02以后,就会把外部重编程位置1,也就是外部重编程有效,这时候再进行Reset操作,Reset相当于是一个开关,然后流程重新开始,外部重编程有效,进入BT里面的编程会话,就开始升级操作,升级完成后然后进行reset。

如果没有外部重编程请求,且APP无效,就会进入BT下的默认会话,走相应的流程,也会重新进行升级的操作,软件的升级就是在BT里的编程会话下完成,APP有效一般是跟Flash Driver擦除有关,在擦除前,我们就该把APP的有效位置0,防止擦除中Reset进APP,APP有效位置0的情况有,擦除前置0,APP扩展会话下使外部重编程标志位有效时使APP有效位置0

BT升级步骤

Step1:预编程

10 03 (Func) 进扩展

31 01 02 03 预编程检查(车速、转速)

85 02 (Func) 停止DTC状态位的更新

28 03 01 (Func) 禁通信

Step2:主编程

10 02 进编程会话

27 01 安全访问请求种子

27 02 安全访问发送密钥

#34 请求下载FlashDriver

#36 传输FlashDriver数据

#37 退出FlashDriver数据传输

31 01 02 02 完整性校验

31 01 FF 00 擦除内存,一般与APP大小相同

#34 请求下载APP

#36 传输APP数据

#37 退出APP数据传输

31 01 02 02 完整性校验

31 01 FF 01 兼容性校验,检查下载的内容与服务器的内存是否协调

Step3:后编程

#28 开启通信

#85 开启DTC

#11 Reset

相关推荐
星期天21 小时前
1.1嵌入式之51单片机 (定时器与中断系统简略描述)
单片机·嵌入式硬件·51单片机·进阶·初学者入门
公众号/头条号:技术很有趣1 小时前
2025年11月 系统架构设计师考试复盘
职场和发展·软件工程
qinyia3 小时前
WisdomSSH解决NFS服务因“RPC fragment too large“导致的性能警告
网络·网络协议·rpc
松涛和鸣3 小时前
22、双向链表作业实现与GDB调试实战
c语言·开发语言·网络·数据结构·链表·排序算法
SoftwareTeacher4 小时前
提高软件工程质量 - 租易项目
软件工程
天宇&嘘月9 小时前
Nginx的https搭建
网络·nginx·https
_星辰大海乀9 小时前
IP 协议
服务器·网络·tcp/ip·nat·子网掩码·ip协议
屿行屿行10 小时前
【Linux】Socket编程(基于实际工程分析)
linux·服务器·网络
Evan芙10 小时前
Rocky Linux 9 网卡改名及静态IP地址配置完整步骤
linux·网络·智能路由器