日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ISO14229 理解(一)

發布時間:2024/1/8 编程问答 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ISO14229 理解(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

ISO-14229用于汽車行業診斷通信的需求規范,它只規定了與診斷相關的服務需求,并沒有涉及通信機制,因此要實現一個完整的診斷通信還需要定義網絡層協議(比如ISO-15765),還有底層硬件實現方式(比如CAN控制器)。由于不涉及網絡通信機制,可以架設在各種網絡之上,因此ISO-14229也稱為UDS(Unified Diagnostic Services)統一診斷服務。

在ISO14229里,共有26個UDS服務:


用法

其實診斷通信的機制很簡單,可以類比client-server通信方式,即客戶端發送request,服務器收到request之后進行處理,然后向客戶端發送response。但是,診斷協議有自己的特色,它規定了在request和response的格式,在收到request的時候要做格式的檢查。同時由于尋址方式的不同,有無sub-function的支持等,也會影響request和response的處理方式和結果。

舉例:

首先來看服務請求和響應格式,“請求”由client端發送給server,UDS規定使用1個byte來表示診斷服務,即所謂的Service ID,簡稱SID。請求報文里帶有SID,根據具體的服務內容后面加具體的數據。肯定響應格式由“SID+40+具體的數據”。否定響應格式是一個固定的格式“7F+請求報文里的SID+一個字節的NRC”

診斷的request格式分2種,一種有sub-function的,一種沒有sub-function的,上述例子是沒有sub-function的。
當 UDS 服務支持 Subfunction 的請求和響應格式時:

“請求”為 “SID + 一個字節Subfunction + 具體的數據”,
肯定響應為“SID+40+Subfunction+具體的數據”,

而有的UDS服務里面是不支持 Subfunction,是支持DID的,DID是“數據ID”的意思,

它的請求格式為:“SID+具體的DID+數據內容”,
肯定響應為:“SID+40+DID+具體的數據”。

1. Request

基本格式:歸納起來,診斷的request格式無非以下2種:
即有無sub-function的區別。其中,我把DID也歸為Parameter

<SID> + <Sub-function> + <Parameter> <SID> + <Parameter>

有sub-function:
在介紹有sub-function情況的request之前,首先要了解一下sub-function的定義方法。下圖是從ISO14229中截來的,它是對sub-function的定義。

值得注意的是Bit 7,從字面上來看它用來指示是否要抑制Positive Response。的確,它的目的就是這個意思,當Bit 7為1(1 = ‘true’)時,對該request的Positive Response要被抑制,即不發送Positive Response;當Bit7為0(0 = ‘false’)時,對該request的Positive Response不被抑制,正常發送。除了Bit 7,Sub-function有不同的值,具體的值和含義在協議中對每個服務的解釋時都會有介紹。


不帶sub-function:
不帶sub-function的服務,就帶parameter。Parameter可以是DID,可以是輸入參數,可以是自定義的值,字節數目也是視具體要求而定。一般在協議內都會有表格,當遇到具體問題時,可查表確定。


2. Response:

一般來講,response會在一個服務被request且執行之后發送,成功的話就發positive response,失敗的話要發negative response,但是也有例外的時候,比如ECUreset,他要求先發送response,然后再去執行具體的reset,因為如果先reset,那么ECU的通信模塊shut down,是無法發送出去response的。一般像這種特殊情況,協議會在描述具體服務時標注出來。

Positive Response:
基本格式:

<SID+0x40> + <Sub-function> + <Parameter><SID+0x40> + <Parameter>

其中要注意第一個字節是由SID和0x40的和構成,至于為什么要這樣做,只能說協議就是這么規定的,只要是Positive的response,其第一個字節就是要由相應SID的值再加上0x40構成。這里的Parameter項是optional的,具體要看協議規定。

舉例:
比如session control的service:

Send:10 01(byte1的10是SID,byte2的01是sub-function,且可知Bit 7是false) Receive:50 01 (byte1是SID+0x40,byte2是sub-funtion)

舉個不帶sub-function的例子,比如ReadDataById這個service:

Send:22 F1 86(byte1是SID,byte2和byte3是DID,可視為parameter的一種) Receive:62 F1 86 01(byte1的62是SID+0x40,byte2和byte3是DID,byte4是讀到的數據)

注釋: 不論是物理尋址還是功能尋址,對于Positive Response來說都沒有影響,只需要關注sub-function中的Bit 7 suppressPosRspMsgIndicationBit是0還是1,如果為0即false,那么正常發送即可,如果是1即true,那么就不發送response。如果根本沒有subfunction呢,那么什么都不要考慮,肯定是要發送positive response的。

Negative Response:
基本格式:

<0x7F> + <SID> + <NRC> //NRC:Negative Response Code(否定響應碼)

看起來比較簡單,格式比較固定,只要是Negative Response,第一字節就一定是0x7F,第二字節照抄原來的SID,第三個字節是錯誤響應碼,指示具體錯誤響應的原因,這個NRC可以在協議中查到,并且不同的服務所支持的NRC也有規定。

下面這張圖列舉了部分原因代碼,比如,如果ECU給出7F 22 13這個negative response,則說明22這個服務因為診斷請求數據長度不對的原因無法執行。

還是拿session control 這個service來舉例:

Send:10 05(現在sun-function變為05了,假定系統不支持這個sub-function) Receive:7F 10 12(7F即指代錯誤響應,10為SID,12是NRC,查協議可知其指代sub-function not supported 這個錯誤)

格式講完了,來看看在物理尋址和功能尋址情況下,Negative Response分別有什么區別:
首先在物理尋址情況下,只要是Negative Response就應該按照規定格式發送。而在功能尋址情況下,有一點特殊,對于NRC為0x11(service not supported)、0x12(subfunction not supported)、0x31(request out of range)這三種情況,功能尋址是不會發送response的。

Request的檢查策略

總結

以上是生活随笔為你收集整理的ISO14229 理解(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。