车载测试: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…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
