CAN總線簡介
1 CAN通信簡介
CAN是控制器局域網絡(Controller Area Network, CAN)的簡稱,1986年被德國研發和生產汽車電子產品著稱的BOSCH公司所開發,並最終成為國際標准(ISO11898),是國際上應用最廣泛的現場總線之一。 在北美和西歐,CAN總線協議已經成為汽車計算機控制系統和嵌入式工業控制局域網的標准總線。
Controller Area Network,控制器局域網。
CAN-bus
規范定義了物理層
和數據鏈路層
,CANopen
、DeviceNet
等定義應用層
,應用層可自行設計。支持多主通信模式。
2 CAN總線通信物理層
2.1 硬件連接
- CAN控制器:集成在控制單元內部,處理控制單元中的數據后傳給CAN收發器;同時接受收發器的數據,處理並傳給控制單元;
有的微控制器內部已經包含了CAN控制器,只需要外加CAN收發器,收發器一般是8個引腳的芯片。比如STM32:STM32+SN65HVD230(3.3V)。
- CAN收發器:集成在控制單元內部,將CAN控制器傳來的數據化為電信號並通過傳輸線發送;同時曾接受傳輸線上來的數據給CAN控制器。
CAN收發器將邏輯信號(TXD、RXD)和物理信號(CANH、CANL)相互轉換:CAN控制器向着CAN收發器的TX引腳發送數據,經過CAN收發器轉換成差分信號。(相當於數字調制)
- 數據傳輸線:兩條銅導線形成了雙絞線結構,分為CAN高位數據線
CAN_H
和低位數據線CAN_L
,具備有效的抗電磁干擾功能。信號差分傳輸,可以有效抑制共模干擾:差分信號即使由環境問題影響,也是同時影響兩根線,兩者做差可以抵消這個環境引起的變化
- 終端電阻:布置在CAN網絡的兩個終端位置,防止數據在線端被反射,以回聲的形式返回,影響數據的傳輸的准確性。
阻抗匹配: 對於高速信號一般這個電阻設置為120Ω。為什么是120Ω:因為電纜的特性阻抗為120Ω,為了模擬無限遠的傳輸線。低速CAN總線在CANH和CANL上分別串接2.2kΩ的電阻(也可以不接)。
2.2 CAN總線上的電平信號
CAN協議經過ISO標准化后有兩個標准ISO11898
標准和ISO11519-2
標准。其中ISO11898
是針對通信速率為125Kbps~1Mbps
的高速通信標准(閉環),而IS011519-2
是針對通信速率為125Kbps
以下的低速通信標准(開環)。
拿標准ISO11898
來說:
- Recessive:隱性(代表邏輯1)
CAN_H
=2.5VCAN_L
= 2.5V 兩條線上的電壓差:0V - Dominant:顯性(代表邏輯0)
CAN_H
=3.5VCAN_L
=1.5V 兩條線上的電壓差:2V
2.3 CAN總線的測量
-
電阻值測量
- (1) 測試工具
- 萬用表
- 示波器
- (2) 測試方法
- A、終端電阻
- 第一步:將電池正極斷開,整車斷電
- 第二步:萬用表調到電阻檔
200Ω
量程。 - 第三步:將萬用表的兩個表筆連接到診斷接口引腳(
CAN_H
)和引腳(CAN_L
)兩端,測量PCAN
的電阻值,若電阻值為60±10
Ω,則測試通過。
- A、終端電阻
- (1) 測試工具
-
電壓測量
分別測量兩個引腳電壓是否滿足標准
3 CAN總線通信數據鏈路層
單線CAN、低速CAN、高速CAN在數據鏈路層都相同,支持CAN2.0規范。數據鏈路層解決收發目標選擇、數據校驗、總線競爭、錯誤機制等問題。CAN-bus規定了5種通信幀——數據幀、遠程幀、錯誤幀、過載幀、幀間隔。CAN控制器實現了數據鏈路層的全部功能以及物理層的位定時功能。
名稱 | 幀用途 |
---|---|
數據幀 | 用於發送單元向接收單元傳送數據的幀 |
遙控(遠程)幀 | 用於接收單元向具有相同 ID 的發送單元請求數據的幀 |
錯誤幀 | 用於當檢測出錯誤時向其它單元通知錯誤的幀。 (硬件自動完成) |
過載幀 | 當一個節點正忙於處理接收的信息,可以通知其它節點暫緩發送新報文。(硬件自動完成) |
幀間隔 | 用於將數據幀及遙控幀與前面的幀分離開來的幀(硬件自動完成) |
數據幀
特點:用於傳輸數據,使用最多,分為標准幀CAN2.0A和擴展幀CAN2.0B。(報文濾波如何實現的?通信矩陣)
名稱 | 描述 |
---|---|
幀起始 | 表示幀的開始,產生一個bit的顯性電平。 |
仲裁段 | 表示幀的優先級, 由標識符(ID)和傳送幀類型(RTR)組成。 |
控制段 | 表示數據的字節數,由6個bit構成 |
數據段 | 數據的具體內容,可發送0~8 個字節的數據。 |
CRC段 | 用於校驗傳輸是否正確。 |
ACK段 | 表示確認是否正常接收。 |
幀結束 | 表示此幀結束。 |
幀起始
1bit
顯性電平,助記符為SOF
。作用是進行硬同步
。(因為幀間隔是隱性電平,這樣在幀起始時會有一個跳變,便於同步檢測)
仲裁段
對於CAN2.0A
,仲裁段由11bit ID
和1bit RTR
位組成,ID
規定了數據幀的優先級,ID
越小優先級越高;RTR
位是遠程發送請求位,標明該幀是數據幀還是遠程幀,數據幀該位為顯性,遠程幀該位為隱性,因此,當ID
相同時,數據幀的優先級高於遠程幀。ID
高7
位ID10-ID4
不得全為隱性。
對於CAN2.0B
,差別僅僅在於在標准幀11
位ID后面插入了1bit
顯性的替代遠程幀請求位SRR
,將標准幀中位於控制段的擴展識別位IDE
接在SRR
后面,然后接上擴展的18bit ID
。擴展幀ID
有29
位。標准幀的優先級高於擴展幀。標准幀IDE
為顯性,擴展幀為隱性。
CAN控制器會監測數據線上的電平與發送位的電平,如果不相同,停止發送,如果該位在仲裁段,則退出總線競爭,如果不在仲裁段,則產生錯誤(除了ACK段和被動錯誤標志傳輸時)。
ID禁止高7位全為隱性。在任何情況下,總線上不可能有多個設備在同一時刻使用同一個ID傳輸數據幀。
控制段
對於CAN2.0A
,控制段由IDE、保留位r0、4位的數據段長度碼DLC共6位組成。DLC表示數據段數據的字節數,取值0到8,用BCD碼表示。
對於CAN2.0B
,控制段由保留位r1、r0和4位長度碼DLC共6bit組成。
數據段
數據段包含0到8個字節,byte0在前,每個字節先傳MSB。數據量小,實時性高。
CRC段
CRC校驗,將前4段所有位進行模2除以多項式\([X^{15}+X^{14}+X^{10}+X^{8}+X^{7}+X^{4}+X^3+1]\)得到15位CRC值,再加上一位隱性的CRC界定符組成16位的CRC段。
ACK段
由一位ACK槽和一位ACK界定符組成。ACK槽期間發送節點發送隱性電平,接收正確節點發送顯性電平將總線上信號拉低。ACK界定符位1位隱性電平。要保證發送節點在應答間隙期間接收到應答的顯性位,對總線長度有了限制。
幀結束
7個連續的隱性位,助記符EOF
。
遠程幀
遠程幀與數據幀點區別在於沒有數據段,RTR
為隱性,其余相同。
錯誤幀
過載幀
幀間隔
3 CAN總線通信應用層
通過應用層協議來規范,工業領域主要有CANopen
、Devicenet
等協議。