目錄
1. CAN?概述
2. 物理結構與傳輸機制
3. 消息格式與仲裁機制
4. 錯誤檢測與總線狀態
5. 工業用 CAN 接口
6. 本講總結
1. CAN?概述
CAN(Controller Area Network)是由德國博世(Bosch)公司于 1983 年提出的串行通信協議,最初用于汽車內部多個電子控制單元(ECU)之間的數據通信。CAN 總線有以下特點:
-
多主結構:任意節點都可以在總線空閑時發起通信,支持分布式控制系統;
-
實時性高:通過優先級仲裁機制保證高優先級信息的快速響應;
-
通信可靠性強:內置多重錯誤檢測機制;
-
抗干擾性強:差分信號傳輸 + 雙絞線結構;
-
應用廣泛:除汽車外,在工業自動化、電梯、軌道交通、醫療設備等領域被大量采用。
CAN 在工業發展中已經進行過多次的升級和演進。最初的 Classic CAN(標準 CAN)支持最大數據幀為 8 字節。Bosch 在 2012 年推出了?CAN FD(Flexible Data Rate),為標準 CAN 的增強型協議,支持高達 64 字節數據,速率提升到 5Mbps。CANopen 和 SAE?J1939 是基于 CAN 的上層協議,提供數據組織和設備管理規范。
2. 物理結構與傳輸機制
CAN 在物理層采用差分信號傳輸,即 CAN_H(高線)與 CAN_L(低線)之間的電壓差來表示邏輯狀態,理論上用雙絞線就可以實現,如下圖所示:
差分電壓信號分為顯性與隱性信號兩種,分別代表邏輯 0 和 1,如下表所示:
狀態 | CAN_H | CAN_L | 差值 | 邏輯 |
---|---|---|---|---|
顯性(Dominant) | ~3.5V | ~1.5V | ~2V | 邏輯 0 |
隱性(Recessive) | ~2.5V | ~2.5V | ~0V | 邏輯 1 |
CAN 將信號轉換成一系列的電壓差來進行傳送。CAN 通常為 總線型結構,兩端會接 120Ω 終端電阻,吸收信號反射,如下圖所示:
CAN 總線的最大傳輸距離是和傳輸速率(波特率)有直接關系的,下表根據經驗給出了一個大概的關系:
波特率 | 最大距離(理論) |
---|---|
1 Mbps | 40 米 |
500 kbps | 100 米 |
125 kbps | 500 米 |
實際應用中,傳輸距離受很多因素影響。但是我們可以看到速率越高,支持的距離會越短。
3. 消息格式與仲裁機制
CAN 采用 幀格式 來組織通信數據。每一幀都是廣播的,所有節點都能接收,根據 ID 來決定是否處理。CAN 常用的幀類型有以下四種:
類型 | 用途 |
---|---|
數據幀 | 正常通信的數據負載傳輸 |
遠程幀 | 請求其他節點發送某類數據 |
錯誤幀 | 報告幀錯誤(由接收/發送節點主動發送) |
過載幀 | 通知總線稍等片刻(如緩存溢出) |
這里我們重點介紹一下數據幀。數據幀的結構如下圖所示:
這里進行一下簡單的介紹:
-
標識符(ID):代表消息類型,也決定優先級(數值越小優先級越高);
-
RTR 位:區分數據幀和遠程幀;
-
CRC(校驗):檢測傳輸錯誤;
-
ACK(響應):確認接收響應位。
-
Data(數據): 傳輸的數據,最高8字節。
CAN(Controller Area Network)總線的仲裁機制是一種非破壞性位仲裁方式。當多個節點幾乎同時開始發送數據時,它們會在發送過程中監視總線電平。CAN 使用“優先級”機制:幀的標識符越小,優先級越高。發送過程中,如果某個節點發送的是顯性位(0)而檢測到的是隱性位(1),說明有更高優先級的消息正在傳輸,該節點會立即停止發送,從而實現無沖突的仲裁和總線訪問控制。
4. 錯誤檢測與總線狀態
CAN 協議對錯誤處理十分嚴格,具備多級檢測與恢復機制。CAN 有五種錯誤檢測機制:
-
位錯誤(Bit Error):發送位與檢測到的位不同;
-
填充錯誤(Stuff Error):違反“5 個相同位后自動插入反位”規則;
-
CRC 錯誤:校驗字段不匹配;
-
格式錯誤(Form Error):幀結構字段異常;
-
ACK 錯誤:期望有節點應答卻未收到 ACK。
如果發現錯誤,CAN 還有不同的錯誤處理機制,比如:
-
主動錯誤幀(Active Error Frame):節點發現錯誤并通知所有節點;
-
被動錯誤幀(Passive Error Frame):錯誤次數過多后被動報告,不再主動干擾總線;
-
總線關閉(Bus-Off):連續錯誤嚴重,節點完全斷開,不再參與通信(例如失控 ECU);
CAN 的錯誤檢測與總線狀態是個很重要的話題,我們這里不做過多的介紹,之后會單獨開一篇教程講解不同的錯誤檢測機制。
5. 工業用 CAN 接口
雖然 CAN 總線只需要兩根信號線(CAN_H 和 CAN_L) 進行通信,但在實際設備或開發板上的CAN 接口會出現多個“插頭”或“針腳”,額外的“頭”不僅用于信號線,還包括供電、接地、終端電阻控制、備用信號或診斷功能等,見下表:
接口引腳 | 用途說明 |
---|---|
CAN_H | 差分信號:高線 |
CAN_L | 差分信號:低線 |
GND (接地) | 電源地線,用于參考和抗干擾 |
V+ / Vbat | 電源供電(如 12V/24V) |
STB / EN | 芯片工作/待機控制信號(控制 CAN 芯片開關) |
RS | 可調終端電阻設置(如 SN65HVD230 有此功能) |
NC | 預留 / 未接 |
在使用的時候,要根據具體情況具體分析,并仔細閱讀使用手冊和文檔。
6. 本講總結
在這篇博文中,我們簡單的介紹了 CAN 的基本原理,網絡結構,數據傳輸和仲裁機制,我們在之后的博文中,針對部分內容,進行更深入的解析。
參考文獻:
1. can口9針定義_can口定義-CSDN博客
2. 常用通信接口電氣特征(六):CAN_can接口-CSDN博客
3.?詳解CAN總線:常用CAN連接器的使用方法_dsub9 can-CSDN博客