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

相关推荐
码农学院2 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
REDcker9 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT11 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
微硬创新11 小时前
耐达讯自动化 CC-Link IE 转 PROFINET网关在污水厂智能化升级实战
人工智能·物联网·网络协议·自动化·信息与通信
晏宁科技YaningAI11 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
AI的探索之旅15 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
茯苓gao15 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
GeekArch15 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程