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

相关推荐
不像程序员的程序媛12 小时前
检测网络的命令mtr详解
网络
天启HTTP12 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_13 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
fly_sunnn13 小时前
STM32-GPIO
stm32·单片机·嵌入式硬件
hz5678915 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
优橙教育15 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
AIgorithmGEEK15 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
宵时待雨16 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
zhangzhangkeji16 小时前
stm32 14-1 WDG 看门狗:理论部分
stm32