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

UDS(十)应用层 34/36/37相关推荐

  1. UDS 34/36/37 服务

    从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简单地使用2E和22服务了,UDS据此定义了几个将大块数据写入或读 ...

  2. UDS(五)应用层10/3E

    1.DiagnosticSessionControl (0x10)service   DiagnosticSessionControl服务在服务器中用于切换至不同的诊断会话,对应的SID为0x10.不 ...

  3. UDS在应用层和会话层对Enhanced diag接口的实现

    UDS在应用层和会话层对Enhanced diag接口的实现 UDS在应用层和会话层对Enhanced diag接口的实现 default session下应用层时序参数 non-default se ...

  4. python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...

    143-144/300 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. ...

  5. UDS(七)应用层 28/85

    1. CommunicationControl (0x28) service 该服务是控制某类通讯关闭/开启接收或者发送.当uds需要下载升级或者传输大量数据时需要将can总线资源让出来,提高传输效率 ...

  6. UDS(三)网络层时间参数

    网络层定义了N_Ar.N_As.N_Br.N_Bs.N_Cr.N_Cs六个时间参数. 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息 ...

  7. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通

                                      [图解UDS]UDS汽车诊断标准协议(ISO 14229)带你入门到精通 目录 为了便于学习ISO 14229 UDS诊断协议,提供 ...

  8. 基于UDS的ECU bootloader

    CAN总线学习-3 最近学习基于UDS的bootloader,做一些总结. 1. 基于UDS的bootloader重要性 为了在不拆卸ECU的外壳的情况下也可以更新ECU的APP,我们需要有bootl ...

  9. 基于UDS服务的BootLoader架构和刷写流程

    基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...

最新文章

  1. MiniDao普通项目集成方案
  2. kettle连接不上es7_kettle8.2连接ElasticSearch7
  3. JSP连接数据库 - MySQL
  4. vc得到屏幕的当前分辨率方法
  5. 如何在SAP Spartacus里增添自定义的配置条目
  6. myeclipse 打包Jar
  7. The operation cannot be completed. See the details.
  8. Centos 7.4版本升级内核3.10+ 到4+过程
  9. Leetcode. 14. Longest Common Prefix
  10. gis数据与cad数据转换之间的关系
  11. 莫烦python学习笔记
  12. Win10 封装报错处理
  13. Python Django项目-Django基本运行过程
  14. Vue动态加载并注册组件
  15. (转)中国电信友华PT921、PT921G光猫设置路由,无线WIFI设置
  16. 电视游戏大厅现状:“渠道为王”遭遇水土不服
  17. asf格式如何转换为mp4?
  18. AVPlayer 播放在线视频和本地文件的设置区别
  19. 机器学习实战 —— 决策树(完整代码)
  20. 操作系统实现IO的三种方式

热门文章

  1. rm -rf 补救措施
  2. 论文投稿指南——中文核心期刊推荐(计算机技术3)
  3. 量子计算:揭开未来计算世界的面纱
  4. 技术人文 | 米家皮皮灯:无障碍交互新入口
  5. js对象实现选项卡功能
  6. [Python 多线程] 详解daemon属性值None,False,True的区别
  7. 安装postgreSQL出现configure:error:readline library not found解决方法
  8. Docker安装错误failure: repodata/repomd.xml from docker-ce-stable
  9. 达梦DM8数据启用操作系统验证登录
  10. C语言学习Day1 字符串