UDS诊断之22/2E服务

2022-05-25 15:15:06 浏览数 (1)

1

ReadDataByIdentifier(0x22)—— 读DID

这个服务的目的就是读DID。那么什么是DID?DID通俗的来讲,其实就是某一存储在非易失性存储器(Non-volatile memory,NVM)里、表示汽车或者软件的一些标识的ID,最为大家熟知的比如汽车的VIN码,还有软件发布日期等等。

1.1 服务请求报文定义

图1 0x22服务请求报文格式

注:服务请求报文可以请求一个或者多个DID。

本服务不支持Sub-function,关于DID命名规则可以参考ISO 14229 - 1。

1.2 肯定响应

图2 0x22服务肯定响应报文格式

1.3 支持的NRC

图3 0x22服务支持的NRC

1.4 示例

(1)读汽车VIN码

肯定响应从第4个字节开始的,即为读出的VIN码。

(2)读多个DID,例如0x010A和0x0110

肯定响应每个DID后面跟对应数据,然后再跟下一个DID。

2

WriteDataByIdentifier(0x2E)—— 写DID

这个服务的目的就是在非易失性存储器(Non-volatile memory,NVM)里写入DID对应的数据。

2.1 服务请求报文定义

图4 0x2E服务请求报文格式

本服务不支持Sub-function。

2.2 肯定响应

图5 0x2E服务肯定响应报文格式

2.3 支持的NRC

图6 0x2E服务支持的NRC

2.4 示例

写入VIN码。

3

总结

在上述两个服务中,还涉及到Flash的读写擦除操作,当然这些就是服务请求函数内部如何实现的了,如有机会会和读者朋友们分享。还要注意的是,一般写操作对于程序来说是有写错的风险的,所以一般写DID的时候Session等级会有要求,还有一定的Security等级要求,请程序员注意。

0 人点赞