车载测试: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…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
