1.0 介紹
CAN是控制器區(qū)域網絡(controller area network)的縮寫,由德國博世公司(BOSCH)于1986年開發(fā),是一種多主節(jié)點、消息廣播系統(tǒng),規(guī)定最大傳輸速率為每秒1兆比特。與USB或以太網等傳統(tǒng)網絡不同,CAN不會在總線中心主節(jié)點的監(jiān)督下,從節(jié)點A到節(jié)點B點對點地發(fā)送大塊數(shù)據(jù)。在CAN網絡中,許多短消息(如溫度或轉速)被廣播到整個網絡,這保證了系統(tǒng)中每個節(jié)點獲得數(shù)據(jù)的一致性。
當總線空閑時,連接到總線的單元可以發(fā)送消息,即系統(tǒng)為多主站類型。當多個單元同時開始發(fā)送消息時,它們的優(yōu)先級由位于數(shù)據(jù)幀中的消息標識符解析。一旦,一個特定的單元贏得了總線競爭,消息由該單元發(fā)送。其他優(yōu)先級低的單元可以在總線進入空閑狀態(tài)時發(fā)送它們的消息。
它是傳感器、執(zhí)行器和智能設備之間非常簡單、高度可靠和優(yōu)先級通信協(xié)議。基于載波感知多址沖突檢測(CSMA-CD)技術,將生產-消費技術應用于物理介質的訪問。
下面,我們介紹CAN的基礎知識,如消息格式、消息標識符和位仲裁,闡述CAN通信方案的一個主要優(yōu)點。
2.0 CAN 標準
CAN通信協(xié)議ISO-11898: 2003描述了信息如何在網絡上的設備之間傳遞,并符合開放系統(tǒng)互連(OSI)模型,不過其模型只有三層,即只取OSI底層的物理層、數(shù)據(jù)鏈路層和頂層的應用層。
其信號傳輸介質可以是雙絞線、同軸電纜或光導纖維。CAN可提供高達1Mbps的數(shù)據(jù)傳輸速率(此時通信距離最長為40m),直接傳輸距離最遠可達10km(速率5Kbps以下)。CAN總線通信接口集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗、優(yōu)先級判別等。CAN協(xié)議的一個最大特點是廢除了傳統(tǒng)的站地址編碼,而對通信數(shù)據(jù)塊進行編碼。采用這種方法可使網絡內的節(jié)點個數(shù)在理論上不受限制,但在實際應用中,節(jié)點數(shù)目受網絡硬件的電氣特性所限制。例如,當使用Philips PCA82C250作為CAN收發(fā)器時,同一網絡中允許掛接110個節(jié)點。數(shù)據(jù)塊的標識碼可由11位或29位二進制數(shù)組成,這種按數(shù)據(jù)塊編碼的方式,還可使不同的節(jié)點同時接收到相同的數(shù)據(jù),這一點在分布式控制系統(tǒng)中非常有用。
3.0 標準CAN 和擴展CAN
CAN通信協(xié)議是一種載波偵聽、多址接入、基于消息優(yōu)先級的沖突檢測和仲裁(CSMA/CD+AMP)協(xié)議。CSMA意味著總線上的每個節(jié)點在嘗試發(fā)送消息之前必須等待一段規(guī)定的不活動時間。CD+AMP意味著沖突通過按位仲裁解決,基于消息標識符字段中每個消息的預編程優(yōu)先級。優(yōu)先級較高的標識符總是獲得總線訪問權。也就是說,標識符中最后一個邏輯高位會繼續(xù)傳輸,因為它的優(yōu)先級最高。由于總線上的每個節(jié)點都參與“在被寫入時”寫入每個比特,因此仲裁節(jié)點知道它是否將邏輯高位位放置在總線上。
ISO-11898:2003標準使用了標準的11位標識符,規(guī)定了從125 kbps到1 Mbps的信號速率。該標準后來被修改為“擴展”的29位標識符。標準11位標識符字段可提供2048個不同的消息標識符,而擴展29位標識符可提供5.37億個標識符。
3.1 標準CAN
上圖位段的含義是:
- SOF(幀起始) — SOF(幀起始)由一個單獨的“顯性”位組成。只用當總線空閑時,才允許站開始發(fā)送。 所有的站必須同步于首先開始發(fā)送消息的站的幀起始前沿。
- Identifier(標識符) — 標準CAN 11位標識符確定消息的優(yōu)先級。二進制值越低,優(yōu)先級越高。
- RTR(遠程幀標志) — 當需要從另一個節(jié)點獲得信息時,這個遠程傳輸請求(RTR)位為顯性。所有節(jié)點都收到請求,但標識符決定指定的節(jié)點。響應數(shù)據(jù)也會被所有節(jié)點接收,并供任何感興趣的節(jié)點使用。這樣,系統(tǒng)中使用的所有數(shù)據(jù)都是統(tǒng)一的。
- IDE — 標識符擴展(IDE)位,顯性表示傳輸?shù)氖且粋€沒有擴展的標準CAN標識符。
- r0 — 預留位(為將來的標準修訂可能使用)。
- DLC — 4位數(shù)據(jù)長度碼(DLC)包含正在傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)。
- 數(shù)據(jù) — 最多可傳輸64位的應用程序數(shù)據(jù)。
- CRC — 16位(15位加分隔符)循環(huán)冗余校驗(CRC)包含校驗和(傳輸?shù)谋忍財?shù))的上述應用程序數(shù)據(jù)進行錯誤檢測。
- ACK — 當節(jié)點收到正確消息時,節(jié)點在原消息中把這個隱性位重寫為顯性,表示收到消息正確。如果接收節(jié)點檢測到錯誤并保留該位隱性,則丟棄消息,發(fā)送節(jié)點在重新仲裁后重復該消息。通過這種方式,每個節(jié)點都確認其數(shù)據(jù)的完整性。ACK是2位,一個是應答位,第二個是分隔符。
- EOF — 即幀尾(end-of-frame, EOF), 7個“隱性”位表示CAN幀(消息)的結束。
- IFS — 7位幀間隔空間。
3.2 擴展CAN
如上圖所示,擴展CAN消息與標準消息相同,只是增加了以下內容:
- SRR — 遠程請求(SRR)位取代標準消息位置中的RTR位。
- IDE — 標識符擴展(IDE)位,隱性表示后面有18位擴展標識符。
- r1 — 在RTR和r0位之后,DLC位之前增加的預留位。
4.0 CAN 消息
4.1 仲裁
如下圖所示,CAN總線具有兩種邏輯狀態(tài):顯性或隱形。在隱形狀態(tài)下,VCANH和VCANL被固定于平均電壓電平,電平差近似于零;顯性狀態(tài)以大于閾值的差分電壓表示。在顯性位期間,顯性狀態(tài)改變隱形狀態(tài)并發(fā)送。
總線訪問是事件驅動的,是隨機發(fā)生的。如果兩個節(jié)點試圖同時占用總線,則使用非破壞性的逐位仲裁實現(xiàn)訪問。非破壞性意味著贏得仲裁的節(jié)點只是繼續(xù)處理消息,消息不會被另一個節(jié)點破壞或損壞。
在標識符中為消息分配優(yōu)先級是CAN的一個特性,這使得它特別適合在實時控制環(huán)境中使用。二進制消息標識符編號越低,其優(yōu)先級越高。完全由0組成的標識符是網絡上優(yōu)先級最高的消息,因為它占用的總線支配時間最長。因此,如果兩個節(jié)點同時開始傳輸,一個節(jié)點發(fā)送最后一個標識符位為0(顯性),而其他節(jié)點發(fā)送標識符位為1(隱性),則該節(jié)點保留對CAN總線的控制權,繼續(xù)完成其消息。
下圖,顯示了由CAN控制器自動處理的CAN仲裁過程。由于每個節(jié)點都在持續(xù)監(jiān)控自己的傳輸,當節(jié)點B的隱性比特被節(jié)點C的高優(yōu)先級的顯性比特覆蓋時,節(jié)點B會檢測到總線狀態(tài)與它傳輸?shù)谋忍夭黄ヅ洹R虼耍?jié)點B停止傳輸,而節(jié)點C繼續(xù)傳輸它的消息。節(jié)點C釋放總線后,節(jié)點B會再次嘗試傳輸消息。這個功能是ISO 11898物理信號層的一部分,它完全包含在CAN控制器中,對CAN用戶完全透明。
消息優(yōu)先級的分配取決于系統(tǒng)設計人員,但行業(yè)團體對某些消息的重要性達成一致。例如,電機驅動的制造商可以指定消息0010是來自CAN網絡上的電機的繞組電流反饋信號,0011是轉速表速度。因為0010具有最低的二進制標識符,在總線上,與當前值相關的消息總是比與轉速計讀數(shù)相關的消息具有更高的優(yōu)先級。
在DeviceNet的情況下,來自許多制造商的設備(如接近開關和溫度傳感器)可以合并到同一系統(tǒng)中。由于DeviceNet傳感器生成的消息已經由開放DeviceNet 供應商協(xié)會 (ODVA)預定義,因此無論實際制造商是誰,某種消息總是與特定類型的傳感器相關,如溫度。
4.2 消息類型
可以在CAN總線上傳輸?shù)乃姆N不同的消息類型或幀是,數(shù)據(jù)幀、遠程幀、錯誤幀和過載幀。
4.2.1 數(shù)據(jù)幀
數(shù)據(jù)幀是最常見的消息類型,由仲裁字段、數(shù)據(jù)字段、CRC字段和確認字段組成。仲裁字段包含一個11位的標識符和RTR位,后者在數(shù)據(jù)幀中占主導地位。擴展CAN包含29位的標識符和RTR位。接下來是數(shù)據(jù)字段,它包含0到8字節(jié)的數(shù)據(jù),以及CRC字段,它包含用于錯誤檢測的16位校驗和。最后是確認段。
4.2.2 遠程幀
遠程幀的預期目的是從另一個節(jié)點請求數(shù)據(jù)傳輸。遠程幀與數(shù)據(jù)幀類似,有兩個重要區(qū)別。首先,這種類型的消息被仲裁字段中的隱性RTR位標記為遠程幀,其次,沒有數(shù)據(jù)。
4.2.3 錯誤幀
錯誤幀是違反CAN消息格式規(guī)則的特殊消息。當一個節(jié)點檢測到消息中的錯誤時,它將被傳輸,并導致網絡中的所有其他節(jié)點也發(fā)送一個錯誤幀。然后,原來的發(fā)送器自動重新傳輸消息。在CAN控制器中,一個復雜的錯誤計數(shù)器系統(tǒng)可以確保節(jié)點不會因重復傳輸錯誤幀而阻塞總線。
4.2.4 過載幀
為了完整起見,這里提到了過載幀。在格式方面,它與錯誤幀類似,并且它是由一個過于繁忙的節(jié)點傳輸?shù)摹K饕糜谔峁┫⒅g的額外延遲。
4.3 有效幀
當接收到消息的結束EOF段的最后一位隱性,則認為該消息是無錯誤的。EOF段中的有顯性位,則發(fā)送節(jié)點重復一次傳輸。
4.4 錯誤檢查和故障限制
CAN的健壯性部分歸功于它豐富的錯誤檢查程序。CAN協(xié)議包含五種錯誤檢查方法:三種在消息級,兩種在位級。如果消息未能通過這些錯誤檢測方法中的任何一種,則不接受該消息,并從接收節(jié)點生成錯誤幀。這迫使發(fā)送節(jié)點重新發(fā)送消息,直到正確接收到它。但是,如果一個故障節(jié)點通過不斷重復錯誤而使總線掛起,它的傳輸能力將在達到錯誤限制后被控制器刪除。
消息級別的錯誤檢查由CRC和ACK槽執(zhí)行。16位的CRC包含了用于錯誤檢測的上述應用程序數(shù)據(jù)的校驗和,其中有15位的校驗和和1位的定界符。ACK段有兩個比特位,由確認位和確認分隔符位組成。
同樣在消息級別還有形式檢查。此檢查在消息中查找必須總是隱性位的段。如果檢測到顯性位,則產生錯誤。檢查的位是SOF、EOF、ACK分隔符和CRC分隔符位。
在位級,傳輸?shù)拿總€位都由消息的發(fā)送方監(jiān)視。如果一個數(shù)據(jù)位(不是仲裁位)被寫入總線,而監(jiān)測到它的反相位,則會產生一個錯誤。唯一的例外是用于仲裁的消息標識符段,以及需要由顯性位覆蓋隱性位的確認槽。
錯誤檢測的最后一種方法是位填充規(guī)則,即在相同邏輯層的六個連續(xù)比特相同,則產生錯誤。
5.0 CAN 總線
CAN總線的數(shù)據(jù)鏈路和物理信號層,通常對系統(tǒng)操作者是透明的,包含在任何實現(xiàn)CAN協(xié)議的控制器中。然后通過CAN總線收發(fā)器實現(xiàn)與物理介質的連接,形成如下圖所示的系統(tǒng)節(jié)點。
總線的兩條信號線CANH和CANL在靜態(tài)隱性狀態(tài)下被動偏置到?2.5 V。總線上的顯性狀態(tài)在CANH和CANL之間形成典型的2v差分信號。
信號是差分的,可以得到其健壯的抗噪性和容錯性。平衡差分信號降低了噪聲耦合,并允許雙絞線上的高信號速率。平衡是指流過每條信號線的電流相等但方向相反,從而產生場抵消效應,這是低噪聲釋放的關鍵。采用平衡差動接收機和雙絞線布線提高了CAN總線的共模抑制能力和抗噪能力。
評論
查看更多