[CAN匯流排] CAN匯流排簡介
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_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
等協議。