UDS(十)应用层 34/36/37

Upload Download functional unit

从成本等角度考虑,汽车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.
第三分部: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协议栈系列文章:

UDS(一)入门概述

UDS(二)网络层

UDS(三)网络层时间参数

UDS(四)应用层

UDS(五)应用层10/3E

UDS(六)应用层11/27

UDS(七)应用层28/85

UDS(八)应用层22/2E

UDS(九)应用层14/19

UDS(十)应用层34/36/37

  • 39
    点赞
  • 282
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值