CAN波形解析实例(1)
這里的CAN數據波形抓取的是兩個STM32F103設備通過CAN通信一方發送另一方接收,CAN收發器使用的是TJA1051
(擴展幀發送數據ID=0x18DAF110 Data=0x06 0x08)
測量總線信號的波形如圖1所示,這里示波器的探頭接的是CAN_H,探頭的夾子接的是參考地:
這里只測了CAN_H的波形,實際上CAN_L的波形與CAN_H的波形是反相的,形成差分信號。
測量接收端CAN_RX的波形如圖2所示,這里示波器的探頭接的是CAN_RX,探頭的夾子接的是參考地,測量的是芯片CAN控制器出來的邏輯波形,還未經過CAN收發器轉換:
CAN_TX和CAN_RX是CAN控制芯片的發送管腳(CAN_TX)和接收管腳(CAN_RX)。
完整的CAN電路是由CAN控制器和CAN收發器組成的,二者之間一般通過TTL電平的收發信號(CAN_RX、CAN_TX)連接,由CAN收發器將CAN_TX的TTL信號轉換為CAN規范差分信號輸出(CAN_H、CAN_L)、同時接收差分線上的實際信號并轉換為TTL信號輸出到CAN_RX管腳上。
CAN收發器與CAN控制器的CANTX和CANRX相連,對外引出CANH和CANL引腳,輸出標準的CAN信號。
CAN總線上,信號表現為電壓形式,通過CAN_H和CAN_L線上的電位差來表示CAN信號,分為顯性電平(dominant)和隱性電平(recessive)兩種類型。其中顯性電平規定為邏輯0,隱性電平則為邏輯1。其具體定義可通過下圖來理解。
根據上圖的CAN_H信號和我們測量到的CAN_H信號對比,CAN_H的高電平對應顯性電平邏輯0,CAN_L的低電平對應隱性電平邏輯1,那么圖1對應的波形的邏輯數據為:
0 || 11000110110 || 11 || 101111000100010000 || 0[1]00 || 0010 || 0000[1]0110 || 0000[1]1000 || 101101101001000 || 101
SOF|| ID || SRR IDE|| ID擴展 || RTR r0 r1 || DLC|| data0 || data1 || CRC ||CRC界定符 ACK槽 ACK界定符
注意:當連續輸出5個相同的位,則需要插入一個反碼位 ,如連續輸出5個0則需要插入一個1,但這個1在讀數時要去掉,上面[1]就是需要忽略的
數據幀的構成圖解如下(標準幀和擴展幀只有中間一部分不同):
注意我們這里抓的波形是擴展幀
解析信息:
29位ID
1 1000 1101 1010 1111 0001 0001 0000 從右到左每4位一個字段,即為0x18DAF110
DLC
0010
轉換成十進制為2 表示這一幀中有兩個數據,接下來的16個字節便表示2個數據
D1
0000[1]0110 = 0x06
D2
0000[1]1000 = 0x08
這樣便解析出了我們需要的數據,這是和程序發送的數據一致的。
實測SOF的寬度是8us,因此可計算出波特率為125K,與實際程序設置的速率一致。
總結
以上是生活随笔為你收集整理的CAN波形解析实例(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 如何创建C/
- 下一篇: FatFs最新版本获取方法