ISO14229之概述
ISO14229之概述
- 0、概述
- 1、術(shù)語(yǔ)介紹
- 2、診斷服務(wù)報(bào)文格式
- 3、NRC定義描述
0、概述
????????ISO-14229也稱為UDS(統(tǒng)一診斷服務(wù)),是一個(gè)用于汽車行業(yè)診斷通信的需求規(guī)范,應(yīng)用于OSI七層模型的應(yīng)用層(第7層)。他只規(guī)定了與診斷相關(guān)的服務(wù)需求,并未涉及通信機(jī)制;所以,對(duì)于ISO-14229的使用是可以架設(shè)在各種網(wǎng)絡(luò)上的,除了我們比較熟悉的CAN外,還可以基于LAN、FlexRay、串口等。在前面的一些文章里,我們也介紹了UDS中常用到的一些診斷服務(wù)(如19服務(wù)、34/36/37服務(wù)、31服務(wù)等)的使用;本文則主要介紹下UDS診斷服務(wù)的格式及NRC(錯(cuò)誤響應(yīng)碼)的定義描述,作為基礎(chǔ)補(bǔ)充。
????????
1、術(shù)語(yǔ)介紹
????????為便于后面對(duì)UDS診斷服務(wù)格式的介紹,我們先來介紹下涉及到的術(shù)語(yǔ)。
????????(1)、Addressing Type (尋址方式)
????????尋址方式指的是診斷消息的傳遞方式,有以下兩種尋址方式:
????????物理尋址(Physical),即1對(duì)1通信,用于知道確切的被診斷ECU的地址;
????????功能尋址(Functional),即1對(duì)n通信,或者說廣播發(fā)送,用于不知道確切的被診斷的ECU的地址,向一組或者全體ECU發(fā)送請(qǐng)求。
????????例如,在我們ECU的升級(jí)過程中,預(yù)編程階段的相關(guān)診斷報(bào)文(如通過85服務(wù)關(guān)閉DTC的更新、28服務(wù)關(guān)閉其他ECU的報(bào)文發(fā)送功能),一般會(huì)通過功能尋址的方式進(jìn)行發(fā)送,廣播式地通知車上其他ECU。在正式升級(jí)階段則通過物理尋址方式,進(jìn)行數(shù)據(jù)傳輸刷寫。
????????(2)、SID(Service Identifier)
????????用以指代某個(gè)診斷服務(wù)的1字節(jié)無符號(hào)整數(shù)。例如會(huì)話模式控制的10服務(wù)、請(qǐng)求復(fù)位的11服務(wù)等。
????????(3)、DID(Data Identifier)
????????用以標(biāo)識(shí)ECU中貯存的某個(gè)診斷數(shù)據(jù)單元的2字節(jié)無符號(hào)整數(shù)。例如請(qǐng)求數(shù)據(jù)讀取的22服務(wù):22 F1 87中的"F1 87"。對(duì)于使用者來說DID屏蔽了具體實(shí)現(xiàn)細(xì)節(jié),而將重點(diǎn)放在了數(shù)據(jù)本身。例如當(dāng)我們要讀取某個(gè)單元的診斷數(shù)據(jù)時(shí),只要操作(讀)對(duì)應(yīng)的DID就可以,而不必通過數(shù)據(jù)的具體地址去操作。
????????(4)、NRC(Negative Response Code)
????????即1字節(jié)的無符號(hào)整數(shù)表示的錯(cuò)誤響應(yīng)碼。它是診斷協(xié)議為每一種執(zhí)行失敗的診斷服務(wù)分配的失敗原因代號(hào),便于我們對(duì)服務(wù)請(qǐng)求失敗原因的定位分析。
????????(5)、Sub-Function(子服務(wù))
????????1字節(jié)的無符號(hào)整數(shù)表示的子服務(wù)。有些診斷服務(wù)可以支持不同的診斷子服務(wù),Sub-Function就是用來定義這種子服務(wù)的,通過他將某一個(gè)服務(wù)細(xì)分為更為具體的服務(wù)。如10服務(wù)中的01、02、03,分別表示請(qǐng)求進(jìn)入不同的會(huì)話模式;19服務(wù)中的04、06,分別表示請(qǐng)求的是快照還是擴(kuò)展信息等。
????????其格式如下,注意其最高位(bit7)是肯定響應(yīng)應(yīng)答禁止位;即當(dāng)該位為1時(shí),則該請(qǐng)求的肯定響應(yīng)不需進(jìn)行回復(fù)。剩余的7個(gè)位用于表示子功能的值,具體值對(duì)應(yīng)的含義在各自服務(wù)中都有進(jìn)行介紹的。這里只需注意該字節(jié)最高位這個(gè)"肯定響應(yīng)應(yīng)答禁止位"的作用即可。如10 83是請(qǐng)求進(jìn)入擴(kuò)展會(huì)話;且如果是肯定響應(yīng)(50 03)則不需進(jìn)行回復(fù)。
????????
2、診斷服務(wù)報(bào)文格式
????????前面介紹完了涉及到的術(shù)語(yǔ),接下來我們正式來說說UDS診斷服務(wù)報(bào)文的格式,將分為請(qǐng)求格式、響應(yīng)格式(肯定響應(yīng)/否定響應(yīng))來進(jìn)行介紹。
????????2.1、請(qǐng)求格式(Request)
????????診斷服務(wù)請(qǐng)求格式可以分為以下2種:
????????[SID] + [Sub-Function] + [Parameter]
????????[SID] + [Parameter]
????????即有無Sub-Function的區(qū)別;這里我們是把DID也歸為Parameter了。Parameter可以是DID,可以是輸入?yún)?shù),可以是自定義的值,字節(jié)數(shù)目也是視具體要求而定。
????????2.2、肯定響應(yīng)(Positive Response)
????????在請(qǐng)求服務(wù)成功執(zhí)行后,被請(qǐng)求的ECU會(huì)返回一個(gè)肯定響應(yīng);根據(jù)通過請(qǐng)求的服務(wù)格式是否帶有[Sub-Function],其格式一樣可以分為以下的兩種:
????????[SID + 0x40] + [Sub-Function] + [Parameter]
????????[SID + 0x40] + [Parameter]
????????這里一樣把DID也歸為Parameter里。要注意前面ECU收到的服務(wù)請(qǐng)求格式是否有帶[Sub-Function],有的話則需注意[Sub-Function]中的Bit 7肯定響應(yīng)應(yīng)答禁止位的值。若為1,注意此時(shí)是不需發(fā)送肯定響應(yīng)的。我們來看看如下的例子
????????2.3、否定響應(yīng)(Negative Response)
????????否定響應(yīng)的格式比較固定,第一字節(jié)固定是0x7F,第二字節(jié)是之前請(qǐng)求服務(wù)的SID,第三個(gè)字節(jié)是錯(cuò)誤響應(yīng)碼,指示具體錯(cuò)誤響應(yīng)的原因,這個(gè)NRC可以在協(xié)議中查到,并且不同的服務(wù)所支持的NRC也有規(guī)定。格式如下:
????????[0x7F] + [SID] + [NRC]
????????
3、NRC定義描述
| 11 | ServiceNotSupported/服務(wù)不支持 | 診斷儀發(fā)送的請(qǐng)求消息中服務(wù)標(biāo)識(shí)符無法識(shí)別或不支持 |
| 12 | SubFunctionNotSupported/不支持子服務(wù) | 診斷儀發(fā)送的請(qǐng)求消息中子服務(wù)無法識(shí)別或不支持 |
| 13 | IncorrectMessageLengthOrInvalidFormat/不正確的消息長(zhǎng)度或無效的格式 | 請(qǐng)求消息長(zhǎng)度與特定服務(wù)規(guī)定的長(zhǎng)度不匹配或者是參數(shù)格式與特定服務(wù)規(guī)定的格式不匹配 |
| 21 | BusyRepeatRequest/重復(fù)請(qǐng)求忙 | 表明ECU太忙而不能去執(zhí)行請(qǐng)求。一般來說,在這種情況下,診斷儀應(yīng)進(jìn)行重復(fù)請(qǐng)求工作 |
| 22 | conditionsNotCorrect/條件不正確 | 表明ECU的狀態(tài)條件不允許支持該請(qǐng)求 |
| 24 | requestSequenceError/請(qǐng)求序列錯(cuò)誤 | 表明收到的是非預(yù)期的請(qǐng)求消息序列 |
| 25 | noResponseFromSubnetComponent/子網(wǎng)節(jié)點(diǎn)無應(yīng)答 | 表明ECU收到請(qǐng)求,但所請(qǐng)求的操作無法執(zhí)行 |
| 26 | failurePreventsExecutionOfRequestedAction/故障阻值請(qǐng)求工作執(zhí)行 | 表明請(qǐng)求的動(dòng)作因一故障原因而沒有執(zhí)行 |
| 31 | requestOutOfRange/請(qǐng)求超出范圍 | 請(qǐng)求消息包含一個(gè)超出允許范圍的參數(shù);或者是不支持的數(shù)據(jù)標(biāo)識(shí)符/例程標(biāo)識(shí)符的訪問 |
| 33 | securityAccessDenied/安全訪問拒絕 | 診斷儀無法通過ECU的安全策略 |
| 35 | invalidKey/密鑰無效 | 診斷儀發(fā)送的密鑰與ECU內(nèi)存中的密鑰不匹配 |
| 36 | exceedNumberOfAttempts/超出嘗試次數(shù) | 診斷儀嘗試獲得安全訪問失敗次數(shù)超過了ECU安全策略允許的值 |
| 37 | requiredTimeDelayNotExpired/所需時(shí)間延遲未到 | 在ECU所需的請(qǐng)求延遲時(shí)間過去之前診斷儀又執(zhí)行了一次請(qǐng)求。 |
| 70 | uploadDownloadNotAccepted/不允許上傳下載 | 表明試圖向ECU內(nèi)存上傳/下載數(shù)據(jù)失敗的原因是條件不允許 |
| 71 | transferDataSuspended/數(shù)據(jù)傳輸暫停 | 表明由于錯(cuò)誤導(dǎo)致數(shù)據(jù)傳輸操作的中止 |
| 72 | generalProgrammingFailure/一般編程失敗 | 表明在不可擦除的內(nèi)存設(shè)備中進(jìn)行擦除或編程時(shí)ECU檢測(cè)到錯(cuò)誤發(fā)生 |
| 73 | wrongBlockSequenceCounter/錯(cuò)誤的數(shù)據(jù)塊序列計(jì)數(shù)器 | ECU在數(shù)據(jù)塊序列計(jì)數(shù)序列中檢測(cè)到錯(cuò)誤發(fā)生 |
| 78 | requestCorrectlyReceived-ResponsePending/正確接收請(qǐng)求消息-等待響應(yīng) | 表明ECU正確接收到請(qǐng)求消息,但是將執(zhí)行的動(dòng)作未完成且ECU未準(zhǔn)備好接收其它請(qǐng)求 |
| 7E | subFunctionNotSupportedInActiveSession/激活會(huì)話不支持該子服務(wù) | 當(dāng)前會(huì)話模式下ECU不支持請(qǐng)求的子服務(wù) |
| 7F | serviceNotSupportedInActiveSession/激活會(huì)話不支持該服務(wù) | 當(dāng)前會(huì)話模式下ECU不支持請(qǐng)求的服務(wù) |
| 92 | voltageTooHigh/電壓過高 | 當(dāng)前電壓值超過了編程允許的最大門限值 |
| 93 | voltageTooLow/電壓過低 | 當(dāng)前電壓值低于了編程允許的最小門限值 |
總結(jié)
以上是生活随笔為你收集整理的ISO14229之概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断是否微信浏览器
- 下一篇: 通信:5G孕育上游投资空间