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
UDS(十)应用层 34/36/37相关推荐
- UDS 34/36/37 服务
从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简单地使用2E和22服务了,UDS据此定义了几个将大块数据写入或读 ...
- UDS(五)应用层10/3E
1.DiagnosticSessionControl (0x10)service DiagnosticSessionControl服务在服务器中用于切换至不同的诊断会话,对应的SID为0x10.不 ...
- UDS在应用层和会话层对Enhanced diag接口的实现
UDS在应用层和会话层对Enhanced diag接口的实现 UDS在应用层和会话层对Enhanced diag接口的实现 default session下应用层时序参数 non-default se ...
- python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...
143-144/300 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. ...
- UDS(七)应用层 28/85
1. CommunicationControl (0x28) service 该服务是控制某类通讯关闭/开启接收或者发送.当uds需要下载升级或者传输大量数据时需要将can总线资源让出来,提高传输效率 ...
- UDS(三)网络层时间参数
网络层定义了N_Ar.N_As.N_Br.N_Bs.N_Cr.N_Cs六个时间参数. 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息 ...
- 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通
[图解UDS]UDS汽车诊断标准协议(ISO 14229)带你入门到精通 目录 为了便于学习ISO 14229 UDS诊断协议,提供 ...
- 基于UDS的ECU bootloader
CAN总线学习-3 最近学习基于UDS的bootloader,做一些总结. 1. 基于UDS的bootloader重要性 为了在不拆卸ECU的外壳的情况下也可以更新ECU的APP,我们需要有bootl ...
- 基于UDS服务的BootLoader架构和刷写流程
基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...
最新文章
- MiniDao普通项目集成方案
- kettle连接不上es7_kettle8.2连接ElasticSearch7
- JSP连接数据库 - MySQL
- vc得到屏幕的当前分辨率方法
- 如何在SAP Spartacus里增添自定义的配置条目
- myeclipse 打包Jar
- The operation cannot be completed. See the details.
- Centos 7.4版本升级内核3.10+ 到4+过程
- Leetcode. 14. Longest Common Prefix
- gis数据与cad数据转换之间的关系
- 莫烦python学习笔记
- Win10 封装报错处理
- Python Django项目-Django基本运行过程
- Vue动态加载并注册组件
- (转)中国电信友华PT921、PT921G光猫设置路由,无线WIFI设置
- 电视游戏大厅现状:“渠道为王”遭遇水土不服
- asf格式如何转换为mp4?
- AVPlayer 播放在线视频和本地文件的设置区别
- 机器学习实战 —— 决策树(完整代码)
- 操作系统实现IO的三种方式
热门文章
- rm -rf 补救措施
- 论文投稿指南——中文核心期刊推荐(计算机技术3)
- 量子计算:揭开未来计算世界的面纱
- 技术人文 | 米家皮皮灯:无障碍交互新入口
- js对象实现选项卡功能
- [Python 多线程] 详解daemon属性值None,False,True的区别
- 安装postgreSQL出现configure:error:readline library not found解决方法
- Docker安装错误failure: repodata/repomd.xml from docker-ce-stable
- 达梦DM8数据启用操作系统验证登录
- C语言学习Day1 字符串