張樹貴
(中國電子科技集團(tuán)公司第三十三研究所,山西太原 030006)
CAN是Controller Area Network的縮寫,即“控制器局域網(wǎng)”,是ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議。在汽車產(chǎn)業(yè)中,出于對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統(tǒng)被開發(fā)出來,系統(tǒng)之間通信所用的數(shù)據(jù)類型及對可靠性的要求不盡相同,由多條總線構(gòu)成的情況很多,為了解決這些問題,產(chǎn)生了CAN總線協(xié)議。它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。
CAN通訊協(xié)議主要描述設(shè)備之間的信息傳遞方式。CAN層的定義與開放系統(tǒng)互連模型(OSI)一致。每一層與另一設(shè)備上相同的那一層通訊。實(shí)際的通訊發(fā)生在每一設(shè)備上相鄰的兩層,而設(shè)備只通過模型物理層的物理介質(zhì)互連。
CAN總線標(biāo)準(zhǔn)包括物理層和數(shù)據(jù)鏈路層,其中鏈路層定義了不同的數(shù)據(jù)類型,總線訪問的仲裁規(guī)則及故障檢測與故障處理的方式。當(dāng)CAN總線上的一個節(jié)點(diǎn)(站)發(fā)送數(shù)據(jù)時,它以報文形式廣播給網(wǎng)絡(luò)中的所有節(jié)點(diǎn)。
每組報文開頭的11位字符為表示符(CAN2.0A),定義了報文的優(yōu)先級,這種報文格式稱為面向內(nèi)容的編制方案。每一個節(jié)點(diǎn)要向其它節(jié)點(diǎn)發(fā)送數(shù)據(jù)時,該節(jié)點(diǎn)的CPU將要發(fā)送的數(shù)據(jù)和自己的標(biāo)識符傳送給本節(jié)點(diǎn)的CAN芯片,并處于準(zhǔn)備狀態(tài);當(dāng)它收到總線分配時,轉(zhuǎn)為發(fā)送報文狀態(tài)。CAN芯片將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報文格式發(fā)出,此時,網(wǎng)上的其它節(jié)點(diǎn)處于接收狀態(tài)。每個處于接收狀態(tài)的節(jié)點(diǎn)對接收到的報文進(jìn)行檢測,判斷這些報文是否是發(fā)給自己的,以確定接收否。
由于CAN總線是一種面向內(nèi)容的編址方案,因此很容易建立高水準(zhǔn)的控制系統(tǒng)并進(jìn)行靈活的配置??梢院苋菀椎卦贑AN總線中加進(jìn)一些新的節(jié)點(diǎn)而無需再硬件或軟件上進(jìn)行修改。
CAN總線是一種串行數(shù)據(jù)通信協(xié)議,其通信接口可完成對通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗(yàn)、優(yōu)先級判別等項(xiàng)工作。具有以下特點(diǎn):
(1)實(shí)時性強(qiáng)、傳輸距離較遠(yuǎn)、抗電磁干擾能力強(qiáng)、成本低等;
(2)數(shù)據(jù)傳輸距離遠(yuǎn)(可達(dá)10 kM);
(3)高速的數(shù)據(jù)傳輸速率(高達(dá)1 Mbps);
(4)采用雙線串行通信方式,檢錯能力強(qiáng),可在高噪聲干擾環(huán)境中工作;
(5)具有優(yōu)先權(quán)和仲裁功能,多個控制模塊通過CAN控制器掛到CAN-bus上,形成多主機(jī)局部網(wǎng)絡(luò);
(6)可根據(jù)報文的ID決定接收或屏蔽該報文;
(7)可靠的錯誤處理和檢錯機(jī)制;
(8)發(fā)送的信息遭到破壞后,可自動重發(fā);
(9)節(jié)點(diǎn)在錯誤嚴(yán)重的情況下具有自動退出總線的功能;
(10)脫離總線的節(jié)點(diǎn)不影響總線的正常工作;
(11)報文不包含源地址或目標(biāo)地址,僅用標(biāo)志符來指示功能信息、優(yōu)先級信息;
(12)可以點(diǎn)對點(diǎn)、一對多點(diǎn)(成組)及全局廣播幾種傳送方式接收數(shù)據(jù)。
CAN總線的拓?fù)浣Y(jié)構(gòu)如圖1所示,CAN hub是用于多分支擴(kuò)展用的,可以省去。CAN總線和分支的末端都需要垮接一個120歐姆的電阻來終結(jié),防止信號反射。
圖1 CAN總線拓?fù)浣Y(jié)構(gòu)
在總線中傳送的報文,每幀由7部分組成,幀起始(start of frame)、仲裁場(arbitration frame)、控制場(control frame)、數(shù)據(jù)場(date frame)、CRC 場(crc frame)、應(yīng)答場(ack frame)、幀結(jié)尾(end of frame)。CAN協(xié)議支持兩種報文格式,其中唯一的不同是標(biāo)識符(ID)長度不同,標(biāo)準(zhǔn)格式為11位,擴(kuò)展格式為29位。見圖2所示。
圖2 報文的幀格式
在標(biāo)準(zhǔn)格式中,報文的起始位稱為幀起始(SOF),然后是由11位標(biāo)識符和遠(yuǎn)程發(fā)送請求位(RTR)組成的仲裁場。RTR位標(biāo)明是數(shù)據(jù)幀還是請求幀,在請求幀中沒有數(shù)據(jù)字節(jié)??刂茍霭?biāo)識符擴(kuò)展位 (IDE),指出是標(biāo)準(zhǔn)格式還是擴(kuò)展格式。它還包括一個保留位(ro),為將來擴(kuò)展使用。它的最后4個字節(jié)用來指明數(shù)據(jù)場中數(shù)據(jù)的長度(DLC)。數(shù)據(jù)場范圍為0~8個字節(jié),其后有一個檢測數(shù)據(jù)錯誤的循環(huán)冗余檢查 (CRC)。應(yīng)答場(ACK)包括應(yīng)答位和應(yīng)答分隔符。發(fā)送站發(fā)送的這兩位均為隱性電平(邏輯1),這時正確接收報文的接收站發(fā)送主控電平(邏輯0)覆蓋它。用這種方法,發(fā)送站可以保證網(wǎng)絡(luò)中至少有一個站能正確接收到報文。報文的尾部由幀結(jié)束標(biāo)出。在相鄰的兩條報文間有一很短的間隔位,如果這時沒有站進(jìn)行總線存取,總線將處于空閑狀態(tài)。
CAN總線上每個設(shè)備都有一個11位的ID信息,各設(shè)備的優(yōu)先級是根據(jù)其ID來確定的,ID的序號越小,其優(yōu)先級越高。下圖為CAN總線上傳輸?shù)臉?biāo)準(zhǔn)數(shù)據(jù)幀格式和擴(kuò)展數(shù)據(jù)幀格式,標(biāo)準(zhǔn)幀11位,擴(kuò)展幀29位。見圖3、圖4所示。
圖3 標(biāo)準(zhǔn)數(shù)據(jù)幀格式
圖4 擴(kuò)展數(shù)據(jù)幀格式
要對數(shù)據(jù)進(jìn)行實(shí)時處理,就必須將數(shù)據(jù)快速傳送,這就要求數(shù)據(jù)的物理傳輸通路有較高的速度。在幾個站同時需要發(fā)送數(shù)據(jù)時,要求快速地進(jìn)行總線分配。實(shí)時處理通過網(wǎng)絡(luò)交換的緊急數(shù)據(jù)有較大的不同。CAN總線采用CSMA/CD(Carrier Sense Multiple Access with collision Detect,載波監(jiān)測多路訪問/沖突檢測)技術(shù)。“載波監(jiān)測”的意思是指在總線上的每個節(jié)點(diǎn)在發(fā)送信息報文前都必須監(jiān)測到總線上有一段時間的空閑狀態(tài)?!岸嗦吩L問”的意思是一旦此空閑狀態(tài)被監(jiān)測到,那么每個節(jié)點(diǎn)都有均等的機(jī)會來發(fā)送報文?!皼_突檢測”是指在兩個節(jié)點(diǎn)同時發(fā)送信息時,節(jié)點(diǎn)本身首先會檢測到出現(xiàn)沖突,然后采取相應(yīng)的措施來解決這一沖突情況。此時優(yōu)先級高的報文先發(fā)送,低優(yōu)先級的報文發(fā)送會暫停。這就是CAN總線的仲裁,仲裁過程是不會對報文產(chǎn)生破壞的。CAN總線的仲裁過程如圖5所示。
CAN控制器內(nèi)置出錯計(jì)數(shù)器,根據(jù)出錯是全局的還是本地的,計(jì)數(shù)器以此決定加1還是加8。通過查詢出錯計(jì)數(shù)器值,就可以知道通信網(wǎng)絡(luò)質(zhì)量。不同于其它總線,CAN協(xié)議不能使用應(yīng)答信息。它卻可以將發(fā)生的任何錯誤用信號發(fā)出。CAN總線有5種錯誤類型:位錯誤、填充錯誤、CRC錯誤、形式錯誤、應(yīng)答錯誤。
圖5 CAN總線仲裁過程
CAN總線用隱性和顯性表示0和1。當(dāng)在總線上出現(xiàn)同時發(fā)送顯性位和隱性位時,總線上數(shù)值將出現(xiàn)顯性??偩€上的信號使用差分電壓傳送,兩條信號線被稱為VCAN_H和VCAN_L。如圖6所示。
圖6 CAN總線的邏輯電平
CAN總線的數(shù)據(jù)通信有突出的可靠性、實(shí)時性和靈活性。由于具有良好的性能和獨(dú)特的設(shè)計(jì),CAN總線越來越受到人們的重視。由最早的應(yīng)用于汽車領(lǐng)域,現(xiàn)在已應(yīng)用于各種領(lǐng)域。它已經(jīng)成為一種重要的現(xiàn)場總線之一。
[1] 杜尚豐,曹曉鐘,徐建.CAN總線測控技術(shù)及其應(yīng)用[M].北京:電子工業(yè)出版社,2007.
[2] 饒運(yùn)濤,鄒繼軍,鄭勇蕓.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)(第二版)[M].北京:北京航空航天大學(xué)出版社,2007.
[3] 陽憲惠.現(xiàn)場總線技術(shù)及其應(yīng)用[M].北京:清華大學(xué)出版社,1999.
[4] 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1996.