五分钟搞懂UDS刷写34/36/37服务(内含S19文件解读)
目录
34服务
36服务
37服务
S19文件介绍
理论太多总是让人头昏,通过举例的方法学习刷写是最好的办法,刷写中最重要的就是34/36/37服务之间的联动,在我当前的项目中37服务较为简单,等待36服务全部传输完成之后,发送37ECU自动回复77即可,因此37不是本次的重点。UDS的刷写流程又不太明白的可以看这里UDS刷写流程(新手向)。
34服务
34服务是数据请求服务,格式如下图所示:


简单来说 34服务每个位数的作用如下所示:
34 00(报文是否加密,是否压缩 默认00) 44(内存字节大小和内存地址长度) XX XX XX XX(四个字节的内存地址) XX XX XX XX(四个字节的内存字节大小)
74 20(长度格式标识符) XX XX(36一次能传的数据长度)
34服务的dataFormatldentifier一般默认为00,addressAndLengthFormatldentifer的意思代表占用内存的字节大小和内存地址的长度,如图所示:

在项目中具体的内存大小和地址如下图所示,此处可以看到红框框起来的地址和3101FF00擦除地址所需要的地址是同一个,这都是通过解析刷写文件解析出来的。

74后跟的第一个字节lengthFromatldentifier,bit7-4表示maxNumberOfBlockLength的长度,因此可以看到后面 00 00 04 02刚好是4个字节,bit3-bit0是保留字节一般为0。
74后跟的第二个字节maxNumberOfBlockLength,代表每一个36传输过来的最大长度(包含了36 01本身),比如这里是0x402,则代表36服务每次最多传输1026个字节过来。从报文中可以看到,后面的36服务确实每个传输的都是1026。这个值在代码中用于去分割刷写文件,如果大家需求大的话,后期会进行如何使用CAPL进行刷写的讲解。
36服务

36服务则较为简单需要注意就是blockSequenceCounter刚开始传输是从01开始的,等经过了FF再次传输时则是从00开始的。
3601后跟的则是从刷写文件中提取的数据,需要注意的是最后的6F是校验位所以并没有读取
可能很多朋友对S19文件并不熟悉,在文章的最后会对S19文件进行讲解。
37服务
37服务较为简单如图所示,第二个字节是User定义,因此在该项目是没有的。

S19文件介绍
此处默认大家一般刷写都用S19文件,因此对于概念及用处就不做过多的介绍了,直接进入正题:
S19文件每一行数据全部由记录类型和十六进制数字组成,包含类型、长度、地址、数据和校验和五个部分。
以下举例详细介绍每个组成部分
S19中记录类型包括S0、S1、S2、S3、S5、S7、S8、S9,S4是保留的,目前没有定义[1]。
S0:位于文件的第一行,和其他行不同,地址部分没有使用,用“0000”置位,整行表示记录的开始;数据场中的信息被划分为以下四个子域(此行表示程序的开始,不需烧入memory):
name(名称):20个字符,用来编码单元名称
ver(版本):2个字符,用来编码版本号
rev(修订版本):2个字符,用来编码修订版本号
description(描述):0-36个字符,用来编码文本注释。
S1:表示地址长度为两字节(4字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S2:表示地址长度为三字节(6字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S3:表示地址长度为四字节(8字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S5:表示文件中含有S1、S2、S3记录的个数,其后不接数据,包含S5的记录并不是每个文件必须的;
S7:表示地址长度为四字节(8字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
S8:表示地址长度为三字节(6字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
S9:表示地址长度为两字节(4字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
只有S1、S2、S3、S5需要写入Flash中。

S0 11 0000 0000486578766965772056312E31 08 :
长度:长度包含一个字节,长度 = 地址字节数 + 数据字节数 + 校验和字节数;
0x11转换成十进制为17,即地址2+数据14+校验1 三部分长度为17;
地址:表示该行的起始地址,字节数由类型决定,S1位两个字节,S2为三个字节,S3位四个字节;
0000.由于是S0类型,所以地址位不用,使用0000置位,表示记录的开始;
数据:0000486578766965772056312E31,解析为HexviewV1.1(版本生成工具信息)
校验和:08, 校验和=0xff – (记录长度 + 存储地址 + 数据)——>0xff-(0x11+0x00+0x00 +0x00+0x00+0x48+0x65+0x78+0x76+0x69+0x65+0x77+0x20+0x56+0x31+0x2E+0x31)=0xff-(0x3F7)——>0x3F7取0xF7——>0xff-0xf7=0x08
S3 0D 00F98000 015A000000FA0400 20:
类型:S3,地址长度为4个字节
长度:0x0D转换成十进制为13,即地址4+数据8+校验1 三部分长度为13;
地址:00F98000.表明将数据015A000000FA0400下载到从地址00F98000开始的一段连续的地址中;
数据:015A000000FA0400
校验和:20, 校验和=0xff – (记录长度 + 存储地址 + 数据)——>0xff-(0x0D+0x00 +0xF9 +0x80 +0x00 +0x01 +0x5A +0x00 +0x00 +0x00 +0xFA +0x04 +0x00)=0xff-(0x2DF)——>0x2DF取0xDF——>0xff-0xDF=0x20
最后贴出项目中的一个文件以供大家参考:

[1] 引用 【嵌入式烧录/刷写文件】-S19文件解析(首行数据解析)_s19文件-CSDN博客
相关文章:
五分钟搞懂UDS刷写34/36/37服务(内含S19文件解读)
目录 34服务 36服务 37服务 S19文件介绍 理论太多总是让人头昏,通过举例的方法学习刷写是最好的办法,刷写中最重要的就是34/36/37服务之间的联动,在我当前的项目中37服务较为简单,等待36服务全部传输完成之后,发送…...
知识图谱智能问答系统技术实现
知识图谱是以一种结构化的方式存储和描述知识的数据集合,它将知识表示为节点和边的形式,并可以对这些节点和边进行有意义的存储、查询、连接和关系挖掘等操作。知识图谱不仅可以为人提供理解信息的能力,而且还能为机器提供对信息进行分析、推…...
【unity】如何汉化unity编译器
在【unity】如何汉化unity Hub这篇文章中,我们已经完成了unity Hub的汉化,现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步:在unity Hub软件左侧栏目中点击安装,选择需要汉化的编译器,再点击设置图片按钮…...
为什么Python不适合写游戏?
知乎上有热门个问题:Python 能写游戏吗?有没有什么开源项目? Python可以开发游戏,但不是好的选择 Python作为脚本语言,一般很少用来开发游戏,但也有不少大型游戏有Python的身影,比如࿱…...
查询优化-提升子查询-UNION类型
瀚高数据库 目录 文档用途 详细信息 文档用途 剖析UNION类型子查询提升的条件和过程 详细信息 注:图片较大,可在浏览器新标签页打开。 SQL: SELECT * FROM score sc, LATERAL(SELECT * FROM student WHERE sno 1 UNION ALL SELECT * FROM student…...
【数据结构 | 图论】如何用链式前向星存图(保姆级教程,详细图解+完整代码)
一、概述 链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表…...
气象预测新篇章:Python人工智能的变革力量
Python是功能强大、免费、开源,实现面向对象的编程语言,在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能,这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…...
基于微信小程序的民宿短租系统设计与实现(论文+源码)_kaic
摘 要 随着社会的发展,出差、旅游成为常态,也就造成民宿短租市场的兴起。人们新到陌生的环境里找民宿一般都是通过中介。中介虽然可以快速找到合适的民宿但会收取大量的中介费用,这对刚到新环境里的人们来说是一笔大的资金支出。也有一些人通…...
vue3开发前端表单缓存自定义指令,移动端h5必备插件
开发背景 公司需要开发一款移动端应用,使用vue开发,用户录入表单需要本地缓存,刷新页面,或者不小心关掉重新进来,上次录入的信息还要存在。 这里有两种方案,第一种就是像博客平台一样,实时保存…...
骗子查询系统源码
源码简介 小权云黑管理系统 V1.0 功能如下: 1.添加骗子,查询骗子 2.可添加团队后台方便审核用 3.在线反馈留言系统 4.前台提交骗子,后台需要审核才能过 5.后台使用光年UI界面 6.新增导航列表,可给网站添加导航友链 7.可添加云黑类…...
目标检测+车道线识别+追踪
一种方法: 车道线检测-canny边缘检测-霍夫变换 一、什么是霍夫变换 霍夫变换(Hough Transform)是一种在图像处理和计算机视觉中广泛使用的特征检测技术,主要用于识别图像中的几何形状,尤其是直线、圆和椭圆等常见形状…...
非wpf应用程序项目【类库、用户控件库】中使用HandyControl
文章速览 前言参考文章实现方法1、添加HandyControl包;2、添加资源字典3、修改资源字典内容 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 前言 wpf应用程序中,在入口项目中…...
【python】flask执行上下文context,请求上下文和应用上下文原理解析
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
DDos系列攻击原理与防御原理
七层防御体系 静态过滤 命中黑名单 对确定是攻击的流量直接加入黑名单(源地址命中黑名单直接丢弃,缺乏机动性和扩展性) 畸形报文过滤 畸形报文攻击 TCP包含多个标记位,排列组合有规律 • 现象:TCP标记位全为1 …...
Python拆分PDF、Python合并PDF
WPS能拆分合并,但却是要输入编辑密码,我没有。故写了个脚本来做拆分,顺便附上合并的代码。 代码如下(extract.py) #!/usr/bin/env python """PDF拆分脚本(需要Python3.10)Usage::$ python extract.py <pdf-fil…...
SqlServer(4)经典总结大全-技巧总结-数据开发-基本函数-常识整理-经典面试题
六、技巧 1、11,12的使用,在SQL语句组合时用的较多 “where 11” 是表示选择全部 “where 12”全部不选, 如: if strWhere !‘’ begin set strSQL ‘select count(*) as Total from [’ tblName ] where ’ strWhere …...
ArcGIS矢量裁剪矢量
一、利用相交工具 Arctoolbox工具一分析工具一叠加分析一相交...
pygame用chatgpt绘制3d沿x轴旋转的
import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 0), (100, 200, 0), (300, 100, 0)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…...
golang大小写规则的影响
目录 golang大小写的规则: 1、可见性(visibility): 2、包的导入和调用: 3、json序列化和反序列化: 4、结构体字段的导出和可见性: 5、方法和函数的导出和可见性 : 6、常量和变…...
基于Java在线考试系统系统设计与实现(源码+部署文档)
博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
