1、UDS(Unified Diagnosic Services 統一診斷服務)是ISO 15765&ISO 14229定義的一種可以在不太的汽車總線(CAN&LIN)上的應用層診斷協議

    UDS應用層是ISO 14229-1


2、UDS本質上是一種服務,通過請求&響應對ECU進行測試、檢測、診斷


3、UDS位於應用層,不必關心提供差錯控制等功能的PCI部分


4、由於數據場較短(CAN為8Byte CAN FD為64Byte),故一條診斷命令超過數據場長度,則需要分包傳輸,即需要多幀傳輸

    ISO 15765定義多幀傳輸的格式:

    報文類型        CAN ID  |           CAN數據場

    --------------------------------|--------------------------------Byte[0]-------------|--------------Byte[1]------------------              

                |   [bit7~bit4] [bit3]  [bit2~0]    |

                --------------------------------|----------------------------------------|----------------------------------------------------  

    單幀        CANID   |      0000b               SF_DL    |數據

    首幀        CANID   |      0001b               FF_DL                                  | 數據

    連續幀      CANID   |      0010b               SN       |

    流控幀      CANID   |      0011b               FS       |BB                         STmin


無論是單幀還是多幀,均使用每一幀的0郝字節的高四位進行區別

    0:單幀

    1:首幀

    2:連續幀

    3:流控幀


    單幀:

    表示該幀的數據場有效字節數據<=8,不足的地方使用0xAA,0x55(增加跳變)

    對於單幀而言,0號字節的低四位[SF_DL]表示DLC(數據長度控制),説明後面有多少位有效


    發送方:

        首幀:

            FF_DL:則是代表該多幀的長度,

            當長度信息發送完成後後面的字節發送部分數據

   

        連續幀:

            SN代表該連續幀為幀序號,即該連續發出的第幾幀(從1開始計數)


    接收方:

        流控幀:

        Byte[0]前四位固定為3,後四位FS表示流狀態參數

            FS:0,CTS表示繼續接受

            1,WT表示等待,讓發送方停止,等待下一個流控幀的到來

            2,OVFLW表示溢出,當接收方接收到首幀後,判斷FF-DL長度比接受放到緩衝區大時發送,隨後發送方停止發送

            3,F:保留

       

        Byte[1]為BS塊的大小,即接下來會發送多少幀,當BS為0時,塊大小不做限制

        Byte[2]為STmin,規定了連續幀發送的最小時間間隔


5、NRC

    服務以請求+響應格式構成,當涉及到否定響應時需要知道為什麼否定,故引入了否定響應(Negative Response Code)NRC


 請求格式:

    SID+SF,服務+子功能

    例如:10 01


    SID+DID(Data Identifier),服務+DID,用於讀寫

    例如:22 F15A


    SID_SF_DID,服務+子功能+DID,如例程服務

    31 01 FF00


    SID,僅服務號


 響應:

    肯定響應:(SID+0x40) +其它

    Q:0x10 0x01

    A:0x50 01


    否定響應:7F +服務 +NRC

    例如:

        Q:10 01

        R:7F 10 13


常見NRC:...


6、0x10服務