汽车ECU BootLoader升级

文章目录

  • 什么是 BootLoader
  • Bootloader刷写使用的协议
  • Bootloader 的划分
  • FBL、PBL、SBL
    • 1、SBL
    • 2、PBL
  • ECU 升级/刷写
    • 1、OBD接口升级
    • 2、OTA 云升级
  • Bootloader中诊断升级流程
    • 1、预编程
    • 2、编程
    • 3、后编程
  • 参考

什么是 BootLoader

MCU正常运行时总是从固定地方取指令,顺序运行,程序更新时需要使用烧录器等工具烧录,于是有人将程序设计成,由一个程序跳转到另一个程序,这个程序通常称作Bootloader,另一个叫做APP。

Bootloader是一段独立的程序。它包含启动代码、中断、主程序(Boot_main函数)、操作系统(非必须)。Bootloader存在的意义就是指更新App程序。

Bootloader刷写使用的协议

UDS(Unified Diagnostic Services,统一诊断服务)诊断协议是用于汽车行业诊断通信的需求规范,由ISO 14229系列标准定义。

Bootloader 的划分

一个ECU包含了三部分 Boot ManagerApplication Software以及Boot Software,其中Boot SoftwareBoot ManagerReprogramming Software组成,在汽车嵌入式中,我们常说的bootloader就是Boot Software

  • Boot manager:引导程序启动
  • Reprogramming Software: 更新软件程序,主要更新App程序

在这里插入图片描述
程序运行到Boot Manager以后,通过一些条件判断,决定进入Application Software还是Reprogramming Software。
如果进入Application Software,则意味着功能运行;如果进入Reprogramming Software,则意味着需要更新Application Software。

FBL、PBL、SBL

Boot Loader在嵌入式系统里,一般分为两部分:PBL(Primary Bootloader,第一引导加载程序)和SBL(Second Bootloader,第二引导加载程序)。

FBL 和 PBL 实际是一个。

ECU的内存至少需要划分三个部分:FBL、SBL、App。

1、SBL

SBL的本质就是Reprogramming Software,和我们经常提到的"Bootloader"作用一样,为更新Application而生。

2、PBL

因为整车销售到终端用户以后,只能通过OBD接口或者OTA方式升级Application,而这两种方式,均需要依赖Bootloader程序,如果Bootloader程序不可用,对应的ECU就不能正常使用。
所以,针对Bootloader更新失败这种工况,需要一个程序专门刷写Reprogramming Software,这个程序仅出厂烧录一次,以后永远不更新。这个程序就是 PBL。

这样,即使刷写Reprogramming Software失败,还可以重新刷写Reprogramming Software,之后,Reprogramming Software再更新Application程序。这样,就不会出现ECU不可用的情况。

PBL依然保留刷写程序的功能,但是,限定PBL仅刷写或者激活SBL,激活SBL以后,由SBL负责更新Application Software。

ECU 升级/刷写

ECU 升级的内容一般分为 boot 和 APP 。
同时,ECU的升级方式又有2种:

  • 通过 OBD 接口升级
  • 通过 OTA 云升级

1、OBD接口升级

OBD接口升级,即使用诊断仪,通过OBD 接口与 ECU 连接进行升级。

Boot 刷新所用到的两个文件是FlashDriver驱动程序和boot软件,在这里我们可以将SBL理解为FlashDriver驱动程序,PBL理解为Boot软件。
Boot 刷写一般都是刷写 SBL,SBL存在的意义就是更新APP程序。

当MCU收到1002请求,ECU复位后会进入PBL模式中判断是否跳转到 SBL;如果需要进行APP 更新,程序就会跳转到SBL进行APP更新。

APP 刷新是通过 SBL,SBL先擦除 APP flash数据,再将新的 APP 刷写到 flash。

2、OTA 云升级

OTA是Over-the-Air的简称,既空中下载的意思,具体指远程无线方式。

对于汽车的OTA升级,主要分FOTA和SOTA两种。

  • SOTA只针对软件升级,例如显示屏上某个APP软件的升级;是对车系系统的VI展现、操作方式方面的优化,对于车辆驾驶体验来说不会有任何提升。
  • FOTA是对ECU、悬架控制单元等等车辆核心驾控部件的升级,带来的更多是驾驶体验的整体提升。例如更新 BMS的 APP 数据。

OTA 升级只能用来升级 APP 数据,通常使用 A/B 双bank 分区策略。
在这里插入图片描述

所谓A/B 双bank 分区升级,是指在设备上开辟两个存储空间(A/B存储空间),每个存储空间上均安装有一个系统,其中一个系统处于激活使用状态,另外一个系统处于备用待命状态。在进行系统升级时候,可在激活的系统中对备用系统进行升级,升级完成重启后切换成新升级的系统。
在这里插入图片描述
是否同步分区风险,详细点击跳转原文

Bootloader中诊断升级流程

在这里插入图片描述

UDS服务设计复杂,Bootloader升级一般分为以下三步:

  • 1)预编程

  • 2)编程

  • 3)后编程

在这里插入图片描述

1、预编程

在进入刷新之前,UDS的85服务和28服务,关闭DTC诊断同时停发非诊断报文。使整个CAN网络处于静默(Silent)状态。这是对整车网络进行操作的,一般都是以功能寻址(Functional addressing)的方式来发送。

注意:先用85服务关闭DTC,再使用28服务关报文。

  • 关闭DTC诊断是防止升级过程误报DTC(例如通信丢失DTC等)
  • 关闭CAN通信是为了降低总线负载,加快刷写速度。

此阶段的主要​做一些Application Software升级前的检查,确保正式升级Application软件之前,车辆工况的安全性。

这里举几个常见的检查条件:车速、诊断电压、KL15信号有效性等。

  • 车速:约束车速<2Km/h,也就是说不允许车辆行驶过程中进行软件升级。
  • 诊断电压:诊断电压会约束在一定的范围,比如:10V~16V,避免升级过程中,因电压过低或者过高导致刷写失败。
  • KL15信号有效性:为了确保收到的信号质量,一般会检查这个信号的有效性(Valid or Invalid),有效的信号才能确保升级过程中的稳定性。

以上这些都是安全检查,目的就是一个保证安全。

2、编程

在这里插入图片描述

3、后编程

刷写完成之后,ECU进行重启,重新进入扩展会话,打开之前关闭的配置。
注意:先使用28服务开启报文,再用85服务打开DTC记录。

ECU重启 常用的做法就是执行ECU Reset,也可以让诊断刷写的S3时间超时,程序重新复位。

参考

  • https://zhuanlan.zhihu.com/p/554132450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/414048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch集智-5手写数字识别器-卷积神经网络

1 简介 简称:CNN,convolutional neural network 应用场景:图像识别与分类(CNN),看图说话(CNNRNN)等 优越性:和多层感知机相比,cnn可以识别独特的模式&…

云原生演进中的AI算力高效使用

0 1 云原生技术的普及与发展 云原生技术是一种基于容器技术的轻量级、高可用的应用架构,具有弹性扩展、快速部署、统一管理等特点。随着企业对敏捷开发和快速迭代的需求不断增加,云原生技术的普及与发展已成为不可逆转的趋势。 图1. 云原生技术发展之路…

QtAV:基于Qt和FFmpeg的跨平台高性能音视频播放框架

目录 一.简介 1.特性 2.支持的平台 3.简单易用的接口 二.编译 1.下载依赖包 2.开始编译 2.1克隆 2.2修改配置文件 2.3编译 三.试用 一.简介 官网地址:http://www.qtav.org/ Github地址:https://github.com/wang-bin/QtAV 1.特性 ●支持大部分…

深入探究 JavaScript 中的 String:常用方法和属性全解析(中)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

pyspark 笔记:窗口函数window

窗口函数相关的概念和基本规范可以见:pyspark笔记:over-CSDN博客 1 创建Pyspark dataFrame from pyspark.sql.window import Window import pyspark.sql.functions as F employee_salary [("Ali", "Sales", 8000),("Bob&qu…

springcloud Client端cloud-consumer-order80

文章目录 简介建立module修改pom修改yml主启动类把公共代码写在一个mudule 里面测试 简介 这个是和之前的8001相互配合端口测试 这里的80的用户测试端口。 代码在:GitHub 上:https://github.com/13thm/study_springcloud/tree/main/days2 建立module …

SpringBoot + 自定义注解 + AOP 打造通用开关

前言 最近在工作中迁移代码的时候发现了以前自己写的一个通用开关实现,发现挺不错,特地拿出来分享给大家。 为了有良好的演示效果,我特地重新建了一个项目,把核心代码提炼出来加上了更多注释说明,希望xdm喜欢。 案例 …

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配&…

【BERT】详解

BERT 简介 BERT 是谷歌在 2018 年时提出的一种基于 Transformer 的双向编码器的表示学习模型,它在多个 NLP 任务上刷新了记录。它利用了大量的无标注文本进行预训练,预训练任务有掩码语言模型和下一句预测,掩码语言模型指的是随机地替换文本中…

Lucas求大组合数C(n,m)%p

将大组合数C&#xff08;n,m&#xff09;%p分解为小组合数C&#xff08;n,m&#xff09;%p乘积的模&#xff0c;n<10^18,m<10^18。 其中求解小组合数可以根据定义式计算&#xff08;质因子分解&#xff09;&#xff0c;也可以通过定义式的变形计算&#xff08;逆元&…

边缘计算AI智能分析网关V4客流统计算法的概述

客流量统计AI算法是一种基于人工智能技术的数据分析方法&#xff0c;通过机器学习、深度学习等算法&#xff0c;实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术&#xff0c;其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤…

Cinder组件作用

1、Cinder下发的流程 &#xff08;1&#xff09;Cinder-api接受上层发送的创建请求&#xff0c;然后把请求下发给Cinder-scheduler调度服务 &#xff08;2&#xff09;Cinder-scheduler调度服务&#xff0c;计算出哪个主机更适合创建&#xff0c;计算出来之后再把请求下发到Ci…