統一診斷服務 (Unified diagnostic services , UDS) (四)

今天是春節假期最後一天,明天又要開始上班了,祝大家開工愉快。

這篇文章介紹一下UDS的第二類診斷服務,即Data Transmission (數據傳輸)。這類診斷服務包括以下SID:

ReadDataByIdentifier (0x22)

ReadMemoryByAddress (0x23)

ReadScalingDataByIdentifier (0x24)

ReadDataByPeriodicIdentifier (0x2A)

DynamicallyDefineDataIdentifier (0x2C)

WriteDataByIdentifier (0x2E)

WriteMemoryByAddress (0x3D)

通常,0x22和0x2E成對使用,0x23和0x3D成對使用,這幾個服務用於診斷數據的基本讀寫操作。0x24,0x2A,0x2C是一些特殊操作。

0x22和0x2E這兩個服務是對以標識符(identifier)標記的數據的操作,前者是讀,後者是寫。UDS規定,診斷數據使用兩個byte的標識符來標記,比如,0xF187用來標記ECU的零件號,0xF19E用於標記該ECU所使用的診斷文件的名字,UDS還規定了廠家可以自定義的標識符範圍。這兩個服務的用法很簡單,下面我以讀取ECU的零件號為例說明:

22 F1 87 (讀取零件號)

62 F1 87 XX YY ZZ KK MM NN(給出零件號)

具體每次可以使用22服務讀取幾個ID,每個ID的讀寫許可權(比如在哪些session中可以讀寫,是否需要安全訪問操作等),由廠家自定義。假設零件號這個ID是可以寫入的話,則寫零件號的診斷命令是:

2E F1 87 XX YY ZZ KK MM NN(寫入零件號)

6E F1 87(給出positive response)

0x23和0x3D這兩個服務是對以地址信息(memoryAddress )標記的數據的操作,前者是讀,後者是寫。這個命令的格式稍微複雜一點。以0x23為例,它的診斷請求格式是:

0x23服務的請求格式

0x23

第一部分固定為1個byte, 0x23;

第二部分是格式信息,長度為1個byte,高4 bits用於指示memorySize的長度(位元組數),低4 bits用於指示memoryAddress的長度(位元組數)。比如,如果這個值為0x46,則後面的memorySize為6個byte,memoryAddress為4個byte。

第三部分是memoryAddress信息,它的長度由第二部分的AddressAndLengthFormatIdentifier指示。

第四部分是memorySize信息,它的長度由第二部分的AddressAndLengthFormatIdentifier指示。

如果這條命令的格式是 23 22 xx yy aa bb,則它的含義就是,讀取xx yy地址的長度為aa bb的數據。

了解了0x23的用法,0x3D的用法就很好理解了,它標識memoryAddress和memorySize的方法與0x23相同,只是在診斷命令最後再加上一段需要寫入的數據。

0x24,0x2A,0x2C這幾個特殊操作,使用場景不多,我組織組織語言,在下篇文章里簡要介紹一下。

看到這裡的話,麻煩點個贊吧,如果對這項技術感興趣,歡迎關注本專欄,謝謝。


推薦閱讀:

統一診斷服務 (Unified diagnostic services , UDS) (三)
用心去製造——智能製造的讀後感
新市場新機遇,汽車覆蓋件模具加工的新選擇
有什麼關於汽車行業的書或者文獻或者其他可以了解汽車的構造及其他背景知識?
車聯網:V2X技術引領無人駕駛汽車革命

TAG:汽車電子 | 汽車電子控制 | 汽車製造 |