本文主要是介绍UDS(八)应用层 22/2E,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Data Transmission functional unit
UDS的第二类诊断服务:数据传输。该类型服务包含SID如下:
ReadDataByIdentifier (0x22)
ReadMemoryByAddress (0x23)
ReadScalingDataByIdentifier (0x24)
ReadDataByPeriodicIdentifier (0x2A)
DynamicallyDefineDataIdentifier (0x2C)
WriteDataByIdentifier (0x2E)
WriteMemoryByAddress (0x3D)
通常,0x22和0x2E成对使用,0x23和0x3D成对使用,这几个服务用于诊断数据的基本读写操作。0x24,0x2A,0x2C是一些特殊操作。本人只使用过SID:0x22和0x2E,本章目前就只对这两个服务进行介绍,后续如果有其他的SID使用将会对其补上。
1. ReadDataByIdentifier (0x22) service
该服务通过标识符(identifier)来读取ECU的数据。
1.1 请求格式:
由上图可知请求格式分为两个个部分:
第一部分:请求SID:0x22,占用一个字
第二部分:dataIdentifier(DID),占用两个字节,由厂家定义DID的值,代表读取的是什么数据。如0x0123代表的是读取ECU版本号。一次请求可读取多个DID数据。DID范围如下图所示:
1.2 响应格式:
由上图可以响应格式分为三个部分:
第一部分:response SID:0x62
第二部分:dataIdentifier(DID),请求读取的DID值
第三部分:dataRecord,要读取DID对应的数据。
注意:根据诊断仪一次请求读取多少个DID,ECU就响应多少个DID的数据给诊断仪。格式:response SID + n(dataIdentifier + dataRecore)。一般都是一次请求读取一个DID数据
1.3 举例
读取ECU版本号,假设DID:0x0123为ECU版本号的标识符
2. WriteDataByIdentifier (0x2E) service
该服务通过标识符(identifier)来写入数据到ECU。
2.1 请求格式
由上图可知,请求格式分为三部分
第一部分:请求SID:0x2E,占用一个字节
第二部分:dataIdentifier(DID),需要写入数据对应的DID标识符值。占用两个字节
第三部分:dataRecord,需要写入的数据
2.2 响应格式
由上图可知,响应格式分为两个部分
第一部分:response SID:0x6E
第二部分:dataIdentifier(DID),请求DID的echo
2.3 举例
写入ECU版本号,假设DID:0x0123为ECU版本号的标识符
参数知乎:https://zhuanlan.zhihu.com/p/33995635
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(八)应用层 22/2E的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!