如何通過波形解析can匯流排資料

minyuanxiani發表於2013-09-05

       這裡的資料使用的是標準的can裝置產生的can訊號(擴充套件幀傳送資料ID=0x11121181  Data=0x06 0x08)

訊號的波形如圖1所示,這裡示波器的探頭接的是CAN_H,探頭的夾子接的是CAN_L:

                                     圖1  示波器顯示波形

       首先根據本部落格中前面寫的一篇如何測量can匯流排波特率獲取匯流排的波特率,然後依據波特率和上面的波形讀出具體的資料

從上面的波形中讀取到的資料是

10111011101100011110111001111101011111001111101001111100111101111011011101

根據標準can2.0b協議可以講該字串解析出來,標準的擴充套件協議如圖2所示

                                                            圖2 can擴充套件訊息格式

然後將資料根據格式劃分成各個有意義的欄位,如圖3所示,這裡我自己將高電平編碼為1,低電平編碼為0。但是在can協議中,他將高電平定義為顯性位,邏輯上定義為0,將低電平定義為隱形位,邏輯上定義為1,我們前面先不管這個。

                                                                                                 圖3  資料分割

在can的協議中當連續出現5個高電平時就需要插入一個低電平,所以在解析的過程中需要將這些插入的資料刪除,就是圖3中用紅線刪除的那些資料。

在刪除這些資料之後根據圖2的格式可以將各個欄位分割出來

解析資訊:

29位ID:0 1110 1110 1101 1110 1110 0111 1110,從右到左每4位一個欄位,這裡需要將其在轉換回can協議定義的邏輯電平的形式---即將0變為1,將1變為0,這樣便符合我們日常的編碼習慣。解析出來的ID=0x11121181,與我們傳送的資料是相符合的。

DLC:1101  轉換成十進位制為2 表示這一幀中有兩個資料,接下來的16個位元組便表示2個資料

D1:11111001  = 0x06

D2:11110111 = 0x08

這樣便解析出了我們需要的資料,這是和我傳送的資料一致的。

 

這裡需要注意的有兩點:

1、在can的協議中當連續出現5個高電平時就需要插入一個低電平;

2、在can協議中將CAN_H和CAN_L的差值為高電平時定義為顯性,邏輯上表示為0,為低電平時定義為隱形,邏輯上表示為1。這在解碼的過程中需要注意。

相關文章