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等级要求,请程序员注意。