【车载开发系列】UDS诊断—请求下载($0x34)
一.概念定义
请求下载就是RequestDownload(34h)。也是一个比较常用的服务。
诊断工具使用此服务初始化从诊断工具到ECU的数据传输(下载)。
接收到此服务的请求报文时,ECU应在发送肯定响应报文前,采取所有必要动作用于数据接收。
二.产生背景
车ECU中用于缓存诊断服务数据的缓存大小是有限的。所以当我们需要读取或写入超过缓存大小的数据时,就无法简单地使用2E和22服务了,UDS据此定义了如下的几个将大块数据写入或读出的服务,即数据下载和上传。
服务 | SID | 说明 |
---|---|---|
RequestDownload | 0x34 | 请求下载数据,诊断工具向ECU请求下载数据 |
RequestUpload | 0x35 | 请求上传数据,诊断工具向ECU请求上传数据 |
TransferData | 0x36 | 数据传输,诊断工具向ECU传数据(下载),或者ECU向诊断工具传数据(上传) |
RequestTransferExit | 0x37 | 数据传输完成,请求退出 |
RequestFileTransfer | 0x38 | 请求文件传输,可以用于替代上传下载的服务 |
三.报文格式
- 发送:10 0B 34 00 44 00 10 00 00(起始地址) 00 00 04 98(内存大小) 数据有0x0498 = 1176字节
- 响应:04 74 20 00 82(每次数据传输包能接收最多130个字节)
1)请求报文
- DataFormatIdentifier就是数据格式标识。它包含两个半元组,左半元组表示压缩方法,右元组表 示加密算法。如果没有应用压缩或加密,相应位置为0。数据格式标识(DataFormatIdentifier)应至少支持00。
-
addressAndLengthFormatIdentifier每半个字节单独编码,这里44是可变的。
- 高半字节指定“内存大小”参数的长度
- 低半字节指定“内存地址”参数的长度
- memoryAddress代表内存地址的起始地址,取决于addressAndLengthFormatIdentifier低半字节
- memorySize代表内存大小,取决于addressAndLengthFormatIdentifier高半字节
-
addressAndLengthFormatIdentifier在$0x23服务中也可以找到相应的参照。
2)肯定响应
- lengthFormatIdentifier每半个字节单独编码。高半字节指定maxNumberOfBlockLength,低半字节设置为0保留
-
maxNumberOfBlockLength长度取决于lengthFormatIdentifier的高半字节,此参数包括完整的消息长度(服务ID+blocksequencecounter(1字节))
这里的maxNumberOfBlockLength字节长度不定,表示0x36服务一次传输一个block的最大的字节数。如:maxNumberOfBlockLength=0x0202,则应用层36服务一次最多发送字节数为0x202(字节数:0x202 >= 36 (1byte)+ parameter(x个byte))。
3)否定响应
常用的否定响应码如下,当然实际不止以下这些。
SID | 说明 | 描述 |
---|---|---|
0x13 | 报文长度错误 | incorrectMessageLengthOrInvalidFormat |
0x31 | 请求超出范围 | requestOutOfRange |
0x33 | 安全访问拒绝 | securityAccessDenied |
0x70 | 上传/下载操作拒绝 | uploadDownloadNotAccepted |
版权声明:本文为Last_Impression原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。