UDS 34/36/37 服务
从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简单地使用2E和22服务了,UDS据此定义了几个将大块数据写入或读出的服务,即数据下载和上传。
UDS的第六类诊断服务:存储数据传输。该类型服务包含SID如下:
RequestDownload (0x34):请求下载数据,诊断仪向ECU请求下载数据
RequestUpload (0x35):请求上传数据,诊断仪向ECU请求上传数据
TransferData (0x36):数据传输,诊断仪向ECU传数据(下载),或者ECU向诊断仪传数据(上传)
RequestTransferExit (0x37):数据传输完成,请求退出
RequestFileTransfer (0x38):请求文件传输,可以用于替代上传下载的服务
1. RequestDownload (0x34) service
该服务用于启动下载传输,作用是告知ECU准备接受数据,ECU则通过0x74 response告诉诊断仪自己是否允许传输,以及自己的接受能力是多大。
1.1 请求格式
由上图可知,请求格式分为5部分
第一部分:请求SID(1byte):0x34
第二部分:dataFormatIdentifier(1byte):这里面标识了数据格式相关的信息,比如数据是否有压缩,是否有加密,用的什么算法加密等,由主机厂与供应商约定好,用哪个bit来表示压缩、加密等信息。
第三部分:addressAndLengthFormatIdentifier(1byte):该参数是代表后续的两个部分memoryAddress和memorySize所占的字节长度。addressAndLengthFormatIdentifier的低4bit表示memoryAddress,高4bit表示memorySize。如:memoryAddress参数占用0xm个字节,memorySize参数占用0xn个字节,则addressAndLengthFormatIdentifier值为0xnm
第四部分:memoryAddress(m个byte):诊断仪向ECU请求下载写入数据的逻辑地址值。如:诊断仪请求ECU写入数据的内存逻辑地址为0x12345678(memoryAddress占4个字节),则memoryAddress值为0x12345678,对应addressAndLengthFormatIdentifier低4bit值为0x04.
第五部分:memorySize(n个字节):诊断仪向ECU请求下载写入数据的字节数。如:诊断仪写入ECU数据的字节数为0x01234567(memorySize占4字节),则memorySize值为0x01234567,对应的addressAndLengthFormatIdentifier高4bit值为0x4。
1.2 响应格式
由上图可知响应格式分为三个部分
第一部分:response SID (1byte): 0x74
第二部分:lengthFormatIdentifier(1byte):高4bit为maxNumberOfBlockLength有效字节长度,低4bit保留为0.
lengthFormatIdentifier每半个字节单独编码。高半字节指定maxNumberOfBlockLength,低半字节设置为0保留。
maxNumberOfBlockLength长度取决于lengthFormatIdentifier的高半字节,此参数包括完整的消息长度(服务ID+blocksequencecounter(1字节))
第三分部:maxNumberOfBlockLength:字节长度不定,表示0x36服务一次传输一个block的最大的字节数。如:maxNumberOfBlockLength=0x202,则应用层36服务一次最多发送字节数为0x202(字节数:0x202 >= 36 (1byte)+ parameter(x个byte))。后续36服务会细讲。
1.3 举例
诊断仪向ECU请求下载数据,dataFormatIdentifier值为0x00,该值有厂家或供应商协商制定,此处暂定为0x00。memoryAddress值为0x0x12345678(占4个字节),memorySize值为0x01234567(占4字节),则addressAndLengthFormatIdentifier值为0x44(该值计算方式上述请求格式中以说明)。
上图中不同颜色代表不同的参数
橙色:addressAndLengthFormatIdentifier(0x44)
紫色:memoryAddress(0x12345678)
绿色:memorySize(0x01234567)
青色:maxNumberOfBlockLength(0x0202)
2. TransferData (0x36) service
如果34服务得到了正确响应,诊断仪就要启动数据传输过程了,使用的就是36服务。
2.1 请求格式
上图可知请求格式分为三个部分
第一部分:请求SID :0x36(1个byte)
第二部分:blockSequenceCounter(1个byte),34服务后,发送的第一个36服务时clockSequenceCounter=0x01,每次36服务请求便自增1,当增加到0xFF,此时下次请求36服务发送数据时blockSequenceCounter=0x00。
第三部分:transferRequestParameterRecord:字节长短和参数格式不定,由厂家制定。发送请求的数据。
2.2 响应格式
由上图可知响应格式分为三个部分
第一部分:response SID:0x76
第二部分:blockSequenceCounter:对请求的blockSequenceCounter的echo
第三部分:transferResponseParameterRecord,当36服务用于上传数据时,该参数必须的。36服务用于下载数据时,该参数非必须,此处不解析。
2.3 举例
假设诊断仪34服务请求下载30字节,ECU反馈每次最大下载maxNumberOfBlockLength为0x0A,则诊断仪使用36服务下载数据如下图所示:
3. RequestTransferExit (0x37) service
37服务用于退出上传下载,即诊断仪通过该诊断服务停止与ECU之间的数据传输。如果之前的34和36服务都顺利执行完成,那么37服务就可以得到ECU的positive response。否则ECU会负响应NRC 0x7F 37 24,表示诊断序列执行有错误。
3.1 请求格式
由上图可知请求格式分为两个部分
第一部分:请求SID:0x37
第二部分:transferRequestParameterRecord,字节长度和参数格式,厂家自定义,没有定义则默认字节数据为0。
3.2 响应格式
由上图可知响应格式分为两个部分
第一部分:response SID:0x77
第二部分:transferResponseParameterRecord,字节长度和参数格式,厂家自定义,没有定义则默认字节数据为0。
3.3 举例
UDS 34/36/37 服务相关推荐
- UDS(十)应用层 34/36/37
Upload Download functional unit 从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简 ...
- 【车载开发系列】UDS诊断---链接控制服务($0x87)
[车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...
- UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白
- UDS入门之27服务
1.简介 SecurityAccess(0x27)服务即安全访问,它是对于一些由于安全或其他原因而访问受限的数据(例如要下载的程序,读取特定内存位置的数据等)进行的安全验证服务,以免不当的程序损坏电子 ...
- 车载网络测试 - UDS诊断篇 - 诊断服务$10
上一篇我们在(车载网络测试 - UDS诊断篇 - 诊断数据简析)中 有介绍各个服务的数据的格式,接下来的篇幅就是对各个服务做进一步的介绍,以便大家学习和了解:今天我们说的就是会话控制,有地方也叫会话切 ...
- 大白话给你讲明白UDS诊断(汽车诊断服务 实例应用图文讲解)(二)
上一篇,我已经讲了UDS诊断作用以及为什么要这个东西.我这里再补充一点点,在整个ECU软件架构里面,诊断程序(诊断功能)只是占了一小部分,但是也是非常重要的一个部分. 我这里做了一个简图示意 好,我们 ...
- 我的docker随笔34:gitlab服务部署
本文涉及一种在容器中部署 gitlab 服务的方法,并结合其自带的 gitlab-runner 实现 CICD 功能.其目的是为了在实际工作中使用代码托管及自动化操作. 一.引言 因工作需要,需部署 ...
- 大白话给你讲明白UDS诊断(汽车诊断服务 实例应用图文讲解)(一)
UDS诊断(汽车诊断)是啥,我知道肯定有很多人不知道 1.这个是什么东西? 2.有什么用? 先看个百科截图,引出诊断的概念! 有什么用 这个用处是我在不拆车的情况下,检测汽车的状况,以确定具体故障. ...
- 汽车诊断之UDS入门-0x19(ReadDTCInformation)服务概述
该服务可使client读取车内某个或某些ECU内部DTC信息的状态,除非有特殊的子功能需求,ECU应返回所有的DTC信息(例如排放相关或者排放无关).该服务允许client的行为如下: 1.通过检索c ...
最新文章
- SpringBoot如何验证用户上传的图片资源
- 怎样使用CSS3媒体查询(Media Queries)制作响应式网站
- 返回值_关于GWLP_WNDPROC的那些奇怪的返回值
- Python开发爬虫之理论篇
- 028_jdbc-mysql大文本
- c3d怎么调语言,falc3d参数调整心得
- java标量替换_JAVA逃逸分析、栈上分配、标量替换、同步消除
- 对象的自身引用(Self-Reference) 动态绑定(Dynamic Binding)
- leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历
- 在Unbuntu 上安装Phalcon
- LeetCode刷题笔记-回溯法-分割回文串
- 量化指标公式源码_量化指标公式源码,通达信量化买盘潮指标
- 小米手机html格式怎么打开,小米手机打开HTML用WPS
- 前端验证手机号和座机号号码
- 学生管理-axios优化
- 基于jsp+java+ssm的大学生缴费系统-计算机毕业设计
- Windows7安装无法识别硬盘分区
- python2在线编译器_C/C++/Python在线编译器
- 工作流Airflow的性能优化,应对dag数目的激增
- 用vis数组保证只入队一次P5594 【XR-4】模拟赛