从成本等角度考虑,汽车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 服务相关推荐

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

    Upload Download functional unit 从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简 ...

  2. 【车载开发系列】UDS诊断---链接控制服务($0x87)

    [车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...

  3. UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白

  4. UDS入门之27服务

    1.简介 SecurityAccess(0x27)服务即安全访问,它是对于一些由于安全或其他原因而访问受限的数据(例如要下载的程序,读取特定内存位置的数据等)进行的安全验证服务,以免不当的程序损坏电子 ...

  5. 车载网络测试 - UDS诊断篇 - 诊断服务$10

    上一篇我们在(车载网络测试 - UDS诊断篇 - 诊断数据简析)中 有介绍各个服务的数据的格式,接下来的篇幅就是对各个服务做进一步的介绍,以便大家学习和了解:今天我们说的就是会话控制,有地方也叫会话切 ...

  6. 大白话给你讲明白UDS诊断(汽车诊断服务 实例应用图文讲解)(二)

    上一篇,我已经讲了UDS诊断作用以及为什么要这个东西.我这里再补充一点点,在整个ECU软件架构里面,诊断程序(诊断功能)只是占了一小部分,但是也是非常重要的一个部分. 我这里做了一个简图示意 好,我们 ...

  7. 我的docker随笔34:gitlab服务部署

    本文涉及一种在容器中部署 gitlab 服务的方法,并结合其自带的 gitlab-runner 实现 CICD 功能.其目的是为了在实际工作中使用代码托管及自动化操作. 一.引言 因工作需要,需部署 ...

  8. 大白话给你讲明白UDS诊断(汽车诊断服务 实例应用图文讲解)(一)

    UDS诊断(汽车诊断)是啥,我知道肯定有很多人不知道 1.这个是什么东西? 2.有什么用? 先看个百科截图,引出诊断的概念! 有什么用 这个用处是我在不拆车的情况下,检测汽车的状况,以确定具体故障. ...

  9. 汽车诊断之UDS入门-0x19(ReadDTCInformation)服务概述

    该服务可使client读取车内某个或某些ECU内部DTC信息的状态,除非有特殊的子功能需求,ECU应返回所有的DTC信息(例如排放相关或者排放无关).该服务允许client的行为如下: 1.通过检索c ...

最新文章

  1. SpringBoot如何验证用户上传的图片资源
  2. 怎样使用CSS3媒体查询(Media Queries)制作响应式网站
  3. 返回值_关于GWLP_WNDPROC的那些奇怪的返回值
  4. Python开发爬虫之理论篇
  5. 028_jdbc-mysql大文本
  6. c3d怎么调语言,falc3d参数调整心得
  7. java标量替换_JAVA逃逸分析、栈上分配、标量替换、同步消除
  8. 对象的自身引用(Self-Reference) 动态绑定(Dynamic Binding)
  9. leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历
  10. 在Unbuntu 上安装Phalcon
  11. LeetCode刷题笔记-回溯法-分割回文串
  12. 量化指标公式源码_量化指标公式源码,通达信量化买盘潮指标
  13. 小米手机html格式怎么打开,小米手机打开HTML用WPS
  14. 前端验证手机号和座机号号码
  15. 学生管理-axios优化
  16. 基于jsp+java+ssm的大学生缴费系统-计算机毕业设计
  17. Windows7安装无法识别硬盘分区
  18. python2在线编译器_C/C++/Python在线编译器
  19. 工作流Airflow的性能优化,应对dag数目的激增
  20. 用vis数组保证只入队一次P5594 【XR-4】模拟赛

热门文章

  1. C语言实现创建有序链表
  2. OpenCV库文件介绍
  3. 23.二叉搜索树的后序遍历序列
  4. “一元秒杀”活动竟能做到如此的效果,蛋糕店只用4天收款10万
  5. ImageNet数据下载
  6. 金九银十!Java面试宝典重现江湖~带它仗剑天涯,吊打面试官
  7. ICCV 2021|复杂场景目标检测——科大讯飞等提出X光安检场景下危险品检测基准(已开源)...
  8. android视频截屏手机录屏实现
  9. 一种油然而生的宿命感
  10. 微信开发者工具怎么导入电商小程序项目教程