1.前言
从事汽车ECU开发的小伙伴们,不管是软件、硬件、测试、系统工程师,或多或少都会接触UDS。0x22/0x2E这2个成对出现的服务,大家日常工作中常使用。读取软/硬件版本号呀,查控制器的序列号呀等等。但是,翻开14229-1
竟然有这么多读服务。
2 ReadDataByIdentifier (0x22) service
2.1 服务描述
0x22就是咱们最常用的通过一个自定义的DID去读取数据,DID内容和长度由主机厂定义。
2.2请求报文定义
0x22 + DID 请求报文
2.3回复报文定义
正响应回复报文:0x62+DID+内容
3.ReadMemoryByAddress (0x23) service
3.1 服务描述
0x23服务是允许控制器通过起始地址和长度读取ECU中的数据。
3.2 请求报文定义
0x23+地址/内存大小长度定义+地址+内存大小,其中
高4字节代表内存代大小的长度,低4字节代表内存地址的长度。
3.3 正响应回复报文定义
0x63+数据。
4.ReadScalingDataByIdentifier (0x24) service
4.1 服务描述
主机厂在定义DID时,通常会定义DID数据内容的格式,比方说BCD码、ASCII码、缩放公式、无符号/有符号数、等等,而0x24服务就是根据DID获取它的数据格式。
4.2 请求报文格式
0x24 + DID。
4.3 回复报文格式
0x64 + DID + 格式(高字节为格式,低字节为格式的长度)
这里如果觉得抽象难以理解,咱们可以结合一个例子来看
0xF190是熟知的车架号DID,一般是以ASCII码、长度17个字节存储在ECU中的。通过0x24服务读取F190后,ecu需要给我们反馈车架号是一个17字节以ASCII码形式存在的DID;由于低字节最多可以表示0xF 15个字节,所以还需要多回复一个字节表示剩下的2个字节也是ASCII。
5.ReadDataByPeriodicIdentifier (0x2A) service
5.1 服务描述
uds定义了以一定速度周期读取某个DID的0x2A服务,不过感觉xcp协议比0x2A强太多了。
5.2 请求报文格式
0x2A+传输模式+DID
之后由主机厂再去定义传传输速率的低、中高速的具体周期,0x4为停止发送。
5.3 回复报文格式
0x62+DID内容。
6.DynamicallyDefineDataIdentifier (0x2C) service
6.1 服务描述
通过自定义内存地址和大小和DID号,来来读取ECU的内容。
6.2 请求报文格式
0x2C+子服务+内容
其中,子服务分别有通过DID定义和内存地址和大小定义以及清除定义。
6.3 回复报文格式
7 关于写入
写入的话只有2个服务0x2E和0x3D,通过DID或地址写入内容2种。
UDS(统一诊断服务)是汽车行业中常用的诊断通信协议。关于您提到的服务“ReadDataByIdentifier”(服务编号:0x22),这是用于通过指定的数据标识符(DID)读取ECU内部数据的常用服务。在实际应用中,该服务广泛应用于读取软件版本、硬件版本、控制器序列号等信息。此外,服务描述、请求报文和回复报文的定义对于正确实施诊断操作至关重要。在实际开发或测试过程中,工程师需熟悉并掌握这些服务的具体使用方法和报文结构,以确保诊断工作的准确性和效率。更多关于UDS的读服务内容,建议查阅相关文档或资料以深入了解。