【车载开发系列】UDS诊断—请求下载($0x34)

  • Post author:
  • Post category:其他




【车载开发系列】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 请求文件传输,可以用于替代上传下载的服务



三.报文格式

  1. 发送:10 0B 34 00 44 00 10 00 00(起始地址) 00 00 04 98(内存大小) 数据有0x0498 = 1176字节
  2. 响应:04 74 20 00 82(每次数据传输包能接收最多130个字节)



1)请求报文

  1. DataFormatIdentifier就是数据格式标识。它包含两个半元组,左半元组表示压缩方法,右元组表 示加密算法。如果没有应用压缩或加密,相应位置为0。数据格式标识(DataFormatIdentifier)应至少支持00。
  2. addressAndLengthFormatIdentifier每半个字节单独编码,这里44是可变的。

    • 高半字节指定“内存大小”参数的长度
    • 低半字节指定“内存地址”参数的长度
  3. memoryAddress代表内存地址的起始地址,取决于addressAndLengthFormatIdentifier低半字节
  4. memorySize代表内存大小,取决于addressAndLengthFormatIdentifier高半字节
  5. addressAndLengthFormatIdentifier在$0x23服务中也可以找到相应的参照。

    在这里插入图片描述



2)肯定响应

  1. lengthFormatIdentifier每半个字节单独编码。高半字节指定maxNumberOfBlockLength,低半字节设置为0保留
  2. 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 版权协议,转载请附上原文出处链接和本声明。