当前位置: 首页 > 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. 写入指纹数据

相关文章:

Bootloader

本篇不作太过的技术了解,仅可作为初学者的参考。用嘴简单的语言讲清楚一件事。 项目中遇到Bootloader升级MCU,我很好这是什么软件,逻辑是什么,怎么升级的。 术语及定义 指纹信息fingerprint诊断仪用于标识特定的下载尝试的信息 …...

安卓开发_广播机制_广播的最佳实践:实现强制下线功能

安卓开发_广播机制_广播的最佳实践:实现强制下线功能 ActivityCollector类用于管理所有的ActivityBaseActivity类作为所有Activity的父类创建一个LoginActivity来作为登录界面布局LoginActivity 在MainActivity中加入强制下线功能布局MainActivity在BaseActivity中注…...

国民技术N32G430开发笔记(10)- IAP升级 Application 的制作

IAP升级 Application 的制作 1、App程序跟Bootloader程序最大的区别就是, 程序的执行地址变成了之前flash设定的0x08006000处, 大小限制为20KB 所以修改Application工程的ld文件 origin 改成 0x08006000 length 改成0x5000 烧录是起始地址也要改为x0x…...

[计算机图形学]材质与外观(前瞻预习/复习回顾)

一、图形学中的材质 不同的物体表面有着不同的材质,而不同的材质意味着它们与光线的作用不同。那么我们之前在介绍辐射度量学和渲染方程提到过其中一个函数,叫做BRDF,而在实际上,也就是BRDF定义了不同的材质。BRDF决定了光如何被反…...

Java 的简要介绍及开发环境的搭建(超级详细)

图片来源于互联网 目录 | CONTENT Java 简介 一、什么是 Java 二、认识 Java 版本 三、选择哪个版本比较好 搭建 Java 开发环境 一、下载 Java 软件开发工具包 JDK 二、配置环境变量 自动配置 手动配置 三、下载合适的 IDE IntelliJ IDEA Visual Studio Code Eclip…...

每天一道算法练习题--Day15 第一章 --算法专题 --- -----------二叉树的遍历

概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了。很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的。比如要你找到树中满足条件的节点,就是间接考察树的遍历…...

golang - 函数的使用

核心化编程 为什么需要函数? 代码冗余问题不利于代码维护函数可以解决这个问题 函数 函数:为完成某一功能的程序指令(语句)的集合,称为函数 在 Go 中,函数分为:自定义函数(自己写…...

真题详解(极限编程)-软件设计(六十一)

真题详解(二分查找平均值)-软件设计(六十)https://blog.csdn.net/ke1ying/article/details/130417464 VLANtag属于 数据链路层实现。 数据链路层:网桥交换机。 网络层:路由器。 物理层:中继器。 Telent…...

计算机网络笔记:TCP粘包

默认情况下, TCP 连接会启⽤延迟传送算法 (Nagle 算法), 在数据发送之前缓存他们. 如果短时间有多个数据发送, 会缓冲到⼀起作⼀次发送 , 这样可以减少 IO 消耗提⾼性能。 如果是传输⽂件的话, 那么根本不⽤处理粘包的问题, 来⼀个包拼⼀个包就好了。但是如果是多条消息, 或者…...

Vue(标签属性:ref、配置项:props、混入mixin、插件、样式属性:scroped)

一、ref(打标识) 前面提及到了标签属性:keys 这里将了解ref:打标识 正常布置脚手架并创建入口文件main.js,引入组件 1. 可以给元素注册引用信息(获取真实DOM) 给一个按钮获取上方的dom的方法,方…...

数仓建设规划核心问题!

小A进入一家网约车出现服务公司,负责公司数仓建设,试用期主要一项 OKR是制定数据仓库建设规划;因此小 A 本着从问题出发为原点,先对公司数仓现状进行一轮深入了解,理清存在问题,然后在以不忘初心原则提出解…...

容器镜像的导入导出

容器镜像的导入导出 第1关:导入导出容器 任务描述 ​ 本关任务是学习导入导出容器,要求学习者参照示例完成将busyboxContainer容器的文件系统保存为一个tar包,通过该tar包导入一个busybox:v1.0镜像。 相关知识 将 "容器的文件系统&…...

Java每日一练(20230502)

目录 1. 二叉搜索树的最近公共祖先 🌟🌟 2. 随机分组问题 🌟 3. K 个一组翻转链表 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…...

JVM学习(九):堆

一、堆(Heap)的概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。同时,堆内存的大小是可以调节的。《Java虚拟…...

golang - switch

switch 的使用 switch 语句用于基于不同条件执行不同操作,,直每一个 case 分支都是唯一的,从上到下逐一测试到匹配为止匹配项后面也不需要再加 break switch 表达式 {case 表达式1, 表达式2, ... :语句块1case 表达式2, 表达式3, ... :语句块…...

浙大数据结构与算法一些有意思的理论基础题

堆栈 有人给出了堆栈用数组实现的另一种方式,即直接在函数参数中传递数组和top变量(而不是两者组成的结构指针),其中Push操作函数设计如下。这个Push函数正确吗?为什么? #define MaxSize 100 ElementTyp…...

【热门框架】Mybatis-Plus怎样进行映射匹配兼容?Mybatis-Plus的ID有哪些生成策略

Mybatis-Plus提供了两种映射匹配兼容的方式:驼峰转下划线和全局配置。 驼峰转下划线 默认情况下,Mybatis-Plus会将Java类中的驼峰命名方式自动映射到数据库表中的下划线命名方式。例如,Java类中的userName属性会自动映射到表中的user_name字…...

Http1.0 、1.1、2.0、3.0的区别

巨人的肩膀 3.1 HTTP 常见面试题 | 小林coding HTTP1.0与HTTP1.1 HTTP1.1在HTTP1.0上的改进: 使用长连接的方式改善了HTTP1.0中短连接造成的性能开销支持管道网络传输,不必等到上一个的响应,就可以接着发送第二个请求,减少整体响…...

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 (教程) 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求,今天完成了,在此记录和分享 首先&#x…...

c# 数据保存为PDF(一) (spire pdf篇)

文章目录 前言了解 Spire使用Spire.PDF1 创建简单的PDF文档2 创建带有格式的PDF文档(使用Draw)头部信息页眉页脚测试数据完整的代码 3 创建带有格式的PDF文档(使用Gird)小结 先上一个效果图 前言 项目中需要将一些数据转存为PDF …...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...