Kwp2000協議的應用(硬件原理使用篇)

作者:良知猶存

轉載授權以及圍觀:歡迎添加微信:becom_me

    發現K線沒有過多的文章描述,作爲一個開發過K線的人,不寫些文章幫助後來的人豈不是太浪費開發經驗了呢。

總述

    KWP2000是一套協議,它符合OSI七層協議模型,即即ISO14230-1,ISO14230-2,ISO14230-3,ISO14230-4這4個協議文件。

ISO14230-1協議規定了物理層標準,要求使用K線

ISO14230-2 規定了鏈路層,即幀格式、計時器等、錯誤處理機制以及交換關係。

ISO14230-3 規定了應用層,及鏈路層中的數據域是如何解析的,怎麼樣爲用戶提供服務(請求數據、接受數據、解析數據),這部分參考了ISO14229-1協議。

ISO14230-4 則是對一種特殊應用(排放相關係統要求),他分別對ISO14230-1,ISO14230-2,ISO14230-3作出了特例化要求和一些補充,又形成了一個體系協議(這個不太相關)

    目前歐洲汽車領域廣泛採用了基於CAN總線的KWP2000,即ISO 15765等協議,而基於K線的KWP2000物理層和數據鏈路層協議基本淘汰,國內也只有一些底端車型有用,但是在摩托車領域,電噴普及進程中,ECU廣泛使用BOSH和德爾福等廠家設備的時候,都在同步使用KWP2000協議,開發相關設備的時候,還是需要懂k線協議的。

一、物理接口

K線的特點:

最大通訊速率達10.4 kbit/s(和現在動輒幾十、幾百M的通訊速度來比,確實很小)

診斷報文最大長度255Byte,k線是單總線,屬於關鍵字協議,通過不同ID實現主從的應答。

總線電平:0~12V

一般電噴的摩托車的ECU不是BOSH就是德爾福或者日本產的,它負責控制整車的運動相關的邏輯,就是整車的CPU。

設備開發K線電路的選擇

一般我們開發時候會選擇相應的通訊的芯片,如圖爲K線芯片的電路,使用的是SI9241的k線芯片,一端連接到MCU的串口TX RX引腳,另一端接入K線

    

    K線通訊現在基本上屬於被逐漸淘汰的使用,只不過在摩托車電噴的領域還在使用。所以K線芯片也大都停產了,現有的芯片也基本都是以庫存料爲主,量不大但是很貴,所以設計有一套其他方式做的K線電路,一邊連接到K線,一邊連接到MCU的串口引腳,通訊很穩定,可以給大家做參考。

 

其次,大家也可以在某寶購買一些K線測試的開發板,用作測試,用來加快開發的進度。

如圖爲K線完整的一次初始化應答的信息抓取:

二、通信關鍵字

 

   搭建好了硬件,這個時候我們需要進行軟件的攻關了。首先準備好相關ECU的協議介紹手冊。查看相應的協議規則,以及相應的關鍵詞識別位置。

如圖K線通訊幾種常見的數據格式:

大家看到上面的一些數據格式剛開始可能有些頭疼,但是實際上我們用的時候只會有一種使用,我以我使用過的舉例解釋(如上第二種數據格式)。

StartCommunication:

TEST->ECU  (設備端發往ECU請求應答的數據)hex:C1 33 F1 81 66

ECU ->TEST (ECU 應答設備的回覆)hex :83 F1 11 C1 E9 8F BE

其中:0xF1代表 設備端的默認地址,0x11代表 ECU的地址

C1(FMT格式字節,0xC1轉化爲2進製爲,11000001,bit7~6 爲11,代表請求信息,bit5~0 爲1,數據字節長度爲1,如下只有一個數據byte SDIRQ) 

33(Target字節) 

F1(Source字節)

81(SDIRQ,關鍵字,屬於數據段) 

66(0xC1+0x33+0xF1+0x81 = 0x266,取一個byte的大小,所以去掉高位變成0x66)

此時候關鍵字就是81

由上可以知道,K線通訊的注意點:

1.信息裏面包括該信息的數據段的長度;

2.協議數據在最後一個byte進行累加和的校驗,用來判斷數據;

3.協議信息中進行讀取關鍵ID即可判斷出當前應答服務的機制;

通過這些信息,我們大致對協議就有一個判斷,我們可以通過一些關鍵詞的填寫,進行與ECU通信,獲得我們需要的信息。例如讀取ECU的故障碼。

如下是不同的服務ID對應的不同ECU應答信息

 

 這就是我分享的開發Kwp2000的協議,由於太晚了,所以也準備休息了,明天繼續分享我的開發經驗。如果大家有什麼更好的思路,歡迎分享交流哈。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章