Bootloader
本篇不作太过的技术了解,仅可作为初学者的参考。用嘴简单的语言讲清楚一件事。
项目中遇到Bootloader升级MCU,我很好这是什么软件,逻辑是什么,怎么升级的。
术语及定义
指纹信息 fingerprint 诊断仪用于标识特定的下载尝试的信息
逻辑块 Logical Block 目标内存的预留部分,用于下载应用程序数据(比如硬盘分区)
逻辑块表
Logical Block Table
目标内存被分割为几个逻辑块。 逻辑块表的作用是类似于文件系统分区表。如果要下载应用程序数据,引导加载程序将检查下载的逻辑块表中是否有有效的条目。
服务端 server 响应外部诊断设备发起的诊断请求的ECU 睡眠模式 sleep mode 在ECU空闲阶段,用以降低能耗的模式 软件互锁 Software Interlock 软件联锁是一种保护性的锁定机制,通过将关键代码段从其他代码中分离出来,以防止意外的软件执行,例如在发生错误之后
什么是BootLoader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行,用来初始化硬件设备,建立内存空间映射图,以便为操作系统的启动做准备。在嵌入式系统中,通常没有想BIOS那样的的固定程序,因此整个系统的加载启动任务就完全由BootLoader来完成。在嵌入式系统中,系统在上电或复位时通常从地址0x0000出开始执行,BootLoader即从该地址开始执行,即上电或复位后执行的第一段代码。
通用需求
- ECU应该确保重编程的执行是处于安全状态。如果编程预条件不满足,那么重编程请求将被拒绝。通过一个“检查编程预条件” 例程控制来激活ECU编程预条件的检验。
- 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的服务和子功能。
- 指纹信息
- 写入指纹数据
相关文章:
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 …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
