Controller_area_network

**控制器區域網路** (**Controller Area Network**，簡稱 **CAN** 或者 **CAN bus**) 是一種功能豐富的車用匯流排標準。被設計用於在不需要主機（Host）的情況下，允許網路上的單晶片和儀器相互通信。 它基於訊息傳遞協定，設計之初在車輛上採用復用通信線纜，以降低銅線使用量，後來也被其他行業所使用。

CAN 建立在基於資訊導向傳輸協定的廣播機制（Broadcast Communication Mechanism）上。其根據資訊的內容，利用資訊標誌符（Message Identifier，每個標誌符在整個網路中獨一無二）來定義內容和訊息的優先順序進行傳遞，而並非指派特定站點位址（Station Address）的方式。

因此，CAN 擁有了良好的彈性調整能力，可以在現有網路中增加節點而不用在軟、硬體上做出調整。除此之外，訊息的傳遞不基於特殊種類的節點，增加了升級網路的便利性。

## 歷史

羅伯特・博世公司於 1983 年開發了控制器區域網路（CAN bus）。該協定於 1986 年美國密西根州底特律市舉行的國際汽車工程師學會（SAE）會議上正式發表。第一個 CAN 控制晶片，由英特爾和飛利浦生產，並且於 1987 年發布。 世界上第一台裝載了基於 CAN 的多重線系統的汽車是 1991 年推出的梅賽德斯 - 賓士 W140。

博世公司發表了關於 CAN 規範的幾個版本，最新的 CAN 2.0 於 1991 年發布。該規範被分為兩部分；A 部分適用於使用 11 位識別碼的標準格式，B 部分適用於使用 29 位標誌符的拓展格式。使用 11 位識別碼的 CAN 裝置一般被稱作 CAN 2.0A，而使用 29 位辨識碼的 CAN 裝置通常稱為 CAN 2.0B。博世公司免費提供標準、規範和白皮書。

1993 年，國際標準化組織（ISO）公布了 CAN 標準 ISO11898。後來 CAN 標準被重新編譯分成兩個部分：ISO11898-1 涵蓋了資料鏈路層；ISO11898-2 涵蓋了高速 CAN 匯流排的實體層； ISO11898-3 於晚些時候公布並且涵蓋了低速 CAN 匯流排的實體層和 CAN 匯流排容錯規範。 實體層標準 ISO11898-2 和 ISO11898-3 並不包含在博世 CAN2.0 規範中，它們可以單獨從 ISO 購買。

之後，博世公司仍然積極地拓展 CAN 標準。2012 年，博世公布 CAN FD 1.0 或稱作可變資料速率的 CAN。這個規範使用不同的架構，允許在仲裁之後，切換至更快的位元速率，傳輸不同的資料的長度。CAN FD 相容現有的 CAN 2.0 網路，所以新的 CAN FD 裝置能夠與現有 CAN 裝置共存於同一控制網路。

CAN 匯流排是五個使用在車載診斷 (OBD)-II 標準的協定的其中一個。1996 年以後，所有在美國銷售的汽車及輕型卡車被強制要求符合 OBD-II 標準。在歐盟，自 2001 年後銷售的汽油載具及 2004 年後銷售的柴油載具都強制規定需要符合 EOBD 標準。

## 應用

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

* 乘用車、卡車、公共汽車（汽油車及電動車）
* 航空、航海電子儀器
* 工業自動化及機械控制
* 電梯、扶梯
* 建築自動化
* 醫療儀器及裝置

### 汽車

現代的汽車可能為其子系統配備多達 70 個電子控制器（ECU）。最常見的控制器為發動機控制器。除此以外，變速器、安全氣囊、防鎖死煞車系統 / ABS、定速巡航、動力方向盤、音響系統、動力車窗、車門、後視鏡調整、電池和混合動力電動汽車的充電系統等等均使用電子控制器。這其中，有的是獨立的子系統，有些需要跟其他子系統進行通信，控制驅動器或接收感測器的回饋資訊。為此設計了控制器區域網路，將汽車的不同系統相互連接在一起。傳統的「電纜直連」成本高，布線複雜，而控制器區域網路僅需軟體就可實現，不僅安全、經濟還十分便利。

* 自動啟動 / 停止：車輛各處的各種感測器（速度感測器、轉向角、空調關閉，發動機溫度）所發出的各種訊號可由 CAN 匯流排收集並用於決定是否可以在停車時關閉發動機，進而改善燃油效率和尾氣排放。
* 電子駐車制動系統："斜坡駐車" 的功能需要車輛的傾斜感測器（同時用於防盜報警器）和道路的速度感測器（同時用於防鎖死制動、發動機控制和牽引力控制）通過 CAN 匯流排傳輸採樣訊號並決定車輛是否停在斜坡上。同樣，安全帶的感測器 (安全氣囊的一部分) 通過 CAN 匯流排傳輸訊號，以確定安全帶是否扣上，然後泊車的剎車會自動在移動時關閉。
* 駐車輔助系統：當司機切換至倒檔，變速器控制單元可以通過 CAN 匯流排傳送訊號，啟用停車感測器系統和車門控制模組，使副駕駛側的後視鏡向下傾斜顯示路涯。 CAN 匯流排也可以從雨水感測器取得訊號，在倒車時自動觸發後擋風玻璃雨刮。
* 車道偏離警示 / 防撞系統：車道偏離警示 / 駐車感測器的訊號也可通過 CAN 匯流排用於駕駛輔助系統判斷附近物體，比如車道偏離警示。最近，這些訊號可以通過 CAN 匯流排觸發防撞系統中的電子剎車系統。
* 汽車剎車清掃：雨水感測器 (主要用於自動擋風玻璃雨刷) 通過 CAN 匯流排將訊號送達防抱死制動系統模組中，在行駛中輕微觸發一次人體不會察覺的剎車來清除剎車片上的液體。奧迪和寶馬的某些高效能型號搭配有這一功能。

近些年又開發出了 LIN（區域網際網路）標準，用在非關鍵系統中的應用，例如空調和資訊娛樂系統等資料傳輸速度和可靠性不是很重要的系統中。

### 其他

* CAN 匯流排協定自 2009 年後被用於禧瑪諾 DI2 的公路自行車電子變速系統上。同樣的，Ansmann 和 BionX 在它們的直驅電機中使用 CAN 協定。
* 由於 CAN 控制器和處理器價格低廉，CAN 匯流排同樣可應用於普通自動化環境的現場匯流排中。
* 包括 NISMO 在內的開發商致力於使用 CAN 匯流排資料在 GT 賽車 6 中利用遊戲內的 GPS 資料，重建真實的賽車視覺動態模糊，玩家將獲得真實的賽車動態模糊效果。
* 約翰・霍普金斯大學應用物理學實驗室的模組化假肢（MPL）使用局域 CAN 匯流排使假肢上的伺服電機和控制器的溝通更容易。

## 架構

CAN 是一個用於連接電子控制單元（ECU）的多主機串行匯流排標準。電子控制單元有時也被稱作節點。CAN 網路上需要至少兩個節點才可進行通信。節點的複雜程度可以只是簡單的輸入輸出裝置，也可以是包含有 CAN 互動器並搭載了軟體的嵌入式元件。節點還可能是一個閘道器，允許普通電腦通過 USB 或乙太網路埠與 CAN 網路上的裝置通信。

所有節點通過兩根平行的匯流排連接在一起。兩條電線組成一條雙絞線，並且接有 120Ω 的特性阻抗。

**ISO 11898-2**，也稱為高速度 CAN。它在匯流排的兩端均接有 120Ω 電阻。

高速 CAN 匯流排在傳輸顯性（0）訊號時，會將 CAN\_H 端抬向 5V 高電平，將 CAN\_L 拉向 0V 低電平。當傳輸隱性（1) 訊號時，並不會驅動 CAN\_H 或者 CAN\_L 端。 顯性訊號 CAN\_H 和 CAN\_L 兩端差分標稱電壓為 2V。 終端電阻在沒有驅動時，將差分標稱電壓降回 0V。顯性訊號（0）的共模電壓需要在 1.5V 到 3.5V 之間。隱性訊號（1）的共模電壓需要在 +/-12V。

**ISO 11898-3**，也被稱作低速或者容錯 CAN。它使用線性主線，星形主線或者連接到一個線性主線上的多星結構主線著稱。每個節點都有終端電阻作為全域終端電阻的一部分。全域終端電阻不應低於 100 Ω。

低速 / 容錯 CAN 訊號在傳輸顯性訊號（0）時，驅動 CANH 端抬向 5V，將 CANL 端降向 0V。在傳輸隱性訊號（1）時並不驅動 CAN 匯流排的任何一端。在電源電壓 Vcc 為 5V 時，顯性訊號差分電壓需要大於 2.3V，隱性訊號的差分電壓需要小於 0.6V。CAN 匯流排兩端未被驅動時，終端電阻使 CANL 端回歸到 RTH 電壓（當電源電壓 Vcc 為 5V 時，RTH 電壓至少為 Vcc-0.3V=4.7V），同時使 CANH 端回歸至 RTL 電壓（RTL 電壓最大為 0.3V）。兩根線需要能夠承受 - 27V 至 40V 的電壓而不被損壞。

在高速和低速 CAN 中，從隱性訊號向顯性訊號過渡的速度更快，因為此時 CAN 線纜被主動積極地驅動。顯性向隱性的過渡速度主要取決於 CAN 網路的長度和導線的電容。

高速 CAN 通常被用於汽車和工業應用，在這些應用環境中，匯流排通常從一端橫跨至另一端。容錯 CAN 匯流排則經常被用在需要連接在一起的一組節點。

ISO 規格只要求匯流排共模電壓必須保持在最小和最大範圍內，但不定義如何將匯流排電壓保持在這個範圍。

CAN 匯流排必須使用終端電阻。終端電阻可以用來抑制訊號反射，同時可以使匯流排電壓回到隱性狀態或者閒置狀態。

高速 CAN 在匯流排兩端使用 120Ω 電阻。低速 CAN 在每個節點均使用電阻。也有其他類型的終端，例如 ISO 11783 中定義了終端偏壓電路。 

終端偏壓電路使用由 4 條導線組成的線纜，除了 CAN 訊號線以外還有電源線和地線。這在每段匯流排兩端提供自動偏壓和終端功能。ISO11783 網路是專為熱拔插匯流排段和電子控制單元設計的。

每個節點需要:

* 中央處理器、微處理器或主處理器
  * 處理主機決定收到的資訊的意思以及想要傳輸的資訊。
  * 感測器、驅動器和控制裝置可以與主處理器連接。
* CAN 控制器；通常是整合單晶片的一部分
  * 接收：CAN 控制器將從匯流排上接收的串位位元組儲存直到整個訊息可用，之後主處理器可以取得這個訊息（通常由於 CAN 控制器觸發一個中斷）。
  * 傳送：主處理器傳送傳遞資訊到 CAN 控制器，之後當匯流排空閒時將串位資訊傳遞至匯流排。
* 收發器；由 ISO11898-2/3 媒介存取單元（MAU）標準定義
  * 接收：把資料流從 CAN 匯流排層轉換成 CAN 控制器可以使用的標準。 CAN 控制器通常配有保護電路。
  * 傳輸：把來自 CAN 控制器的資料流轉換至 CAN 匯流排層。

每個節點能夠傳送和接收資訊，但不是同時進行的。 一個訊息或影格主要包括識別碼 (ID)，它表示資訊的優先級，最多八個資料位元組。CRC、ACK 和其他影格部分也是訊息的一部分。改進了的 CAN FD 將每個影格拓展至最多 64 位元組。 訊息採用不歸零 (NRZ) 格式串聯傳送到主線並可被所有節點接收。

被 CAN 網路連接的裝置通常是感測器，驅動器和其他控制裝置。 這些裝置通過一個中央處理器、一個 CAN 控制器，和一個 CAN 接收器連接至匯流排。

## 資料傳輸

CAN 資料傳輸如果出現爭執，將會使用無失真位仲裁解決辦法。該仲裁法要求 CAN 網路上的所有節點同步，對每一位的採樣都在同一時間。這就是為什麼有人稱之為 CAN 同步。然而，同步這個術語在此並不精確，因為資料以非同步格式傳輸而不包含時鐘訊號。

CAN 規範中使用術語 "顯性" 位和 "隱性" 位來表示邏輯高低。顯性是邏輯 0 (由發信器積極驅動通過電壓) 而隱性是邏輯 1 (被動地通過電阻返回到一個電壓)。 閒置狀態代表隱性的水平，也就是邏輯 1。如果一個節點傳送了顯性位而另一個節點傳送一個隱性位，那麼匯流排上就有衝突，最終結果是顯性位「獲勝」。這意味著，更高優先級的資訊沒有延遲。較低優先級的節點資訊自動在顯性位傳輸結束，6 個時鐘位之後嘗試重新傳輸。這使得 CAN 適合成為一個即時優先通訊系統。

邏輯 0 或 1 的確切電壓取決於所使用的實體層，但 CAN 的基本原則要求每個節點監聽 CAN 網路上的資料，包括發信節點本身。如果所有節點都在同時傳送邏輯 1，所有節點都會看到這個邏輯 1 訊號，包括發信節點個接受節點。如果所有發信節點同時傳送邏輯 0 訊號，那麼所有節點都會看到這個邏輯 0 訊號。當一個或多個發信節點傳送邏輯 0 訊號，但是有一個或多個發信節點傳送了邏輯 1 訊號，所有節點包括傳送邏輯 1 訊號的節點也會看到邏輯 0 訊號。當一個節點傳送邏輯 1 訊號但是看到一個邏輯 0 訊號，它會意識到線上有爭執並登出發射。通過這個過程，任何傳送邏輯 1 的節點在其他節點傳送邏輯 0 時登出或者失去仲裁。失去仲裁的節點會在稍後把資訊重新加入佇列，CAN 影格的位元流保持沒有故障繼續進行直到只剩下一個發信節點。這意味著傳送第一個邏輯 1 的節點喪失仲裁。由於所有節點在開始 CAN 影格時傳輸 11 位 (或 CAN 2.0B 中是 29 位) 識別碼，擁有最低識別碼的發信節點在起始處擁有更多 0。那個節點贏得仲裁併且擁有最高優先級。

例如，一個 11 位識別碼的 CAN 網路，有兩個節點，他們的 ID 分別為 15（二進位表示為 00000001111）和 16（二進位表示為 00000010000）。如果這兩個節點同時傳輸，每個都會優先傳輸它們識別碼中的前 6 個 0 而不觸發仲裁。

當 ID 中的第 7 位傳輸時，節點 16 為其 ID 傳送 1 (隱性)，而節點 15 為其 ID 傳送 0（顯性）。當這種情況發生時，該節點 16 知道自己傳送了 1，但在匯流排上看到了 0，意識到有衝突發生並且自己失去仲裁。節點 16 停止傳送而節點 15 繼續傳輸自己的 ID，沒有遺失任何資料。擁有最低 ID 的節點總是贏得仲裁，因此具有最高優先級。

長度小於 40m 的網路最高支援的位元速率高達 1 百萬位元 / 秒。降低位元速率可以允許使用更長的網路距離（例如，125 千位元 / 秒支援最大 500 米）。改進的 CAN FD 標準允許仲裁後升高位元速率，可以將資料區段速度增加至仲裁位速率的八倍。

## ID 分配

資訊 ID 在單條 CAN 匯流排上必須是唯一的，否則兩個節點將在仲裁位 (ID) 傳送結束後繼續傳輸，造成錯誤。

1990 年代早期，為資訊選擇標誌符（ID）的準則僅僅基於資料的種類和發信節點。但是，當標誌符同樣代表著資訊的優先級時，這會帶來不好的即時回應。在這種情況下，通常要求 CAN 匯流排只能使用大概 30% 才能保證資訊可以在截止時間之前到達。然而，如果資訊的標誌符根據資訊的優先級決定，更低標誌符的資訊獲得更高優先級，那麼在不損失資料的前提下，匯流排的使用率可以達到 70% 到 80%。

## 位時序

CAN 網路上的所有節點必須執行在相同的標稱位元速率下，但噪音、相移、振盪頻率容差和振盪頻率漂移導致實際的位元速率可能與標稱位元速率不同。由於沒有使用一個單獨的時鐘訊號，需要一個同步節點方法。同步在仲裁機制中十分重要，因為仲裁中的節點需要能夠同時看到它們傳輸資料的資料和其他節點的傳輸資料。 同步在確保節點間震盪時間不同時不發生錯誤上十分重要。

匯流排閒置一段時間後，在第一個隱性訊號向顯性訊號轉換時（起始位） 進行硬同步。再次同步發生在傳輸影格期間的每次從隱性向顯性轉換時。CAN 控制器期望在標稱位時間內發生多次轉換。如果並沒有在期望的確定時間發生，控制器將根據這調整標稱位時間。

調整是通過將每一位劃分成多個稱為量子的時間段，並分配一定數量的量子到位中的四個階段完成的。這四個階段分別為：同步、傳播、相位元欄 1 和相位元欄 2。

位被分成的量子數量會因控制器的不同而不同，每一個階段分配的量子數會因位元速率和網路狀況的不同而改變。

在預期時刻之前或之後發生的過渡會促使控制器計算時間差，並根據計算所得的時間差延長相位元欄 1 或者縮短相位元欄 2。這有效地改變接收器到發信器的時序，將它們同步在一起。這個重新同步過程不斷地在每次隱性向顯性過渡時進行已確保發信器和接收器保持同步。不斷地重新同步降低了噪聲產生的錯誤，讓同步至已經失去仲裁的節點的接收節點重新同步到贏得仲裁的節點。

## 層級

CAN 協定與很多網路協定相似，可以被分解為下列抽象層：

**應用層**
**物件層**

* 資訊過濾
* 訊息和狀態處理

**傳輸層**

大多數 CAN 標準應用在傳輸層。傳輸層從實體層接收訊息並將這些資訊傳遞給物件層。傳輸層負責特定時序、同步、資訊位構架、仲裁、確認、錯誤檢測及發信和故障約束。它的職責為：

* 故障約束
* 錯誤監測
* 訊息驗證
* 資訊確認
* 仲裁
* 資訊影格
* 傳輸速率和時間
* 路由資訊

**實體層**

CAN 匯流排（ISO11898-1:2003）最初指定的鏈路層協定僅包括對實體層的抽象需求。 實體層關於電氣方面的（電壓，電流，數量導體）規定來自於 ISO11898-2:2003，該協定目前被廣泛接受。但是，實體層關於機械方面的（接頭種類和數量、顏色、標籤、標準輸出）尚未被正式指定。因此，汽車的電子控制單元（ECU）通常會有客製化的介面和各種線纜組成 CAN 匯流排。儘管如此，領域中已經出現若干機械方面的標準，最常見的是使用 9 個引腳的 D-sub 型插頭，擁有以下引腳分布：

* 引腳 2：CAN-Low （CAN−）
* 引腳 3：GND （地線)
* 引腳 7：CAN-High （CAN+）
* 引腳 9：CAN V+ （供電）

這個 CAN 的機械標準可以用於 D-sub 介面的插頭和插座。匯流排電流從插座流向插頭。這遵循了電源在插座處截止的電氣工程慣例。採用本標準避免了為將節點連接到同一個 D 介面而製作客製化分離器。非標準 (自訂) 線束 (分離器)，線上纜上分離 CAN 分支，減少匯流排的可靠性、消除電纜可交換性、減少線束的相容性並且增加成本。

 
完整的實體層規範的缺失（電氣和機械方面）減少了 CAN 匯流排的限制，降低了實現功能時實體層面的複雜度。但它讓 CAN 匯流排在互動時因為機械原因不相容。為了提高互用性，許多汽車製造商制定了描述可相容使用的 CAN 接收器的一套參數規範。最大寄生電容包括電容本身以及靜電保護（ESD）（靜電保護在 ISO 7637-3 中定義）。除了寄生電容、12V 和 24V 系統因為最大電壓不同有不同的標準。事實上，在助推啟動（jump start）時，輕型車輛的先電壓可以達到 24V，而卡車系統可以達到 36V。新的解決方案，允許同樣的元件使用於 CAN 和 CAN FD (詳見）即將投入市場。

ISO11898-2:2003 中的噪聲免疫是通過在匯流排兩端使用低電阻值（120 歐姆）維持匯流排兩條線間的差分阻抗實現的。然而，當處於休眠狀態時，例如 CAN 匯流排的低阻值匯流排會比其他基於電壓的訊號匯流排消耗更多電流。在 CAN 匯流排系統中，當一條訊號線中的電流於另一條反方向電流值一樣時，該平衡傳輸線為接收器提供穩定的 0V 參考電壓。最好的做法是在已經有很嘈雜的射頻干擾的汽車內，對 CAN 匯流排使用帶封鎖層的雙絞線，以儘量減少射頻訊號的發射，降低干擾的敏感性。

ISO11898-2 在發信器和接收器之間提供一定的共模電壓免疫。通過一個 0V 的通路保持節點間的電壓關聯。此外，在上述的現有機械結構里，包含一個將電力分配到各個節點的收發器的供電軌通道。該設計為所有收發器提供了一個共享的電源。匯流排上應用的實際電壓由使用的收發器決定，並沒有統一規範。常見設計是，通過 CAN 匯流排為每個與自身節點電氣隔離的收發器提供電壓驅動 5V 變壓器。這通常提供足夠多的冗餘度來保證節點間的互用性。 這種網路的典型供電電壓在 7V 到 30V 之間。但是，通用標準的缺失導致系統的設計者要為供電軌道的相容性負責。

ISO 11898-2 中描述的電氣實施方法構建了一個在匯流排兩端使用終端電阻組成的多站單端平衡線路布局。在這個結構中，顯性狀態由一個或多個傳輸器將 CAN\_L 切換至 0V，同時將 CAN\_H 切換至 5V 匯流排電壓來形成通過終端電阻的電流通路。終端電阻在這種訊號系統中起到限制高頻反射波形的核心作用。

在隱性狀態時，訊號線和電阻相對於高低軌道保持在高阻抗狀態。CAN\_H 和 CAN\_L 軌道的電壓趨向於中立。隱性狀態僅在匯流排上沒有任何傳輸器宣布顯性狀態時出現。

在顯性狀態時，訊號線和電阻相對於高低軌道變為低阻抗狀態，因此電流能夠流過電阻。CAN\_H 電壓趨向於 5V，同時 CAN\_L 趨向於 0V。

不管匯流排上訊號是什麼狀態，訊號線線上纜兩端因為電阻的存在，相互之間總是保持低阻抗。

這個訊號策略與例如 RS-422/3 和 RS-485 等等的其他平衡線路傳輸技術由顯著的不同。RS-422/3 和 RS-485 擁有差分線纜驅動但是差分模式下電壓為一正一負。在這樣的系統多路通信通常依靠在時域中支援三種狀態（高電平有效、低電平有效和不活動三種狀態）的媒介。在 CAN 匯流排上進行多路通信只需要系統的電邏輯支援兩個狀態，在概念上與「由線纜構成的與門」網路相似。

## 影格

CAN 網路可以組態為使用兩種不同的訊息（或「影格」）格式：標準或基本影格格式（在 CAN 2.0 A 和 CAN 2.0 B 中描述）和擴充影格格式（僅由 CAN 2.0 B 描述）。兩種格式之間的唯一區別是，「CAN 基本影格」支援識別碼長度為 11 位，「CAN 擴充影格」支援識別碼長度為 29 位，由 11 位識別碼（「基本識別碼」）和一個 18 位元擴充（「識別碼擴充」）組成。CAN 基本影格格式和 CAN 擴充影格格式之間的是通過使用 IDE 位進行區分的，該位在傳輸顯性時為 11 位影格，而在傳輸隱性時使用 29 位影格。支援擴充影格格式訊息的 CAN 控制器也能夠傳送和接收 CAN 基本影格格式資訊。所有的影格都以開始位（SOF）作為資訊傳輸的起始。

CAN 有 4 種影格類型：

* 資料框：包含用於傳輸的節點資料的影格
* 遠端影格：請求傳輸特定識別碼的影格
* 錯誤影格：由任何檢測到錯誤的節點傳送的影格
* 過載影格：在資料框或遠端影格之間插入延遲的影格

### 資料框

資料框是唯一用於實際資料傳輸的影格。它有兩種資訊結構：

* 基本影格格式：有 11 個識別碼位
* 擴充影格格式：有 29 個識別碼位

CAN 標準要求必須接受基本影格格式並可能接受擴充影格格式，但必須能承受擴充影格格式。

#### 基本影格格式

影格格式如下：位值是用於描述 CAN-LO 訊號的。

#### 拓展影格格式

影格的格式如下表所示：

兩個定位符區域 A 和 B 共同組成 29 位定位符。

### 遠端影格

* 通常資料傳輸是在資料來源節點（例如感測器）發出資料框的情況下自主執行的。但是，目標節點也可以通過傳送遠端影格來從資訊源請求資料。
* 資料框和遠端影格之間有兩個區別。首先，RTR 位在資料框中作為顯性位傳輸，其次在遠端影格中沒有資料段。DLC 欄位表示所請求的訊息的資料長度，而不是傳送的資料長度。

也就是說：

　
: RTR = 0；資料框中為顯性

　
: RTR = 1；遠端影格中位隱性

在資料框和具有相同識別碼的遠端影格同時傳送的情況下，由於資料框識別碼之後的 RTR 位是顯性，它將贏得仲裁。

### 錯誤影格

錯誤影格由兩個不同的欄位組成：

* 第一段由不同站點提供的錯誤標誌（6-12 個顯性位 / 隱性位）的疊加給出。
* 接下來的第二段是錯誤影格定界符（ERROR DELIMITER，8 個隱性位）。

錯誤標誌也有兩種：

**主動錯誤標誌**
: 六個顯性位 - 由網路上錯誤狀態為「主動錯誤」的出錯的節點傳送。

**被動錯誤標誌**
: 六個隱性位 - 由網路上錯誤狀態為「被動錯誤」的出錯的節點傳送。

CAN 有兩種錯誤計數器：

```
    1.传输错误计数器（Transmit error counter，简称TEC）
    2.接受错误计数器（Receive error counter，简称REC）
```

* 當傳輸錯誤計數器 TEC 或接受錯誤計數器 REC 大於 127 且小於 255 時，將在匯流排上傳輸被動錯誤影格。
* 當傳輸錯誤計數器 TEC 或接受錯誤計數器 REC 小於 128 時，將在匯流排上傳輸主動錯誤影格。
* 當傳輸錯誤計數器 TEC 或接受錯誤計數器 REC 大於 255 時，節點進入主線離線狀態，不會傳輸影格。

### 過載影格

過載影格包含兩個位欄位：過載標誌（Overload Flag）和過載定界符（Overload Delimiter）。有兩種過載條件可導致過載標誌的傳輸：

1. 接收器的內部條件，要求延遲下一個資料框或遠端影格。
2. 中斷檢測到一個顯性位。

由於情況 1 引起的過載影格只允許在預期中斷的第一位時間開始，而由情況 2 引起的過載影格在檢測到顯性位後一位開始。過載標誌由六個顯性位組成，其整體形式與主動錯誤標誌的形式相對應。過載標誌的形式破壞了中斷區的固定形式。因此，所有其他站點也會檢測到過載情況，並在它們自己的部分開始傳輸過載標誌。過載定界符由 8 個隱性位組成，與錯誤分隔符的形式相同。

## 偵錯機制

CAN 提供了五種除錯機制，使其錯誤發生率低於 4.7×10-11。當一個以上的上述錯誤發生時，傳送中的傳輸將會失敗中止並且產生錯誤封包，發訊端則會試著重新傳送訊息封包。各個節點將會重新爭取優先權。

CAN 的五種偵測錯誤機制

## 確認槽（ACK）

確認插槽用於確認收到的 CAN 影格有效。接收到影格而沒有發現錯誤的每個節點在 ACK 槽中傳送顯性水平，來覆蓋發射機的隱性水平。如果發射機在 ACK 時隙中只檢測到隱性電平，它就知道沒有任何接收器獲得有效的影格。接收節點可以傳送隱性訊號來指示它沒有接收到有效影格，但是確實接收到有效影格的其它節點可以用顯性訊號覆蓋它。傳送節點無法知道 CAN 網路上的是否所有節點都收到了該訊息。

## 影格間內容

資料框和遠端影格通過稱為影格間空間的區域與前面的影格分開。影格間空間由至少三個連續的隱性（1）位組成。之後，如果檢測到一個顯性位，它將被視為下一影格的「起始位」。 過載影格和錯誤影格不比影格間空間重要，並且多個過載影格也不由影格間空間分隔。影格間空間包含了欄位中斷和匯流排空閒，並且如果前一訊息的傳送器是被動錯誤站點，會將匯流排暫掛。

## 位填充

傳輸器會在相同極性的五個連續位之後插入一個相反的極性的位，以確保足夠的轉換來保持同步。這種做法被稱為位填充，並且對於 CAN 這樣的不歸零（NRZ）編碼是必要的。填充的資料框由接收器去掉填充。

除了 CRC 定界符，ACK 欄位和結束位這樣固定字長的區域之外，影格中其他所有欄位都會被填充，這些欄位是固定大小且未被填充。在使用位填充的欄位中，具有相同極性的六個連續位（111111 或 000000）被視為錯誤。 當檢測到錯誤時，節點可以傳送主動錯誤標誌。主動錯誤標誌由六個連續的顯性位組成，違反了位填充規則。

位填充意味著資料框可能比上述表中列舉的預期的要長。CAN 影格（基本格式下）的最大尺寸的情況是

　
: 11111000011110000...

被填充為：（填充位用粗體顯示）

　
: 11111**0**0000**1**1111**0**0000**1**...

填充位本身可能成為五個連續相同位中的第一個，所以在最壞的情況下，每四個原始位有一個填充位。

長度由下面公式給出：

　
: $8n+47+\left\lfloor {\frac {34+8n-1}{4}}\right\rfloor $

其中 $8n+47$ 是填充前影格的長度，在最壞情況下，原資料除了第一個 4 位元後，在每個 4 位元後增加一位（所以分子減去 1），同時由於位的結構，原生的 47 位中只有 34 位元能夠被填充。

## CAN 低層標準

**ISO 11898 系列**規定了用於道路車輛的 CAN 串行通信技術的實體層和資料鏈路層（ISO/OSI 模型的第一和第二層），支援分散式即時控制和多路復用。

有如下幾個 CAN 實體層及其他層的標準：

**ISO 11898-1:2015** 規定了控制器區域網路（CAN）的資料鏈路層（DLL）和物理信令。該文件根據 ISO/IEC 7498-1 中建立的開放系統互連（OSI）的 ISO 參考模型，描述了 CAN 匯流排層級通用架構，並提供了在模組之間建立數字資訊交換實現 CAN 資料鏈路層的特性，和邏輯鏈路控制（LLC）次層和媒介存取控制（MAC）次層的詳細參數。

**ISO 11898-2:2003** 規定了高速（傳輸速率高達 1 Mbit /s）媒介存取單元（MAU）和一些媒體相依介面（MDI）特性（根據 ISO 8802-3），共同組成了控制區域網路的實體層。ISO 11898-2 使用雙線平衡傳輸線信令體系，是車用動力總成應用和工業控制網路中最常用的實體層。

**ISO 11898-3:2006** 規定了在道路車輛電子控制單元之間建立的低速、容錯、依賴媒介的介面的數字資訊交換設定，其傳輸速率在 40kBit/s 至 125kBit/s 之間。

**ISO 11898-4:2004** 規定了在 CAN 中的時間觸發通信（TTCAN）。它適用於在配備 CAN 的道路車輛的電子控制單元（ECU）之間建立時間觸發的數字資訊交換，並且根據 ISO11898-1 規定了與邏輯鏈路和媒介存取控制協調的影格同步化，提供了時間觸發的通訊時間表。

**ISO 11898-5:2007** 規定了道路車輛內傳輸速率高達 1 Mbit/s 的 CAN 網路實體層。它根據 ISO 8802-2 描述了媒介存取單元的功能以及一些與媒介相關的介面功能。它是 ISO 11898-2 的擴充，應對沒有主動主線通訊但是要求低功耗特性的系統。

**ISO 11898-6:2013** 規定了道路車輛內傳輸速率高達 1 Mbit/s 的 CAN 網路實體層。它根據 ISO 8802-2 描述了媒介存取單元的功能以及一些與媒介相關的介面功能。它是 ISO 11898-2 和 ISO 11898-5 的擴充，描述了一種可選的，利用可組態的 CAN 網路影格的選擇性喚醒機制。

**ISO 16845-1:2004** 提供了用於檢查 CAN 是否符合 ISO 11898-1 規定所必需的方法和簡要測試套件。

**ISO 16845-2:2014** 設立測試案例和測試要求，驗證具有選擇性喚醒功能的 CAN 收發器是否符合指定的功能。ISO 16845-2：2014 中定義的測試類型稱為一致性測試。

## 基於 CAN 的高層協定

由於 CAN 標準不包括例如資料流量控制、裝置定址、傳輸多條訊息的資料塊和應用資料等應用層協定的工作，許多高層協定被指定出來。 儘管這些協定都能被製造商擴充，但其中只有幾個為商用領域標準化。對於乘用車，每個製造商都有自己的標準。 其中包括：

### 標準化的方法

* ARINC 812 或 ARINC 825（航空工業）
* CANopen - EN 50325-4（工業自動化技術）
* DeviceNet（工業自動化技術)
* EnergyBus - CiA 454（輕型電動汽車）
* ISOBUS - ISO 11783（農用機械）
* ISO-TP - ISO 15765-2（機動車診斷用傳輸協定）
* SAE J1939（公車和卡車的車用網路）
* MilCAN
* NMEA 2000 - IEC 61162-3（航海工業）
* 統一診斷服務（UDS） - ISO 14229 （汽車診斷）

### 其他方法

* CANaerospace - Stock (航空工業)
* CAN Kingdom - Kvaser (嵌入式系統)
* CCP/XCP（汽車 ECU 校正校準）
* GMLAN - General Motors（通用汽車）
* RV-C - RVIA（娛樂用載具）
* SafetyBUS p - Pilz（工業自動化技術）
* UAVCAN（航空航天及機器人）

## CANopen 電梯

CANopen 特別興趣組織（SIG）「電梯控制」成立於 2001 年，為電梯控制系統開發了 CiA 417 CANopen 應用組態。CiA 417 的第一個版本於 2003 年夏發布。2.0 版本於 2010 年 2 月在 CiA 網站公布。SIG 致力於擴充 CANopen 電梯系統的功能，改進技術內容並確保滿足當前對電梯控制系統的法律標準。2.1.0 版本於 2012 年 7 月發布，於 2015 年 12 月發布 2.2.0 版本（CiA 成員可以獲得）標準草案提案。 目前（2016 年）SIG 正在開發 2.3.0 版本（CiA 成員可以獲得）。

SIG 的主席是 Jörg Hellmich（ELFIN GmbH），它同時是 CANopen 電梯社群維基的管理員。

## 安全性

CAN 是低階協定，不支援任何內在的安全功能。在標準的 CAN 中也沒有加密，這使得這些網路資料能被截取。在大多數應用中，應用程式需要部署自己的安全機制，例如認證傳入命令或網路上某些裝置的存在。若不執行適當的安全措施，其他人可能設法在匯流排上插入訊息。 儘管一些安全關鍵功能（如修改韌體，編程鍵或控制防抱死制動）存在密碼，但這些系統並未普遍實施，並且金鑰對的數量有限。

## 開發工具

在開發 CAN 匯流排或排除故障時，檢查硬體訊號非常重要。可以使用邏輯分析儀和匯流排分析儀來收集、分析、解碼並儲存高速波形訊號。此外，還有 CAN 匯流排監視器及其它特殊工具。

CAN 匯流排監視器是一個分析工具，通常是硬體和軟體的組合，用於開發使用在 CAN 匯流排上的硬體。

通常，CAN 匯流排監視器將監聽 CAN 匯流排上的通信量，以便將其顯示在自身的使用者介面中。它通常也能將 CAN 影格傳送到匯流排來類比 CAN 匯流排活動。 因此，CAN 匯流排監視器可用於驗證來自待測裝置的預期 CAN 流量或類比 CAN 流量以驗證測試裝置連接到 CAN 匯流排時的反應。

## 許可

博世公司擁有該技術的專利，生產相容 CAN 的微處理器的製造商需要向博世公司支付許可費，這些費用通常加在晶片價格中傳遞給客戶。 生產相容 CAN 的客製化特殊應用積體電路（ASICs）或現場可程式化邏輯閘陣列（FPGA）模組的製造商需要為 CAN 協定許可證支付費用。

## 參見

* Byteflight
* 車用音響
* CANopen - 嵌入式系統的通信協定
* CANpie – CAN 的開源裝置驅動
* CAN FD – 新的具有更快傳輸的 CAN
* Can4linux – CAN 的開源 Linux 裝置驅動程式
* FlexCAN – 另一種實現方法
* FlexRay – 另一種較高規格的車用網路
* 網路總線列表
* LIN 匯流排 – 另一種低成本的車用網路
* MOST
* OBD-II PID – 參數 ID 列表
* OSEK
* SAE J1939 - 卡車和公共汽車的通信協定
* SocketCAN – 大眾汽車研究院為 Linux 核心開發的一系列開源 CAN 驅動程式和網路堆疊。
* DBC 檔 (CAN)

## 參考文獻

## 外部連結

* Bosch 參數 （舊檔案 - 在某些方面略有含糊 / 不明確，被標準取代 [1] （頁面存檔備份，存於網際網路檔案館））
* 博世公司 CAN FD 參數 v1.0
* 控制器區域網路（CAN）可排程性分析：反駁，重訪和修訂
* 常用的 CAN 匯流排連接器引腳 （頁面存檔備份，存於網際網路檔案館）
* 獨立討論平台 CANLIST （頁面存檔備份，存於網際網路檔案館）
* 關於車用 CAN 安全性的網頁 （頁面存檔備份，存於網際網路檔案館）
* 具有 FIFO 佇列的控制器區域網路（CAN）可排程性分析
* 控制器區域網路（CAN）實施指南 （頁面存檔備份，存於網際網路檔案館）
* 教程：控制器區域網路（CAN）簡介和基礎知識 （頁面存檔備份，存於網際網路檔案館）
* Windows 系統位時序計算機免費軟體，支援許多單晶片。例如 Atmel, STM32, Microchip, Renesas （頁面存檔備份，存於網際網路檔案館） (壓縮檔案)
* 汽車 CAN 和 CAN-FD 保護 （頁面存檔備份，存於網際網路檔案館）
* 「CAN 簡介」免費電子學習模組
* ARINC-825 教程（影片） （頁面存檔備份，存於網際網路檔案館）來自 Excalibur Systems 公司。
* ISO - 國際標準化組織 （頁面存檔備份，存於網際網路檔案館）
* 了解和使用的控制器區域網路，來自加州大學伯克利分校
* Full fledged professional CAN course （頁面存檔備份，存於網際網路檔案館）