控制器區域網路

控制器區域網 (Controller Area Network，簡稱CAN或者CAN bus) 是一種功能豐富的標準。被設計用於在不需要主機的情況下，允許網路上的微控制器和儀器相互通訊。 它基於訊息傳遞協議，設計之初在車輛上採用複用通訊線纜，以降低銅線使用量，後來也被其他行業所使用。CAN建立在基於資訊導向傳輸協定的廣播機制的方式。因此，CAN擁有了良好的彈性調整能力，可以在現有網路中增加節點而不用在軟、硬體上做出調整。除此之外，訊息的傳遞不基於特殊種類的節點，增加了升級網路的便利性。歷史.羅伯特·博世公司於1983年開發了控制器區域網會議上正式發表。第一個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年，國際標準化組織公佈了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個電子控制器。最常見的控制器為發動機控制器。除此以外，變速器、安全氣囊、防鎖死煞車系統/ABS、定速巡航、動力方向盤、音響系統、、車門、後視鏡調整、電池和混合動力電動汽車的充電系統等等均使用電子控制器。這其中，有的是獨立的子系統，有些需要跟其他子系統進行通訊，控制驅動器或接收感測器的反饋資訊。為此設計了控制器區域網絡，將汽車的不同系統相互連線在一起。傳統的“電纜直連”成本高，佈線複雜，而控制器區域網絡僅需軟體就可實現，不僅安全、經濟還十分便利。近些年又開發出了LIN標準，用在非關鍵系統中的應用，例如空調和資訊娛樂系統等資料傳輸速度和可靠性不是很重要的系統中。架構.CAN是一個用於連線電子控制單元的序列匯流排標準。電子控制單元有時也被稱作節點。CAN網路上需要至少兩個節點才可進行通訊。節點的複雜程度可以只是簡單的輸入輸出裝置，也可以是包含有CAN互動器並搭載了軟體的嵌入式元件。節點還可能是一個閘道器，允許普通計算機透過USB或乙太網埠與CAN網路上的裝置通訊。所有節點透過兩根平行的匯流排連線在一起。兩條電線組成一條雙絞線，並且接有120Ω的特性阻抗。ISO 11898-2，也稱為高速度CAN。它在匯流排的兩端均接有120Ω電阻。高速CAN匯流排在傳輸顯性的共模電壓需要在+/-12V。ISO 11898-3，也被稱作低速或者容錯CAN。它使用線性主線，星形主線或者連線到一個線性主線上的多星結構主線著稱。每個節點都有終端電阻作為全域性終端電阻的一部分。全域性終端電阻不應低於100 Ω。低速/容錯CAN訊號在傳輸顯性訊號。兩根線需要能夠承受-27V至40V的電壓而不被損壞。在高速和低速CAN中,從隱性訊號向顯性訊號過渡的速度更快，因為此時CAN線纜被主動積極地驅動。顯性向隱性的過渡速度主要取決於CAN網路的長度和導線的電容。高速CAN通常被用於汽車和工業應用，在這些應用環境中，匯流排通常從一端橫跨至另一端。容錯CAN匯流排則經常被用在需要連線在一起的一組節點。ISO規格只要求匯流排共模電壓必須保持在最小和最大範圍內，但不定義如何將匯流排電壓保持在這個範圍。CAN匯流排必須使用終端電阻。終端電阻可以用來抑制，同時可以使匯流排電壓回到隱性狀態或者閒置狀態。高速CAN在匯流排兩端使用120Ω電阻。低速CAN在每個節點均使用電阻。也有其他型別的終端，例如中定義了終端偏壓電路。終端偏壓電路使用由4條導線組成的線纜，除了CAN訊號線以外還有電源線和地線。這在每段匯流排兩端提供自動偏壓和終端功能。ISO11783網路是專為熱拔插匯流排段和電子控制單元設計的。每個節點需要:每個節點能夠傳送和接收資訊，但不是同時進行的。 一個訊息或幀主要包括識別符號(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。如果這兩個節點同時傳輸，每個都會優先傳輸它們識別符號中的前6個0而不觸發仲裁。當ID中的第7位傳輸時，節點16為其ID傳送1(隱性)，而節點15為其ID傳送0。當這種情況發生時，該節點16知道自己傳送了1，但在總線上看到了0，意識到有衝突發生並且自己失去仲裁。節點16停止傳送而節點15繼續傳輸自己的ID，沒有丟失任何資料。擁有最低ID的節點總是贏得仲裁，因此具有最高優先順序。長度小於40m的網路最高支援的位元率高達1百萬位元/秒。降低位元率可以允許使用更長的網路距離。改進的CAN FD標準允許仲裁後升高位元率，可以將資料區段速度增加至仲裁位速率的八倍。ID分配.資訊ID在單條CAN總線上必須是唯一的，否則兩個節點將在仲裁位(ID)傳送結束後繼續傳輸，造成錯誤。1990年代早期，為資訊選擇標誌符的準則僅僅基於資料的種類和發信節點。但是，當標誌符同樣代表著資訊的優先順序時，這會帶來不好的實時響應。在這種情況下，通常要求CAN匯流排只能使用大概30%才能保證資訊可以在截止時間之前到達。然而，如果資訊的標誌符根據資訊的優先順序決定，更低標誌符的資訊獲得更高優先順序，那麼在不損失資料的前提下，匯流排的使用率可以達到70%到80%。位時序.CAN網路上的所有節點必須執行在相同的標稱位元率下，但噪音、相移、振盪頻率容差和振盪頻率漂移導致實際的位元率可能與標稱位元率不同。由於沒有使用一個單獨的時鐘訊號，需要一個同步節點方法。同步在仲裁機制中十分重要，因為仲裁中的節點需要能夠同時看到它們傳輸資料的資料和其他節點的傳輸資料。 同步在確保節點間震盪時間不同時不發生錯誤上十分重要。匯流排閒置一段時間後，在第一個隱性訊號向顯性訊號轉換時 進行硬同步。再次同步發生在傳輸幀期間的每次從隱性向顯性轉換時。CAN控制器期望在標稱位時間內發生多次轉換。如果並沒有在期望的確定時間發生，控制器將根據這調整標稱位時間。調整是透過將每一位劃分成多個稱為量子的時間段,並分配一定數量的量子到位中的四個階段完成的。這四個階段分別為：同步、傳播、相位段1和相位段2。位被分成的量子數量會因控制器的不同而不同，每一個階段分配的量子數會因位元率和網路狀況的不同而改變。在預期時刻之前或之後發生的過渡會促使控制器計算時間差，並根據計算所得的時間差延長相位段1或者縮短相位段2。這有效地改變接收器到發信器的時序，將它們同步在一起。這個重新同步過程不斷地在每次隱性向顯性過渡時進行已確保發信器和接收器保持同步。不斷地重新同步降低了噪聲產生的錯誤，讓同步至已經失去仲裁的節點的接收節點重新同步到贏得仲裁的節點。層級.CAN協議與很多網路協議相似，可以被分解為下列抽象層：大多數CAN標準應用在傳輸層。傳輸層從物理層接收訊息並將這些資訊傳遞給物件層。傳輸層負責特定時序、同步、資訊位構架、仲裁、確認、錯誤檢測及發信和故障約束。它的職責為：CAN匯流排通常會有定製的介面和各種線纜組成CAN匯流排。儘管如此，領域中已經出現若干機械方面的標準，最常見的是使用9個引腳的D-sub型插頭，擁有以下引腳分佈：這個CAN的機械標準可以用於D-sub介面的插頭和插座。匯流排電流從插座流向插頭。這遵循了電源在插座處截止的電氣工程慣例。採用本標準避免了為將節點連線到同一個D介面而製作定製分離器。非標準(自定義)線束(分離器)，線上纜上分離CAN分支，減少匯流排的可靠性、消除電纜可交換性、減少線束的相容性並且增加成本。完整的物理層規範的缺失即將投入市場。ISO11898-2:2003中的噪聲免疫是透過在匯流排兩端使用低電阻值維持匯流排兩條線間的差分阻抗實現的。然而，當處於休眠狀態時，例如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總線上進行多路通訊只需要系統的電邏輯支援兩個狀態，在概念上與“由線纜構成的與門(wired AND)”網路相似。幀.CAN網路可以配置為使用兩種不同的訊息作為資訊傳輸的起始。CAN有4種幀型別：資料幀.資料幀是唯一用於實際資料傳輸的幀。它有兩種資訊結構：CAN標準要求必須接受基本幀格式並可能接受擴充套件幀格式，但必須能承受擴充套件幀格式。基本幀格式.幀格式如下：位值是用於描述CAN-LO訊號的。拓展幀格式.幀的格式如下表所示：兩個定位符區域A和B共同組成29位定位符。遠端幀.也就是說：RTR = 0；資料幀中為顯性RTR = 1；遠端幀中位隱性在資料幀和具有相同識別符號的遠端幀同時傳送的情況下，由於資料幀識別符號之後的RTR位是顯性，它將贏得仲裁。錯誤幀.錯誤幀由兩個不同的欄位組成：錯誤標誌也有兩種：CAN有兩種錯誤計數器：1.傳輸錯誤計數器2.接受錯誤計數器過載幀.過載幀包含兩個位欄位：過載標誌。有兩種過載條件可導致過載標誌的傳輸：由於情況1引起的過載幀只允許在預期中斷的第一位時間開始，而由情況2引起的過載幀在檢測到顯性位後一位開始。過載標誌由六個顯性位組成，其整體形式與主動錯誤標誌的形式相對應。過載標誌的形式破壞了中斷區的固定形式。因此，所有其他站點也會檢測到過載情況，並在它們自己的部分開始傳輸過載標誌。過載定界符由8個隱性位組成，與錯誤分隔符的形式相同。偵錯機制.CAN提供了五種除錯機制，使其錯誤發生率低於4.7×10-11。當一個以上的上述錯誤發生時，傳送中的傳輸將會失敗中止並且產生錯誤資料包，發訊端則會試著重新發送訊息資料包。各個節點將會重新爭取優先權。CAN的五種偵測錯誤機制確認槽.確認插槽用於確認收到的CAN幀有效。接收到幀而沒有發現錯誤的每個節點在ACK槽中傳送顯性水平，來覆蓋發射機的隱性水平。如果發射機在ACK時隙中只檢測到隱性電平，它就知道沒有任何接收器獲得有效的幀。接收節點可以傳送隱性訊號來指示它沒有接收到有效幀，但是確實接收到有效幀的其它節點可以用顯性訊號覆蓋它。傳送節點無法知道CAN網路上的是否所有節點都收到了該訊息。幀間內容.資料幀和遠端幀透過稱為幀間空間的區域與前面的幀分開。幀間空間由至少三個連續的隱性位組成。之後，如果檢測到一個顯性位，它將被視為下一幀的“起始位”。 過載幀和錯誤幀不比幀間空間重要，並且多個過載幀也不由幀間空間分隔。幀間空間包含了欄位中斷和匯流排空閒，並且如果前一訊息的傳送器是被動錯誤站點，會將匯流排暫掛。位填充.傳輸器會在相同極性的五個連續位之後插入一個相反的極性的位，以確保足夠的轉換來保持同步。這種做法被稱為位填充，並且對於CAN這樣的不歸零編碼是必要的。填充的資料幀由接收器去掉填充。除了CRC定界符，ACK欄位和結束位這樣固定字長的區域之外，幀中其他所有欄位都會被填充，這些欄位是固定大小且未被填充。在使用位填充的欄位中，具有相同極性的六個連續位被視為錯誤。 當檢測到錯誤時，節點可以傳送主動錯誤標誌。主動錯誤標誌由六個連續的顯性位組成，違反了位填充規則。位填充意味著資料幀可能比上述表中列舉的預期的要長。CAN幀的最大尺寸的情況是11111000011110000...被填充為：111110000011111000001...填充位本身可能成為五個連續相同位中的第一個，所以在最壞的情況下，每四個原始位有一個填充位。長度由下面公式給出：formula_1其中formula_2是填充前幀的長度，在最壞情況下，原資料除了第一個4位後，在每個4位後增加一位，同時由於位的結構，固有的47位中只有34位能夠被填充。CAN低層標準.ISO 11898系列規定了用於道路車輛的CAN序列通訊技術的物理層和資料鏈路層，支援分散式實時控制和多路複用。有如下幾個CAN物理層及其他層的標準：ISO 11898-1:2015規定了控制器區域網次層的詳細引數。ISO 11898-2:2003規定了高速，共同組成了控制區域網的物理層。ISO 11898-2使用雙線平衡傳輸線信令體系，是車用動力總成應用和工業控制網路中最常用的物理層。ISO 11898-3:2006規定了在道路車輛電子控制單元之間建立的低速、容錯、依賴介質的介面的數字資訊交換設定，其傳輸速率在40kBit/s至125kBit/s之間。ISO 11898-4:2004規定了在CAN中的時間觸發通訊之間建立時間觸發的數字資訊交換，並且根據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標準不包括例如資料流量控制、裝置定址、傳輸多條訊息的資料塊和應用資料等應用層協議的工作，許多高層協議被指定出來。 儘管這些協議都能被製造商擴充套件，但其中只有幾個為商用領域標準化。對於乘用車，每個製造商都有自己的標準。 其中包括：CANopen電梯.CANopen特別興趣組織。SIG的主席是Jörg Hellmich，它同時是CANopen電梯社群維基的管理員。安全性.CAN是低階協議，不支援任何內在的安全功能。在標準的CAN中也沒有加密，這使得這些網路資料能被擷取。在大多數應用中，應用程式需要部署自己的安全機制，例如認證傳入命令或網路上某些裝置的存在。若不執行適當的安全措施，其他人可能設法在總線上插入訊息。 儘管一些安全關鍵功能存在密碼，但這些系統並未普遍實施，並且金鑰對的數量有限。開發工具.在開發CAN匯流排或排除故障時，檢查硬體訊號非常重要。可以使用邏輯分析儀和匯流排分析儀來收集、分析、解碼並儲存高速波形訊號。此外，還有CAN匯流排監視器及其它特殊工具。CAN匯流排監視器是一個分析工具，通常是硬體和軟體的組合，用於開發使用在CAN總線上的硬體。通常，CAN匯流排監視器將監聽CAN總線上的通訊量，以便將其顯示在自身的使用者介面中。它通常也能將CAN幀傳送到匯流排來模擬CAN匯流排活動。 因此，CAN匯流排監視器可用於驗證來自待測裝置的預期CAN流量或模擬CAN流量以驗證測試裝置連線到CAN匯流排時的反應。許可.博世公司擁有該技術的專利，生產相容CAN的微處理器的製造商需要向博世公司支付許可費，這些費用通常加在芯片價格中傳遞給客戶。 生產相容CAN的定製特殊應用積體電路模組的製造商需要為CAN協議許可證支付費用。