如何通過波形解析can匯流排資料
這裡的資料使用的是標準的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。這在解碼的過程中需要注意。
相關文章
- Can匯流排介紹
- CAN(FD)、LIN匯流排通訊和資料庫設計工具-VDE資料庫
- ECU通訊:CAN匯流排模擬測試
- CAN匯流排原理_學習
- 資料匯流排模式模式
- LLM-kimi:BMS-CAN匯流排
- CAN匯流排協議 學習筆記協議筆記
- 大資料匯流排(DataHub)大資料
- Kvaser—靈活多變的CAN匯流排介面方案
- CAN匯流排分析儀工具-CAN轉USB智慧協議轉換器協議
- 嵌入式作業6.3 CAN 匯流排程式設計程式設計
- 匯流排
- RS-485匯流排通訊裝置
- 事件匯流排事件
- 前端匯流排前端
- EventBridge 事件匯流排及 EDA 架構解析事件架構
- 事件匯流排demo事件
- javascript事件匯流排JavaScript事件
- CAN匯流排協議簡介及其常見的應用領域協議
- 通過SQLLDR匯入LOB資料SQL
- 元件間通訊--利用mitt實現事件匯流排元件MIT事件
- 阿里十年技術沉澱|深度解析百PB級資料匯流排技術阿里
- 將Abp預設事件匯流排改造為分散式事件匯流排事件分散式
- Vue事件匯流排(EventBus)Vue事件
- Vue 事件中央匯流排Vue事件
- ARM 匯流排協議協議
- AHB匯流排協議協議
- AXI匯流排簡介
- 通過cmd視窗匯入匯出mysql資料庫MySql資料庫
- 現場匯流排與工業乙太網通訊模型模型
- 計算匯流排頻寬
- I2C 匯流排
- 序列匯流排的學習
- 如何在 JavaScript 中實現 Event Bus(事件匯流排)JavaScript事件
- 如何在 pyqt 中實現全域性事件匯流排QT事件
- 通過EXPDP/IMPDP匯出匯入遠端資料倒本地
- CPU主頻,倍頻,外頻,系統匯流排頻率,前端匯流排頻率前端
- 你玩過輕量系統軟匯流排應用嗎?