当前位置: 首页 > news >正文

Bootloader

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

项目中遇到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.lryc.cn/news/63911.html

相关文章:

  • 安卓开发_广播机制_广播的最佳实践:实现强制下线功能
  • 国民技术N32G430开发笔记(10)- IAP升级 Application 的制作
  • [计算机图形学]材质与外观(前瞻预习/复习回顾)
  • Java 的简要介绍及开发环境的搭建(超级详细)
  • 每天一道算法练习题--Day15 第一章 --算法专题 --- -----------二叉树的遍历
  • golang - 函数的使用
  • 真题详解(极限编程)-软件设计(六十一)
  • 计算机网络笔记:TCP粘包
  • Vue(标签属性:ref、配置项:props、混入mixin、插件、样式属性:scroped)
  • 数仓建设规划核心问题!
  • 容器镜像的导入导出
  • Java每日一练(20230502)
  • JVM学习(九):堆
  • golang - switch
  • 浙大数据结构与算法一些有意思的理论基础题
  • 【热门框架】Mybatis-Plus怎样进行映射匹配兼容?Mybatis-Plus的ID有哪些生成策略
  • Http1.0 、1.1、2.0、3.0的区别
  • Python——基于YOLOV8的车牌识别(源码+教程)
  • c# 数据保存为PDF(一) (spire pdf篇)
  • Stable Diffusion使用方法
  • 高性能:负载均衡
  • Matplotlib 安装介绍
  • DNS:关于 DNS 基本概念的一些笔记整理
  • 机器人学一些知识
  • 应用,auto,内联函数
  • Flask框架的学习---01
  • 免费gpt-4-国内使用gpt-4
  • 《程序员面试金典(第6版)面试题 16.09. 运算
  • asp.net基于web的校园美食派送配送系统
  • 【JAVA】#详细介绍!!! 文件操作之File对象(1)!