Bootloader

news/2025/3/26 17:27:58/

本篇不作太过的技术了解,仅可作为初学最简单的语言讲清楚一件事。

项目中遇到Bootloader升级MCU,我很好这是什么软件,逻辑是什么,怎么升级的。

术语及定义

指纹信息fingerprint诊断仪用于标识特定的下载尝试的信息
逻辑块Logical Block目标内存的预留部分,用于下载应用程序数据(比如硬盘分区)
逻辑块表
 
Logical Block Table
 
目标内存被分割为几个逻辑块。 逻辑块表的作用是类似于文件系统分区表。如果要下载应用程序数据,引导加载程序将检查下载的逻辑块表中是否有有效的条目。
服务端server响应外部诊断设备发起的诊断请求的ECU
睡眠模式sleep  mode在ECU空闲阶段,用以降低能耗的模式
软件互锁Software Interlock软件联锁是一种保护性的锁定机制,通过将关键代码段从其他代码中分离出来,以防止意外的软件执行,例如在发生错误之后
 

 什么是BootLoader

        在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行,用来初始化硬件设备,建立内存空间映射图,以便为操作系统的启动做准备。在嵌入式系统中,通常没有想BIOS那样的的固定程序,因此整个系统的加载启动任务就完全由BootLoader来完成。在嵌入式系统中,系统在上电或复位时通常从地址0x0000出开始执行,BootLoader即从该地址开始执行,即上电或复位后执行的第一段代码。

通用需求

  1. ECU应该确保重编程的执行是处于安全状态。如果编程预条件不满足,那么重编程请求将被拒绝。通过一个“检查编程预条件” 例程控制来激活ECU编程预条件的检验。
  2. ECU需要检查下载到存储器中的数据的完整性。当一个逻辑块下载后,将使用CRC32算法验证当前逻辑块的所有数据字节是否被正确传输和写入。通过一个“ 检查编程完整性” 例程控制来激活ECU完整性验证。当ECU接收到此服务请求时, 引导程序软件将计算下载数据字节的CRC32值,并将计算结果与诊断仪请求报文中发送的校验值进行比较

依赖性检查:

        不兼容的软件不能配合使用,如果配合使用可能会使功能异常或产生致命性错误。因此, ECU应该通过验证软件兼容性来检查重编程依赖性,包括应用软件与引导程序软件、应用数据与应用软件等。依=赖性检查机制由ECU供应商制定

重编程计数

        每个可重编程的ECU应将重编程计数存储于非易失性存储器。重编程计数描述了已执行重编程事件的次数。电控单元在生产时应置重编程计数为0。一旦执行存储器擦除操作,重编程计数增ECU最大可刷新次数应获得诊断工程师的认可并在ECU诊断规范中注明

软件有效性验证

       ECU内部定义一个标志位,用于标识应用软件是否有效。如果重编程完整性检查和重编程依赖性检查都正确, ECU将设置应用软件的标志位为有效。只有标志位为有效时,应用软件才可以运行

擦除:擦除例程由 FBL 调用,以擦除所请求的闪存区域。
写入:所有下载数据是由 FBL 使用闪存驱动器的写例程进行编程。

容错处理

        无论是由于电压异常,通信异常, ECU异常复位,内存设备故障等导致无法正常完成重编程时序,硬复位或上电复位后, ECU必须始终可以从头开始整个重编程下载过程,直到有效的目标软件已成功下载并成功刷新为止。 ECU在重编程失败重新进入FBL时,必须保证看门狗工作正常。ECU应完善兼容性检查方法,正确识别应用程序的有效性,避免执行无效应用程序。应用程序应保证可以通过诊断请求,将外部重编程标志位置为有效。 ECU必须先将应用程序有效标志位置为无效,再执行flash擦除操作,且在正确执行所有重编程流程前,不能将应用程序有效标志位置为有效。
 

睡眠模式

        ECU在重编程过程中不能休眠。当ECU处于空闲状态,没有接收到任何诊断消息,也没有有效的应用程序可以启动时,应该进入FBL中的睡眠模式来降低功耗。在内部睡眠定时器超时后, FBL进入睡眠模式。定时器的初始值应该为300秒。内部睡眠定时器在FBL初始化过程中启动。 ECU接收到的每个诊断消息都将重置睡眠定时器。 当睡眠定时器超时, FBL必须进入睡眠模式。睡眠模式必须根据特定硬件的要求来实现,以便在任何活动(如以太网通信或启动)中可以被正确唤醒。

源文件格式要求

        源文件格式是Intel格式( *.hex)或者Motorola格式( *.s19) 。源文件中每个数据块的起始地址、长度以及类型(例如:应用软件或标定数据等)应在描述文档中进行说明,一份描述文档应和源文件一同释放。

网关 ECU 要求

        依据网关支持的通信协议,网关ECU的诊断需求参考[6], [8]和[11]中相关章节关于路由需求的定义。 功能寻址的诊断请求网关需要处理,也必须被路由,即使是网关节点自身在被刷写。 如果对网关节点自身进行重编程, 网关的Bootloader必须在其连接的各个网段上发出诊断在线报文( 3Eh)。

所有支持重编程的ECU,应当包含Bootloader软件。
系统在正常操作模式下发起请求时,必须能够执行bootloader。
系统在应用软件丢失, 无效或损坏时, 必须执行Bootloader软件。

应用软件和应用数据可以同时编程或者相互独立编程,不允许重编程时更新Bootloader软件。
系统执行boot软件必须不能影响总线正常通信

ECU的APP必须支持部分UDS的服务和子功能。


 

  1. 指纹信息
  2. 写入指纹数据


http://www.ppmy.cn/news/58508.html

相关文章

gdb server简单探索

前言 gdb server运行于嵌入式设备,比如arm或arm64体系结构,体积小,占用资源少,相当于一个前端。gdb server可以attach到一个strip的进程。 gdb运行于性能更高的主机,如x86设备上,需要有带符号表的相应进程…

2023-04-30 LeetCode每日一题(移动石子直到连续)

2023-04-30每日一题 一、题目编号 1033. 移动石子直到连续二、题目链接 点击跳转到题目位置 三、题目描述 三枚石子放置在数轴上,位置分别为 a,b,c。 每一回合,你可以从两端之一拿起一枚石子(位置最大或最小&…

21.面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 参考文档:店主自己整理的说明文档,公式、约束、数据齐全,可联系我查看 仿真平台:MATLAB YA…

Ubantu docker学习笔记(八)私有仓库

文章目录 一、建立HTTPS链接1.在仓库服务器上获取TLS证书1.1 生成证书颁发机构证书1.2 生成服务器证书1.3 利用证书运行仓库容器 2.让私有仓库支持HTTPS3.客户端端配置 二、基本身份验证三、对外隐藏仓库服务器3.1 在服务器端3.2 在客户端进行 四、仓库可视化 在前面的学习中&a…

C语言函数声明以及函数原型

所谓声明(Declaration),就是告诉编译器我要使用这个函数; 函数声明的格式,是去掉函数定义中的函数体,并在最后加上分号; 也可以不写形参,只写数据类型: dataType functionName( d…

JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT)

现今的社会是一个信息飞速发达的社会,其中在信息的交流当中,互联网占据着一个非常重要的位置。人们可以通过在互联网上收到最新的消息,也可以通过互联网进行信息的交流。而论坛就是大家进行信息交流的其中一个渠道。 论坛的概念:论…

【前端面经】vue-Vue的Diff算法

什么是Diff算法? Diff算法是Vue.js的一个核心特性,它是一种用于比较虚拟DOM树的差异,并最小化DOM操作的数量。当Vue.js检测到数据更改时,它会生成一个新的虚拟DOM树,并将其与旧虚拟DOM树进行比较。Diff算法会查找差异…

【Python习题集6】类与对象

类与对象 一、实验内容二、实验总结 一、实验内容 1.设计一个Circle类来表示圆,这个类包含圆的半径以及求面积和周长的函数。在使用这个类创建半径为1~10的圆,并计算出相应的面积和周长。 半径为1的圆,面积: 3.14 周长: 6.28 半径为2的圆&am…