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 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...