CAN bus和CAN FD 解碼

CAN bus和CAN FD 解碼
CAN bus(控制器區域網絡)最初是由Robert Bosch GmbH於1980年代所開發,用於
車用匯流排標準。如今,它還廣泛用於工業控制和航太應用。
 
它允許微控制器和電子設備在不使用主機的情況下相互通信,並以低成本和最少的佈線量在電性幹擾環境中提供快速可靠的數據傳輸。
CAN採用差分信號提供強大的抗電性幹擾能力。
1991年,Bosch發布了CAN 2.0規範,詳細介紹了兩種格式:

 

  • CAN 2.0A是具有11位辨識碼的標準格式。

  • CAN 2.0B是具有29位辨識碼的擴展格式。

 
1993年,ISO(國際標準化組織)發布了CAN標準ISO 11898,後來又重組為三部分:

  • ISO 11898-1,涵蓋數據鏈路層

  • ISO 11898-2,涵蓋高速CAN的物理層(最高1Mbit / s)。

  • ISO 11898-3,涵蓋用於低速,容錯處理的CAN物理層(高達125 kbit / s)

 
Bosch隨後發佈了具有快速的數據速率CAN FD 1.0或CAN,並已納入ISO 11898-1:2015。該規範允許增加數據長度,以及在決定仲裁之後,可切換到更快的Bit rate。 CAN FD與現有的CAN 2.0網絡反向相容,因此新的CAN FD設備可以與現有的CAN設備在同一網絡上共存。
 

CAN匯流排通常應用於如下領域

 
  • 公車、卡車、公共汽車(汽油車及電動車)

  • 航空、航海電子儀器

  • 工業自動化及機械控制

  • 電梯、手扶梯

  • 建築自動化

  • 醫療儀器及裝置

 
佈線
許多設備可以連接到CAN bus,從復雜的電子控制單元到簡單的I / O設備。每個設備稱為節點。
每個CAN節點通過兩條匯流排傳輸:CAN High 和CAN Low。



 

發送信號
CAN通過兩條線,執行差分傳輸(CAN High和CAN low)。
有兩種邏輯狀態:

  • Dominant – Logic 0

  • Recessive – Logic 1

電壓等級根據規格而有所不同。在這裡,我們來看看高速CAN。
在recessive (logic 1)傳輸期間,匯流排未被主動驅動時,會在停留在2.5V。
在dominant (logic 0)期間,CAN High會被驅動至5 V(或Vcc),CANLow會被驅動至0 V.



 

仲裁
CAN數據在幀中發送,以dominant = 0開始,後面跟著ID,標識符構成仲裁(優先級)的基礎,其中兩個或多個節點同時嘗試發送。
 
為每個節點分配一個標識符,其長度可以是11位(CAN 2.0A)或29位(CAN 2.0B)。
 
該表顯示了三個嘗試同時傳輸的節點,每個節點以顯性0開始。當節點發送隱性1但看到匯流排保持在顯性0時,它意識到存在爭用並且停止發送並等待下一次發送的機會。
 
以這種方式,具有最低值ID的節點贏得仲裁併且優先發送幀的其餘部分。


 

影格
CAN有四種影格:
 

  • 數據:包含用於傳輸的節點數據的影格。

  • 遠程:請求傳輸特定標識符的影格。

  • 錯誤:由檢測到錯誤的任何節點發送的影格。

  • 過載:在數據和/或遠程之間注入延遲的影格。

RTR位(遠程傳輸請求)確定數據影格(0)和遠程影格(1)
 
CAN網絡可配置成使用兩種不同的影格格式:支持11位標識符的基本影格格式(CAN 2.0A和CAN 2.0B),以及支持29位的擴展影格格式(僅限CAN2.0B)標識符,允許添加18位標識符擴展名。
標識符擴展位(IDE)確定是否正在使用18位ID擴展。
該表顯示了具有基本格式(11位)且沒有位填充的CAN數據幀的格式
數據長度代碼表示以字節為單位的數據長度;在這種情況下1個字節。
CRC代表
迴圈冗餘校驗,用於錯誤檢測。
 
Ack確認插槽用於確認收到的CAN影格有效- 接收影格而沒有發現任何錯誤的所有節點都發送顯性0,這將覆蓋發送器發送的隱性1。如果發送器檢測到隱性1,則表示未正確接收到影格。
影格的結束通過7個隱性1的傳輸來確認。


 
位元填塞
位元填塞為了確保足夠的轉換以保持同步,在相同極性的五個連續位之後插入一些相反的極性。在CRC定界符,ACK欄位和影格結束期間不會發生位元填充。
 
在使用位元填塞的欄位中,相同類型的六個連續位元(000000或111111)被認為是錯誤,並且當檢測到錯誤時,節點可以發送由六個連續顯性位元組成的活動錯誤標誌。
 
CAN FD
Bosch遵循CAN標準,CAN FD 1.0或CAN靈活數據速率,後來成為ISO 11898-1:2015標準的一部分。該規範允許增加數據長度以及在決定仲裁之後可選地切換到更快的Bit Rate
 
CAN FD滿足了日益增長的需求,即在復雜性日益增加的汽車(和其他)系統中更快地傳輸更多數據。
 
CAN FD與現有的CAN 2.0網絡反向相容,因此新的CAN FD設備可以與傳統的CAN設備在同一網絡上共存。


 
 
CAN和CAN FD之間協議的差異
該表顯示了CAN FD影格的結構。
 
仲裁以及Base和Extended幀格式的使用在經典CAN和CAN FD中都是相同的。
 
由於CAN FD不使用遠程幀,因此CAN中使用的RTR位是冗餘的,並且被遠程請求替換位(RRS)替換,該位始終是傳輸顯性(0)。
 
IDE位元以相同的方式使用。
 
CAN中的保留位現在變為FDF位(靈活數據格式),並且是顯示0以表示影格是經典CAN格式。以CAN FD格式發送的影格用隱性1表示。
 
接下來是保留位以供將來使用。
 
然後是BRS位(bit rate開關)。如果BRS被發送為主導,則位元速率在整個幀中保持相同。如果BRS是隱性的,則在該位之後將傳輸更高的位元速率,直到並包括CRC分隔符號。
 
ESI位(錯誤狀態指示符)是用於錯誤啟動的主要傳輸,以及用於錯誤被動的隱性傳輸。


 
 
數據長度代碼
數據欄位中的字節數,由數據長度代碼(DLC)指示。它的編碼在CAN和CAN FD中是不同的。前九個代碼是相同的,但是以下代碼,在CAN中都指定了八個字節的DATA FIELD,在CAN FD中指定更長的DATA FIELDS。



 
 
CAN FD CRC欄位
由於CAN FD的數據長度較長,因此CRC校驗需要更多的位元。如果幀保持16字節或更少,則使用具有17位的CRC;如果CAN幀保持超過16個字節,則使用21位的CRC。
 
在CRC欄位之後,Ack和幀結構的結束與經典CAN相同。
 
 
 
CAN匯流排調試
由於電感器,線圈和功率元件會導致較大的電壓尖峰、雜訊,從而導致錯誤。越來越多的嵌入式電腦和設備被添加到汽車CAN匯流排中,並且隨著更多節點的增加,導致匯流排裡佔用更多時段。當流量達到大約40%的匯流排時間時,可能會發生錯誤。此時可能需要示波器來調試網絡。
 
要監視和查找CAN匯流排上的故障,重要的是使用具有較大暫存記憶體的示波器來捕獲多個數據幀。然後,儀器可以處理整個擷取的波型,然後放大及分析數據。
 
我們建議儀器的頻帶寬為CAN串列傳輸速率的十倍,用來分析上升時間和任何故障條件。
 
第一步 - 探索

CAN是差分信號,CAN Low是CAN High的反轉。查看兩者之間的差異,可消除傳輸過程中,信號遇到的任何共模干擾。
 
使用Differential探棒或差分輸入示波器(如PicoScope 4444)獲取CAN Low和CAN High之間的信號差異,可獲得最佳效果。
 
使用single-ended探棒連接到CAN Low或CAN High,雖然可以獲取信號,但是可能會顯示共模雜訊,可能導致示波器上的解碼錯誤(這不會損壞CAN接收器)。
 
 
第二步 - 擷取CAN數據信號
將暫存記憶體的容量設置為足以擷取所需數量的影格,並調整解析度足夠解析各個位元。
 
或者使用緩衝區的暫存索引,重播特定時間的幀,同時忽略其他區間的幀。


 
第三步 - 設置解碼器
從Tools選單中選擇Serial Decoding,點擊Create,然後選擇CAN。
 
如果探棒為Single-ended,則選擇Channel > Data > A 和配置為Low ;如果是Differential探棒,則選擇High。



PicoScope將自動計算最佳閾值、滯後和串列傳輸速率,必要時可以自定義這些值。
 
請在CAN 定義選單中,選取所需的格式,如Graph、Table、 十六進制/二進制/十進制/ ASCII, 並點擊OK。
 
關於Graph:視窗將出現顏色軌跡的編碼,並與擷取的數據的時間相關。
關於Table:所有數據將以表格顯示。該表有幾個有用的功能:

 

  • 點擊視窗的Graph框架,對應的編碼位置將在Table中顯示。

  • Table可選擇以csv的格式導出數據並存檔。

  • 設置鏈接檔,以便Table中的數據,可以顯示為有意義的文本。

  • 可搜索特定值/欄位,並過濾,例如 過濾CRC。


 
摘要
CAN和CAN FD解碼是PicoScope軟體的標準功能,可與所有real-time PicoScope示波器配合使用。