在前2天的推送中我們介紹了I2C、SPI 匯流排,但它們多用於傳輸距離短、協議簡單、資料量小、主要面向 IC(積體電路)間通訊的“輕量級”場合。而 CAN 匯流排則不同,CAN 匯流排定義了更為優秀的物理層、資料鏈路層,並且擁有種類豐富、簡繁不一的上層協議。
什麼是CAN 匯流排
CAN 是“Controller Area Network”的縮寫,即“控制器區域網”,是一個 ISO 標準的序列通訊協議。CAN 匯流排由德國 BOSCH 公司研發設計,用於應對汽車上日益龐大的電子控制系統的需求,其最大的特點是可拓展性好,可承受大量資料的高速通訊,並且高度穩定可到。ISO 組織透過 ISO11898 和 ISO11519 對 CAN 匯流排進行了標準化,使其早早確立了歐洲汽車匯流排標準的地位。時至今日,CAN 匯流排已經獲得業界的高度認可,其應用也從汽車電子領域延伸至工業自動化、船舶、醫療裝置、工業裝置等領域。
CAN 匯流排協議規定了5種幀,分別是資料幀、遙控幀、錯誤幀、過載幀以及幀間隔,實踐中資料幀的應用最為頻繁。各種幀的用途如表1所示。
表1. CAN 匯流排資料幀的種類及用途
CAN 匯流排的特點
CAN 匯流排網路是一種真正的多主機網路,在匯流排處於空閒狀態時,任何一個節點單元都可以申請成為主機,向匯流排傳送訊息。其原則是:最先訪問匯流排的節點單元可以獲得匯流排的控制權;多個節點單元同時嘗試獲取匯流排的控制權時,將發生仲裁事件,具有高優先順序的節點單元將獲得匯流排控制權。
CAN 協議中,所有的訊息都以固定的資料格式打包傳送。兩個以上的節點單元同時傳送資訊時,根據節點識別符號(常稱為 ID,亦打包在固定的資料格式中)決定各自優先順序關係,所以 ID 並非表示資料傳送的目的地址,而是代表著各個節點訪問匯流排的優先順序。如此看來,CAN 匯流排並無類似其他匯流排“地址”的概念,在總線上增加節點單元時,連線在匯流排的其他節點單元的軟硬體都不需要改變。
在前2天的推送中我們介紹了I2C、SPI 匯流排,但它們多用於傳輸距離短、協議簡單、資料量小、主要面向 IC(積體電路)間通訊的“輕量級”場合。而 CAN 匯流排則不同,CAN 匯流排定義了更為優秀的物理層、資料鏈路層,並且擁有種類豐富、簡繁不一的上層協議。
什麼是CAN 匯流排
CAN 是“Controller Area Network”的縮寫,即“控制器區域網”,是一個 ISO 標準的序列通訊協議。CAN 匯流排由德國 BOSCH 公司研發設計,用於應對汽車上日益龐大的電子控制系統的需求,其最大的特點是可拓展性好,可承受大量資料的高速通訊,並且高度穩定可到。ISO 組織透過 ISO11898 和 ISO11519 對 CAN 匯流排進行了標準化,使其早早確立了歐洲汽車匯流排標準的地位。時至今日,CAN 匯流排已經獲得業界的高度認可,其應用也從汽車電子領域延伸至工業自動化、船舶、醫療裝置、工業裝置等領域。
CAN 匯流排網路拓撲結構
CAN 匯流排的物理連線只需要兩根線,常稱為 CAN_H 和 CAN_L,透過差分訊號進行資料的傳輸。CAN 匯流排有兩種電平,分別為 隱性電平 和 顯性電平,這兩種電平有著類似漏極 I/O 電平訊號之間“與”的關係:
· 若隱性電平相遇,則匯流排表現為隱性電平;
· 若顯性電平相遇,則匯流排表現為顯性電平;
· 若隱性電平和顯性電平相遇,則匯流排表現為顯性電平。
一個典型的 CAN 匯流排網路拓撲結構如圖1所示,注意兩端的終端電阻是必需的。
圖1. CAN 匯流排網路拓撲
CAN 匯流排的幾種資料幀
CAN 匯流排協議規定了5種幀,分別是資料幀、遙控幀、錯誤幀、過載幀以及幀間隔,實踐中資料幀的應用最為頻繁。各種幀的用途如表1所示。
表1. CAN 匯流排資料幀的種類及用途
CAN 匯流排的特點
CAN 匯流排網路是一種真正的多主機網路,在匯流排處於空閒狀態時,任何一個節點單元都可以申請成為主機,向匯流排傳送訊息。其原則是:最先訪問匯流排的節點單元可以獲得匯流排的控制權;多個節點單元同時嘗試獲取匯流排的控制權時,將發生仲裁事件,具有高優先順序的節點單元將獲得匯流排控制權。
CAN 協議中,所有的訊息都以固定的資料格式打包傳送。兩個以上的節點單元同時傳送資訊時,根據節點識別符號(常稱為 ID,亦打包在固定的資料格式中)決定各自優先順序關係,所以 ID 並非表示資料傳送的目的地址,而是代表著各個節點訪問匯流排的優先順序。如此看來,CAN 匯流排並無類似其他匯流排“地址”的概念,在總線上增加節點單元時,連線在匯流排的其他節點單元的軟硬體都不需要改變。
CAN 匯流排的通訊速率和匯流排長度有關,在匯流排長度小於 40m 的場合中,資料傳輸速率可以達到 1Mbps,而即便匯流排長度上升至 1000m,資料的傳輸速率仍可達到 50Kbps,無論在速率還是傳輸距離都明顯優於常見的 RS232、RS485 和 I2C 匯流排。
對於匯流排錯誤,CAN 匯流排有錯誤檢測功能、錯誤通知功能、錯誤恢復功能三種應對措施,分別應對於下面三點表述:所有的單元節點都可以自動檢測總線上的錯誤;檢測出錯誤的節點單元會立刻將錯誤通知給其他節點單元;若正在傳送訊息的單元檢測到當前匯流排發生錯誤,則立刻強制取消當前傳送,並不斷反覆傳送此訊息至成功為止。
CAN 總線上的每個節點都可以透過判斷得出,當前總線上的錯誤時暫時的錯誤(如瞬間的強幹擾)還是持續的錯誤(如匯流排斷裂)。當總線上發生持續錯誤時,引起故障的節點單元會自動脫離匯流排。
CAN 總線上的節點數量在理論上沒有上限,但在實際上收到總線上的時間延時及電氣負載的限制。降低最大通訊速率,可以增加節點單元的連線數;反之,減少節點單元的連線數,則最大通訊速率可以提高。