【车载开发系列】UDS诊断—动态定义DID($0x2C)
一.概念定义
- 动态定义数据标识符 DynamicallyDefineDataIdentifier(2Ch)
- 此服务允许诊断工具在ECU的内部动态定义一个数据标识符,一个临时的DID,可以通过这个DID读取一段内存的数据,也可以通过改DID一次性读取多个原有DID的数据。
- 该数据标识符还可以被读取数据服务22h或读取数据(周期标识符)2Ah 所读取。
- 动态定义数据标识符将会包含一个串联的数据参数定义。
1)DID定义方式
- 动态定义DID一共有三种方式
1)通过原有的DID来定义
2)通过指定的内存地址来定义
3)以上两种方式结合来定义 - 重新定义动态定义的 DID则是通过清除当前定义并重新定义。虽然该服务不禁止这种功能,但是不建议这么做。
- 指定动态数据标识符需要在有效范围(F200h-F3FFh)
- 当想要重新定义某一个DID的时候,要先用子功能-清除动态DID,来将原有的定义清除,再重新进行定义
- 为了避免错误并降低复杂度,新定义的标识符不允许嵌套参考另一个动态定义的标识符。 如果指定的动态标识符在请求时正在被周期性(按照请求的时间)报告,动态数据标识符应先被终止然后再被清除。
2)DID失效条件
- 当以下任一情况发生时,动态定义的标识符将失效:
1)接收到清除动态标识符的指令;
2)ECU 硬件或者软件复位; - 由于上面任何一个原因,ECU由非默认会话模式切换到默认会话模式。
二.应用场景
- 此服务的目的是提供给诊断工具组合一个或多个数据为一个数据集的能力。
- 该服务在处理诊断应用程序的临时数据需求方面提供了更大的灵活性,超出了可以通过静态定义的DID读取的信息的范围,并且还可以通过避免频繁的请求/响应从而降低带宽利用率。动态定义的DID的定义可以通过单个请求消息或通过多个请求消息来完成。
三.报文格式
1)报文请求
0x2C的所有的SubFunction的定义如下。0x01和0x03是最为常用的功能文章来源:https://www.toymoban.com/news/detail-433251.html
Hex (bit6~0) | 描述 | Description | 说明 |
---|---|---|---|
0x00 | ISOSAEReserved | ISO保留,未定义 | - |
0x01 | 通过标识符定义 | defineByIdentifier | 通过数据标识符定义动态数据标识符,也就是向服务器指定动态DID的定义通过DID引用进行 |
0x02 | 通过内存地址定义 | defineByMemoryAddress | 通过地址引用定义动态数据标识符,服务器指定动态DID的定义应通过地址引用进行仅在开发阶段使用 |
0x03 | 清除动态定义数据标识符 | clearDynamicallyDefinedDataIdentifier | 此值用来清除指定的动态数据标识符 |
0x04-0xFF | ISOSAEReserved | ISO保留,未定义 | - |
1.请求通过标识符定义
- dynamicDefinedDataIdentifier必须在0x22服务中作为DID处理
- sourceDataIdentifier在逻辑上指定要包含在动态 DID 中的信息源
- positionInSourceDataRecord用于指定要包含在动态数据记录中的源数据记录摘录的起始字节位置
- memorySize指定源数据记录/内存地址中要包含在动态DID中的字节总数
2.请求通过内存地址定义标识符
- addressAndLengthFormatIdentifier
每个半字节分别编码
bit 7-4:memorySize参数的长度(字节数)
bit 3-0:memoryAddress参数的长度(字节数) - memoryAddress
仅在参数sub-function = defineByMemoryAddress 中存在要包含在动态DID中的信息的内存源地址
3.请求清除已定义的标识符
- Request_ClearDynamicallyDefinedDataIdentifierd
- 如果请求消息中存在dynamicDefinedDataIdentifier参数,则存在dynamicallyDefinedDataIdentifier;否则不包括该参数。
2)肯定响应
- 这里的肯定响应类型只有0x01和0x03两个,事实上在ISO14229当中,还有0x02。
3)否定响应
常见的NRC码如下所示文章来源地址https://www.toymoban.com/news/detail-433251.html
Hex | 描述 | Description |
---|---|---|
0x12 | 子功能不支持 | subFunctionNotSupported |
0x13 | 报文长度错误 | incorrectMessageLengthOrInvalidFormat |
0x22 | 条件不满足 | conditionsNotCorrect |
0x31 | 请求超出范围 | requestOutOfRange |
到了这里,关于【车载开发系列】UDS诊断---动态定义DID($0x2C)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!