车载测试:UDS之BootLoader刷写
BootLoader刷写
本文章是花费3小时结合多个项目实践总结和整体出来的,欢迎大家交流!
BootLoader刷写章节
①:预编程步骤流程+流程图
1.1 概述
1.2 流程步骤描述
1)整车ECU进入扩展会话
2)刷写条件检测
3)禁止记录DTC
4)关闭通讯
5)读取数据信息
1.3流程图
②:主编程步骤流程+流程图
2.1 概述
2.2流程步骤描述
1)目标ECU进入编程会话
2)解锁LEVEL_FBL安全等级
3)刷写Flashdriver
4)刷写应用程序
5)应用程序兼容性检测
2.3流程图
③:主编程步骤流程+流程图
3.1概述
3.2流程步骤描述
1)重启目标ECU
2)进入扩展会话
3)开启通讯
4)开启DTC记录
5)整车ECU进入默认会话
6)清除目标ECU故障码
3.3流程图
BootLoader 刷写流程
BootLoader刷写分为三个步骤:预编程步骤、主编程步骤和后编程步骤。在刷写流程开始后,诊断设备需以2秒的周期,功能寻址发送诊断在线服务($3E 80),以保持总线上其它ECU的诊断会话;
诊断在线服务($3E)不能打断或影响ECU的任何其他服务
预编程步骤流程+流程图
概述
预编程步骤用来做刷写前的CAN网络准备。此步骤的请求报文采用的是物理寻址和功能寻址(P:物理寻址,F:功能寻址)。
流程步骤描述
1)整车ECU进入扩展会话
诊断设备通过功能寻址,发送扩展会话请求($10 03),使整车ECU进入扩展会话。报文发送完成后需延时1s再执行后续步骤。
2)刷写条件检测
a)诊断设备通过物理寻址,发送例程控制服务($31 01 F0 02),此例程控制不需要安全访问,检查目标ECU是否满足刷写条件。
b)在刷写条件检测通过后,目标ECU应立即置位一个标志位,并同时启动一个5秒定时器。当定时器计数超时,或者目标ECU接收到编程会话(10 02)的请求,或者任何原因导致目标ECU重启、复位,此标志位都将清零。
c)此标志位置位时,目标ECU应正确执行编程会话(10 02)的请求。当标志位清零时,目标ECU将不能肯定响应编程会话(10 02)的请求,应对诊断设备发出的切换编程会话(10 02)的请求否定响应NRC22。
3)禁止记录DTC
诊断设备通过功能寻址,使用DTC设置服务($85 02),禁止CAN网络中的ECU记录DTC功能。报文发送完成后需延时1s再执行后续步骤。
4)关闭通讯
诊断设备通过功能寻址,使用通信控制服务($28 03 01),禁止CAN网络中的ECU发送和接收非诊断报文。$28 83 01报文发送完成后需延时1s再执行后续步骤。
5)读取数据信息
a)诊断设备通过物理寻址,读取目标 ECU 数据信息($22),读取内容包括但不限于:ECU 产品信息(F193)、零件号(0xF18C)、供应商代码(0xF18A)、硬件版本号(0xF089)、软件版本号(0xF189)、FBL版本信息(0xF180)、备份区软件版本号(F101)。
b)此步骤是否执行,或者执行读取后,目标ECU的响应内容(肯定响应或者否定响应),都不影响流程的继续执行。

主编程步骤流程+流程图
概述
主编程步骤用来编程一个或多个逻辑块。此步骤的请求报文采用的是物理寻址(P:物理寻址)。
流程步骤描述
1)目标ECU进入编程会话
a)诊断设备通过物理寻址,发送编程会话请求($10 02),使目标ECU进入编程会话;
b)进入编程会话后,目标ECU应对刷写请求标志位清零。
2)解锁LEVEL_FBL安全等级
诊断设备通过物理寻址,对目标ECU进行安全访问($27 07/08)。在此安全等级未解锁之前,后续的步骤将不能执行。
3)刷写Flashdriver
a)Flashdriver刷写至目标ECU指定的RAM区域。刷写序列由请求下载($34)、数据传输($36)、请求传输退出($37)和检查编程完整性($31 01 F0 01)4个服务组成;
b) 诊断设备通过物理寻址,发送例程控制服务($31 01 F0 01),包含4个字节的CRC32校验值参数。CRC32校验值用于验证此次下载逻辑块数据的完整性,如果检测不通过或者跳过此步骤直接请求主编程步骤4,目标ECU须拒绝执行,并返回NRC22。
4)刷写应用程序
a)应用程序刷写至目标ECU指定的非易失性存储器区域。刷写序列由擦除FLASH($31 01 FF 00)、请求下载($34)、数据传输($36)、请求传输退出($37)和检查编程完整性($31 01 F0 01)5个服务组成;
b)目标ECU在接收到擦除FLASH指令时,应先对应用程序有效位清零,防止刷写过程没有成功结束而意外执行应用程序。当应用程序有效位清零后,目标ECU才能开始执行擦除FLASH的动作;
c)诊断设备通过物理寻址,发送例程控制服务($31 01 F0 021),包含4个字节的CRC32校验值参数。CRC32校验值用于验证此次下载逻辑块数据的完整性;
5)应用程序兼容性检测
a)应用程序刷写完成后,诊断设备通过物理寻址,发送例程控制服务($31 01 FF 01),检测应用程序的完整性和依赖性。完整性定义为所有的的逻辑块是否全部成功下载;
b)检测通过后,目标ECU应立即置位应用程序有效位。

后编程步骤流程+流程图
概述
后编程步骤主要用来恢复整车CAN网络及DTC记录功能。此步骤的请求报文采用的是物理寻址和功能寻址(P:物理寻址,F:功能寻址)。
流程步骤描述
1)重启目标ECU
诊断设备通过物理寻址,使用复位服务($11 01),使目标ECU重启并跳转到应用程序。
2)进入扩展会话
诊断设备通过物理寻址,发送扩展会话请求($10 03),使目标ECU进入扩展会话。
3)开启通讯
诊断设备通过功能寻址,使用通信控制服务($28 00 03),开启CAN网络中的ECU发送和接收非诊断报文。
4)开启DTC记录
诊断设备通过功能寻址,使用DTC设置服务($85 01),开启CAN网络中的ECU记录DTC功能。
5)整车ECU进入默认会话
诊断设备通过功能寻址,发送扩展会话请求($10 01),使整车ECU进入默认会话。
6)清除目标ECU故障码
诊断设备通过物理寻址,使用清除故障码服务($14),清除目标ECU的故障码。
相关文章:
车载测试:UDS之BootLoader刷写
BootLoader刷写 本文章是花费3小时结合多个项目实践总结和整体出来的,欢迎大家交流! BootLoader刷写章节 ①:预编程步骤流程流程图 1.1 概述 1.2 流程步骤描述 1)整车ECU进入扩展会话 2)刷…...
OpenHarmony实战开发-MpChart图表实现案例。
介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI。本示例主要介绍如何使用三方库MpChart实现柱状图UI效果。如堆叠数据类型显示…...
brpc: bthread使用
使用bthread并发编程 #include <gflags/gflags.h> #include <butil/logging.h> #include <bthread/bthread.h>static void* func(void* args) {std::string* num static_cast<std::string*>(args);for(int i 0; i < 5; i) {LOG(INFO) << *…...
H.265视频直播点播录像EasyPlayer.js流媒体播放器用户常见问题及解答
EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。 今天我们来汇总下用户常见的几个问题及解答。 1、EasyPlayer.js播放多路H.265视…...
蓝桥杯杂题选做
海盗分金币 题目链接:1.海盗分金币 - 蓝桥云课 (lanqiao.cn) 题解:海盗分金币-Cheery的代码 - 蓝桥云课 (lanqiao.cn) 思路:倒着想就行。 等腰三角形 题目链接:1.等腰三角形 - 蓝桥云课 (lanqiao.cn) 题解:等腰三…...
【HTML】简单制作一个分形动画
目录 前言 开始 HTML部分 效果图 编辑编辑编辑编辑总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,其中HTML的文件名改为[index.html]&a…...
JVM修炼之路【11】- 解决内存溢出、内存泄漏 以及相关案例
前面的10篇 都是基础的知识,包括类加载的过程 类加载的细节,jvm内存模型 垃圾回收 等等, 这一篇我们开始实战了解一下 各种疑难杂症:怎么监控 怎么发现 怎么解决 内存溢出 内存泄漏 这两个概念在垃圾回收器里面已经讲过了&#…...
Java面试题:描述Java 17中的密封接口及其用途
Java 17是继Java 11和Java 16之后的又一个长期支持(LTS)版本,它于2021年9月发布。在Java 17中,一个重要的新特性是密封接口(Sealed Interfaces),这是对Java接口的增强,它允许接口有更…...
C++11的新特性
C11是由C标准委员会指定的语言规范。相比于C98/03,C11则带来了数量可观的变化,其中包含了约140 个新特性,以及对C03标准中约600个缺陷的修正,C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,…...
【C语言__动态内存管理__复习篇6】
目录 前言 一、动态内存管理 二、动态内存函数 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、动态内存常见的6个使用错误 3.1 接收malloc/calloc返回的参数后未及时检查是否为NULL 3.2 越界访问动态内存空间 3.3 对非动态开辟的内存使用free释放 3.4 使用free只释放了…...
C语言 | Leetcode C语言题解之第30题串联所有单词的子串
题目: 题解: typedef struct {char key[32];int val;UT_hash_handle hh; } HashItem;int* findSubstring(char * s, char ** words, int wordsSize, int* returnSize){ int m wordsSize, n strlen(words[0]), ls strlen(s);int *res (int *)mall…...
大数据dolphinscheduler 本地容器化安装
Minio 容器安装 docker run -p 9000:9000 -p 9090:9090 --name minio -d -e "MINIO_ACCESS_KEYminioadmin" -e "MINIO_SECRET_KEYminioadmin" -v D:\SF\DOCKER\minio\data:/data -v D:\SF\DOCKER\minio\config:/root/.minio minio/minio server /da…...
简单的车牌号识别
目录 处理流程与界面各接口编写时遇到的一些问题上传图片识别结果标签显示中文 处理流程与界面 首先点击“上传图片”按钮,可以选择文件夹中含有汽车车牌的图片,并显示在“图片框”中。 点击“检测车牌”按钮,会先对“图片框”中即含有汽车车…...
openGauss学习笔记-261 openGauss性能调优-使用Plan Hint进行调优-将部分Error降级为Warning的Hint
文章目录 openGauss学习笔记-261 openGauss性能调优-使用Plan Hint进行调优-将部分Error降级为Warning的Hint261.1 功能描述261.2 语法格式261.3 示例261.3.1 忽略非空约束261.3.2 忽略唯一约束261.3.3 忽略分区表无法匹配到合法分区261.3.4 更新/插入值向目标列类型转换失败 o…...
CSS水波纹效果
效果图: 1.创建一个div <div class"point1" click"handlePoint(1)"></div> 2.设置样式 .point1{width: 1rem;height: 1rem;background: #2ce92f;position: absolute;border-radius: 50%;z-index: 999;cursor: pointer;} 3.设置伪…...
迭代器模式:优雅地遍历数据集合
在软件设计中,迭代器模式是一种常见且有用的设计模式,它允许顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。这种模式在需要对集合进行遍历操作而又不想暴露集合内部结构的场景下非常有用。 一、迭代器模式的使用条件 访问集…...
c++总结笔记(一)
计算机可以将程序转化为二进制指令(即机器码),并由CPU执行,CPU会按照指令的顺序依次执行每个指令。 C语言特点: 简洁高效可移植模块化标准化 C语言的标准 C89(C90)标准C99标准C11标准 导入 使用include导入包含…...
[python][gradio]chatbot控件用法
chatbot模块是Gradio中的一个组件,用于展示聊天机器人的输出,包括用户提交的消息和机器人的回复。它支持一些Markdown语法,包括粗体、斜体、代码和图片等。Chatbot模块的输入不接受用户输入,而是通过函数返回的列表来设置聊天内容…...
Sublime Text下载,安装,安装插件管理器,下载汉化插件
SublimeTest官网 © Sublime Text中文网 下载安装 一路点击安装即可 安装插件管理器 管理器官网安装 - 包控制 (packagecontrol.io) 手动安装将3 位置点击网址下载 再打开SublimeTest 点击 选择第一个Browse Packages..... 将会跳转到文件夹中 进入上一个文件夹 在进入…...
c++ ,stl经常出现的<>尖括号其实就是模板类的实例化
通过比如vector<int> 实际上是调用了类似模板template<T t>class vector{...}实例化了一个使用int的vector类来进行定义,我们可以尝试简单的做一个自己的array类 template<typename T1 ,int d2> class array1 {private:T1 *p;int size;public:ar…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
