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协议栈系列文章: