天天看點

如何通過波形解析can總線資料

這裡的資料使用的是标準的can裝置産生的can信号

(擴充幀發送資料ID=0x11121181 Data=0x06 0x08)

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

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

10111011101100011110111001111101011111001111101001111100111101111011011101

根據标準can2.0b協定可以講該字元串解析出來,标準的擴充協定如圖2所示

如何通過波形解析can總線資料

然後将資料根據格式劃分成各個有意義的字段,

如圖3所示,這裡我自己将高電平編碼為1,低電平編碼為0。

但是在can協定中,他将高電平定義為顯性位,邏輯上定義為0,将低電平定義為隐形位,邏輯上定義為1,我們前面先不管這個。

如何通過波形解析can總線資料

在can的協定中當連續出現5個高電平時就需要插入一個低電平,

是以在解析的過程中需要将這些插入的資料删除,

就是圖3中用紅線删除的那些資料。

解析資訊:

0 1110 1110 1101 1110 1110 0111 1110 從右到左每4位一個字段,

這裡需要将其在轉換回can協定定義的邏輯電平的形式—即将0變為1,将1變為0,

這樣便符合我們日常的編碼習慣。

解析出來的ID=0x11121181,與我們發送的資料是相符合的。

1101 ( 0010 )

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

11111001 ( 0000 0110 ) = 0x06

11110111 ( 0000 1000 ) = 0x08

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

這裡需要注意的有兩點:

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

2、在can協定中将CAN_H和CAN_L的內插補點為高電平時定義為顯性,邏輯上表示為0,為低電平時定義為隐形,邏輯上表示為1。這在解碼的過程中需要注意。

本文學自 《如何通過波形解析can總線資料》