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

相关推荐
箓维14 分钟前
TCP Socket的进阶实现
网络·笔记·tcp/ip
离凌寒39 分钟前
一、基于stm32+freertos下LD2410D和R60ADB1两款雷达的使用效果
stm32·单片机·嵌入式硬件
小羊没烦恼!1 小时前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
小Ti客栈1 小时前
Netty 零拷贝原理与实战
运维·服务器·网络
国科安芯1 小时前
商业光学遥感载荷焦平面供电链的低噪声稳压器研究综述——以国科安芯ASP7A84AS型3A低压差线性稳压器为器件级参照
大数据·网络·嵌入式硬件·平面·卫星·商业航天·抗辐射
幼儿园蛋小黄1 小时前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习
静以修身zzz1 小时前
计算云服务
运维·网络·云计算
星恒随风1 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
万联WANFLOW2 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
jimmyleeee2 小时前
Agent安全之六:(ASI06)记忆与上下文投毒——当 AI 把“昨天的错误”当成“今天的真理”
网络·人工智能·安全