【車載開(kāi)發(fā)系列】UDS診斷—?jiǎng)討B(tài)定義DID($0x2C)
一.概念定義
- 動(dòng)態(tài)定義數(shù)據(jù)標(biāo)識(shí)符 DynamicallyDefineDataIdentifier(2Ch)
- 此服務(wù)允許診斷工具在ECU的內(nèi)部動(dòng)態(tài)定義一個(gè)數(shù)據(jù)標(biāo)識(shí)符,一個(gè)臨時(shí)的DID,可以通過(guò)這個(gè)DID讀取一段內(nèi)存的數(shù)據(jù),也可以通過(guò)改DID一次性讀取多個(gè)原有DID的數(shù)據(jù)。
- 該數(shù)據(jù)標(biāo)識(shí)符還可以被讀取數(shù)據(jù)服務(wù)22h或讀取數(shù)據(jù)(周期標(biāo)識(shí)符)2Ah 所讀取。
- 動(dòng)態(tài)定義數(shù)據(jù)標(biāo)識(shí)符將會(huì)包含一個(gè)串聯(lián)的數(shù)據(jù)參數(shù)定義。
1)DID定義方式
- 動(dòng)態(tài)定義DID一共有三種方式
1)通過(guò)原有的DID來(lái)定義
2)通過(guò)指定的內(nèi)存地址來(lái)定義
3)以上兩種方式結(jié)合來(lái)定義 - 重新定義動(dòng)態(tài)定義的 DID則是通過(guò)清除當(dāng)前定義并重新定義。雖然該服務(wù)不禁止這種功能,但是不建議這么做。
- 指定動(dòng)態(tài)數(shù)據(jù)標(biāo)識(shí)符需要在有效范圍(F200h-F3FFh)
- 當(dāng)想要重新定義某一個(gè)DID的時(shí)候,要先用子功能-清除動(dòng)態(tài)DID,來(lái)將原有的定義清除,再重新進(jìn)行定義
- 為了避免錯(cuò)誤并降低復(fù)雜度,新定義的標(biāo)識(shí)符不允許嵌套參考另一個(gè)動(dòng)態(tài)定義的標(biāo)識(shí)符。 如果指定的動(dòng)態(tài)標(biāo)識(shí)符在請(qǐng)求時(shí)正在被周期性(按照請(qǐng)求的時(shí)間)報(bào)告,動(dòng)態(tài)數(shù)據(jù)標(biāo)識(shí)符應(yīng)先被終止然后再被清除。
2)DID失效條件
- 當(dāng)以下任一情況發(fā)生時(shí),動(dòng)態(tài)定義的標(biāo)識(shí)符將失效:
1)接收到清除動(dòng)態(tài)標(biāo)識(shí)符的指令;
2)ECU 硬件或者軟件復(fù)位; - 由于上面任何一個(gè)原因,ECU由非默認(rèn)會(huì)話模式切換到默認(rèn)會(huì)話模式。
二.應(yīng)用場(chǎng)景
- 此服務(wù)的目的是提供給診斷工具組合一個(gè)或多個(gè)數(shù)據(jù)為一個(gè)數(shù)據(jù)集的能力。
- 該服務(wù)在處理診斷應(yīng)用程序的臨時(shí)數(shù)據(jù)需求方面提供了更大的靈活性,超出了可以通過(guò)靜態(tài)定義的DID讀取的信息的范圍,并且還可以通過(guò)避免頻繁的請(qǐng)求/響應(yīng)從而降低帶寬利用率。動(dòng)態(tài)定義的DID的定義可以通過(guò)單個(gè)請(qǐng)求消息或通過(guò)多個(gè)請(qǐng)求消息來(lái)完成。
三.報(bào)文格式
1)報(bào)文請(qǐng)求
0x2C的所有的SubFunction的定義如下。0x01和0x03是最為常用的功能文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-433251.html
Hex (bit6~0) | 描述 | Description | 說(shuō)明 |
---|---|---|---|
0x00 | ISOSAEReserved | ISO保留,未定義 | - |
0x01 | 通過(guò)標(biāo)識(shí)符定義 | defineByIdentifier | 通過(guò)數(shù)據(jù)標(biāo)識(shí)符定義動(dòng)態(tài)數(shù)據(jù)標(biāo)識(shí)符,也就是向服務(wù)器指定動(dòng)態(tài)DID的定義通過(guò)DID引用進(jìn)行 |
0x02 | 通過(guò)內(nèi)存地址定義 | defineByMemoryAddress | 通過(guò)地址引用定義動(dòng)態(tài)數(shù)據(jù)標(biāo)識(shí)符,服務(wù)器指定動(dòng)態(tài)DID的定義應(yīng)通過(guò)地址引用進(jìn)行僅在開(kāi)發(fā)階段使用 |
0x03 | 清除動(dòng)態(tài)定義數(shù)據(jù)標(biāo)識(shí)符 | clearDynamicallyDefinedDataIdentifier | 此值用來(lái)清除指定的動(dòng)態(tài)數(shù)據(jù)標(biāo)識(shí)符 |
0x04-0xFF | ISOSAEReserved | ISO保留,未定義 | - |
1.請(qǐng)求通過(guò)標(biāo)識(shí)符定義
- dynamicDefinedDataIdentifier必須在0x22服務(wù)中作為DID處理
- sourceDataIdentifier在邏輯上指定要包含在動(dòng)態(tài) DID 中的信息源
- positionInSourceDataRecord用于指定要包含在動(dòng)態(tài)數(shù)據(jù)記錄中的源數(shù)據(jù)記錄摘錄的起始字節(jié)位置
- memorySize指定源數(shù)據(jù)記錄/內(nèi)存地址中要包含在動(dòng)態(tài)DID中的字節(jié)總數(shù)
2.請(qǐng)求通過(guò)內(nèi)存地址定義標(biāo)識(shí)符
- addressAndLengthFormatIdentifier
每個(gè)半字節(jié)分別編碼
bit 7-4:memorySize參數(shù)的長(zhǎng)度(字節(jié)數(shù))
bit 3-0:memoryAddress參數(shù)的長(zhǎng)度(字節(jié)數(shù)) - memoryAddress
僅在參數(shù)sub-function = defineByMemoryAddress 中存在要包含在動(dòng)態(tài)DID中的信息的內(nèi)存源地址
3.請(qǐng)求清除已定義的標(biāo)識(shí)符
- Request_ClearDynamicallyDefinedDataIdentifierd
- 如果請(qǐng)求消息中存在dynamicDefinedDataIdentifier參數(shù),則存在dynamicallyDefinedDataIdentifier;否則不包括該參數(shù)。
2)肯定響應(yīng)
- 這里的肯定響應(yīng)類型只有0x01和0x03兩個(gè),事實(shí)上在ISO14229當(dāng)中,還有0x02。
3)否定響應(yīng)
常見(jiàn)的NRC碼如下所示文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433251.html
Hex | 描述 | Description |
---|---|---|
0x12 | 子功能不支持 | subFunctionNotSupported |
0x13 | 報(bào)文長(zhǎng)度錯(cuò)誤 | incorrectMessageLengthOrInvalidFormat |
0x22 | 條件不滿足 | conditionsNotCorrect |
0x31 | 請(qǐng)求超出范圍 | requestOutOfRange |
到了這里,關(guān)于【車載開(kāi)發(fā)系列】UDS診斷---動(dòng)態(tài)定義DID($0x2C)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!