CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議,。在汽車產(chǎn)業(yè)中,,出于對安全性、舒適性,、方便性,、低公害、低成本的要求,,各種各樣的電子控制系統(tǒng)被開發(fā)了出來,。由于這些系統(tǒng)之間通信所用的數(shù)據(jù)類型及對可靠性的要求不盡相同,由多條總線構(gòu)成的情況很多,,線束的數(shù)量也隨之增加,。為適應(yīng)“減少線束的數(shù)量”、“通過多個LAN,,進(jìn)行大量數(shù)據(jù)的高速通信”的需要,,1986 年德國電氣商博世公司開發(fā)出面向汽車的CAN 通信協(xié)議。此后,,CAN 通過ISO11898 及ISO11519 進(jìn)行了標(biāo)準(zhǔn)化,,在歐洲已是汽車網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議。
CAN總線使用總結(jié)
一,,can總線是由德國BOSCH公司提出,,目的是為了解決汽車內(nèi)部硬件信號線的復(fù)雜走線
二,CAN:controller area area:控制器局域網(wǎng)絡(luò)
三,,can總線的特點:
與一般的通信總線相比,,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實時性和靈活性,。
?。保珻AN為多主方式工作,,網(wǎng)絡(luò)上任一節(jié)均可在任意時刻主動向網(wǎng)絡(luò)上其他節(jié)點發(fā)送信息,,不分主從
2,CAN節(jié)節(jié)點只需通過對報文的標(biāo)志符進(jìn)行濾波就可以方便的實現(xiàn)點對點,,點對多點及全局廣播等
幾種傳送接收方式,;
3,,CAN總線采用非破壞總線仲裁技術(shù),。當(dāng)發(fā)生沖突時,優(yōu)先級低的節(jié)點自動退出發(fā)送,,而優(yōu)先級高
的節(jié)點可不受影響地繼續(xù)傳輸數(shù)據(jù),,從而大大節(jié)省了總線沖突仲裁時間。尤其是在負(fù)載很重的情況下,,也不
會出現(xiàn)癱瘓情況(以太網(wǎng)則可能),。
4,,在報文標(biāo)識符上,,CAN上的節(jié)點分成不同的優(yōu)先級,可滿足不同的實時要求,,優(yōu)先級高的數(shù)據(jù)
最多可在134us內(nèi)得到傳輸,;
5,,CAN的直接通信距離最遠(yuǎn)可達(dá)10KM(速率在5kbps以下),,通信速率最高可達(dá)1Mbps,
?。ù藭r通信距離最長為40m),;
6,,CAN上的節(jié)點數(shù)主要取決于總線驅(qū)動電路,,目前可達(dá)110個;
?。罚瑘笪牟捎枚處Y(jié)構(gòu),,傳輸時間短,,受干擾概率低,保證了數(shù)據(jù)出錯率極低,;
?。福茫粒蔚拿繋畔⒍荚冢茫遥眯r灱捌渌麢z錯措施,,具有極好的檢錯效果,;
9,CAN的通信介質(zhì)為雙絞線,、同軸電纜或光纖,,選擇靈活;
?。保?,CAN節(jié)點在錯誤嚴(yán)重的情況下具有自動關(guān)閉輸出功能,以使總線上其他節(jié)點的操作不受影響,;
?。保保茫粒慰偩€具有較高的性價比,。
四,,can總線的系統(tǒng)構(gòu)成及數(shù)據(jù)傳輸原理
(一),,系統(tǒng)構(gòu)成
1,,CAN控制器:接收來自微控制器的數(shù)據(jù),并處理發(fā)送給收發(fā)器,,同時,,也接收來自收發(fā)器的數(shù)據(jù),處理傳給微控制器,。
2,,CAN收發(fā)器:總線驅(qū)動
四,can總線的的通信協(xié)議
?。ㄒ唬?,網(wǎng)絡(luò)層次結(jié)構(gòu)
可分為三個層:目標(biāo)層,傳送層,,物理層,,如下圖所示
物理層:規(guī)定了信號的傳輸過程中的電氣特性(如傳輸方式及傳輸介質(zhì))及信號特性;
傳送層:幀組織,,總線仲裁,,錯誤檢測等;
目標(biāo)層:信息識別,,為應(yīng)用層提供接口,;
其上述分層按iso/osi也可以分為兩層:物理層,數(shù)據(jù)鏈路層(即目標(biāo)層和傳送層),。
?。ǘ槐磉_(dá)
CAN協(xié)議中有兩種邏輯位表達(dá)方式
1. 當(dāng)總線線上發(fā)送的都是弱位時,,總線的狀態(tài)就是弱位(邏輯1),;
2.當(dāng)總線上有強(qiáng)位出現(xiàn)時,,弱位信號讓位于強(qiáng)位信號,即總線上顯示強(qiáng)位信號(邏輯0),;
?。ㄈ瑤愋?br/> 1. 數(shù)據(jù)幀:傳送數(shù)據(jù),,攜帶數(shù)據(jù)從一個節(jié)點到另一個節(jié)點或多個節(jié)點,,結(jié)構(gòu)如下圖(標(biāo)準(zhǔn)格式)所示。
數(shù)據(jù)幀由7種不同的位域組成:起始域,,仲裁域,,控制域,數(shù)據(jù)據(jù)域,,CRC域,,應(yīng)答域,幀結(jié)束域,。
起始域:表示數(shù)據(jù)幀或遠(yuǎn)程幀的開始,,它由一個強(qiáng)位組成,主要用于接收狀態(tài)下的CAN控制器的硬同
步,。
仲裁域:由信息標(biāo)志符及RTR位組成,,當(dāng)多個CAN控制器同時發(fā)送數(shù)據(jù)時,在仲裁域要進(jìn)行面向位的
沖突仲裁,。對于標(biāo)準(zhǔn)格式里,,標(biāo)志符由11位組成,用于提供信息地址和優(yōu)先級,,其發(fā)送的順序為ID28~ID18
?。ㄗⅲ焊?位不允許均為弱的現(xiàn)象);對于擴(kuò)展格式,,仲裁域由11位的基本ID(ID28~ID18)和18位
的擴(kuò)展ID(ID17~ID0)組成,,格式與標(biāo)準(zhǔn)格式略有不同,詳見書P25,。RTR為:遠(yuǎn)地請求發(fā)
送位,,數(shù)據(jù)幀里為顯性,遠(yuǎn)程幀里為隱性,。當(dāng)can總線上接收節(jié)點想請求某節(jié)點發(fā)送數(shù)據(jù)時,,就向網(wǎng)絡(luò)上發(fā)
送一遠(yuǎn)程幀,用標(biāo)志符指出節(jié)點地址,,同時置RTR位為高。如果尋址節(jié)點立即發(fā)送數(shù)據(jù),,則使用相同的標(biāo)
志符,,總線不會產(chǎn)生沖突,,因為此時數(shù)據(jù)幀的RTR位為低(數(shù)據(jù)強(qiáng)位)。在擴(kuò)展幀里SRR位取代了RTR
位,。
控制域:由6個位組成,,包括2個保留位(IDE,ro)用于CAN協(xié)議擴(kuò)展,,4位數(shù)據(jù)長度碼,,允許數(shù)據(jù)的
長度值為0~8。
數(shù)據(jù)域:發(fā)送緩沖區(qū)按照長度碼指示的數(shù)據(jù)長度進(jìn)行發(fā)送,,接收的數(shù)據(jù)同樣如此,,第一個字節(jié)的最高有
效位第一個被發(fā)送/接收。
循環(huán)冗余校驗域(CRC):由CRC序列位(15位)和一個CRC邊界符(1個弱位)組成,。CRC的范圍
包括起始域,、仲裁域、控制域,、數(shù)據(jù)域,、CRC序列。之所以選用這種幀校驗方式,,因為:這種CRC碼對于
少于127位的幀最佳,。
應(yīng)答域:應(yīng)答域由發(fā)送方發(fā)送的兩位弱位組成(應(yīng)答空隙和應(yīng)答分界位),當(dāng)接收器正確地接收到有
效的報文時,,接收器就會在應(yīng)答間隙期間(發(fā)送ACK信號)向發(fā)送器發(fā)送一顯性位以示應(yīng)答,。因此發(fā)送節(jié)
點一直監(jiān)測總線信號以確認(rèn)網(wǎng)絡(luò)中至少有一個節(jié)點正確接收到發(fā)信息。應(yīng)答分界位是應(yīng)答域中的第二個弱
位,,有此可見,,應(yīng)答空隙兩邊有兩個弱位:CRC分界位和應(yīng)答分界位。
幀結(jié)束域:每一個數(shù)據(jù)幀或遠(yuǎn)程幀一串7位的弱位幀結(jié)束域結(jié)束,。
2. 遠(yuǎn)程幀:請求數(shù)據(jù)
遠(yuǎn)程幀由6個域組成:起始域,、仲裁域、控制域,、CRC域,、應(yīng)答域、幀結(jié)束域,。
遠(yuǎn)程幀與數(shù)據(jù)幀不同之處在于:RTR位為高,,無數(shù)據(jù)域。
3. 錯誤指示幀:用于指示傳送過程中的錯誤信息
錯誤指示幀由兩個不同的域組成:第一個域反映來自控制器的錯誤標(biāo)志,,第二個域為錯誤分界符,。
錯誤標(biāo)志:有兩種,一個由6個強(qiáng)位組成的主動錯誤標(biāo)志,;另一個由6個弱位組成的被動錯誤標(biāo)志,,
它是被其他CAN控制器強(qiáng)位改寫,。 處于主動錯誤狀態(tài)的CAN節(jié)點檢測到錯誤發(fā)出主動錯誤標(biāo)志,該錯誤標(biāo)
志不滿足位填充規(guī)則,,或者是破壞應(yīng)答域或結(jié)束域固定格式,,所有其他節(jié)點都檢測到錯誤狀態(tài),并發(fā)出該錯
誤標(biāo)志,。因此,,這些從總線上監(jiān)測到的強(qiáng)位串是不同節(jié)點發(fā)出錯誤標(biāo)志的結(jié)果,這一標(biāo)志最短為6個,,最長
為12個,。被動錯誤標(biāo)志(不太理解。,。,。后續(xù))
錯誤分界:它由8個弱位組成,與過載分界有相同的格式,,當(dāng)錯誤標(biāo)志發(fā)生后,,每一個CAN節(jié)點監(jiān)測
總線,直到檢測到一個強(qiáng)位出現(xiàn),,這表明所有CAN節(jié)點已經(jīng)完成錯誤標(biāo)志的發(fā)送,,并開始發(fā)送8個弱位的分
界符,之后網(wǎng)絡(luò)上的主動錯誤節(jié)點便可同時開始其他的發(fā)送,。如果數(shù)據(jù)幀或遠(yuǎn)程幀在發(fā)送過程中發(fā)現(xiàn)錯誤
后,,當(dāng)前的信息作廢,并啟動重新發(fā)送,。如果CAN節(jié)點發(fā)現(xiàn)錯誤指示幀錯誤,,則重發(fā),當(dāng)連續(xù)多次出現(xiàn)此錯
誤時,,則相應(yīng)的節(jié)點變?yōu)楸粍渝e誤節(jié)點,。為正確結(jié)束錯誤標(biāo)志,被動態(tài)節(jié)點需要至少3個位周期,。
4. 過載幀:用于后續(xù)幀的延時
過載幀由兩個域組成:過載標(biāo)志和過載分界,。
以下情況可以導(dǎo)致過載幀發(fā)送:
(1). 接收未準(zhǔn)備好即接收方需要過多的時間處理當(dāng)前的數(shù)據(jù),;
?。?).在幀間空隙的第一位或第二位發(fā)現(xiàn)顯性位信號;
過載幀發(fā)送條件:
?。?).在幀間空隙域的第一個位周期,;
(2).在幀間空隙域中檢測到強(qiáng)位信號一個位周期后,,方可啟動過載幀發(fā)送,。
過載標(biāo)志:由6個顯性位組成,,與錯誤標(biāo)志格式相同,當(dāng)超載標(biāo)志發(fā)生后,,每個節(jié)點監(jiān)測總線狀態(tài),當(dāng)發(fā)
現(xiàn)線上有弱位后,,此時所有節(jié)點已完成超載標(biāo)志的發(fā)送,,并開始發(fā)8個弱位串;
過載分界符:由8個隱性位組成,,與錯誤分界符格式相同,;
-----------------------------------------------------------------------------------------------------------------------------------
英飛凌(infineon)單片機(jī)XC800之CAN總線
CAN內(nèi)部硬件結(jié)構(gòu),如下圖所示
一,,CAN處理機(jī)制
發(fā)送:根據(jù)報文緩存中的報文對象,,由位流處理器產(chǎn)生的通過can總線發(fā)送的數(shù)據(jù)幀和過程幀,即從報
文緩存中取出的報文對象,,位流處理器給它加上起始域,,結(jié)束域和CRC校驗數(shù)據(jù),組成一個完整的數(shù)據(jù)幀
和遠(yuǎn)程幀,,此時位流控制器還在對總線進(jìn)行監(jiān)測,,當(dāng)發(fā)現(xiàn)總線空閑時,就啟動數(shù)據(jù)的傳送,,傳送過程中監(jiān)測
總線的信息,,當(dāng)發(fā)現(xiàn)與傳送的信息不相符時,就會產(chǎn)生一個“最近錯誤”中斷請求,。
接收:數(shù)據(jù)幀或遠(yuǎn)程幀通過總結(jié)接口,,到CAN節(jié)點,位流控制器對其進(jìn)行CRC域進(jìn)行檢測,,驗證數(shù)據(jù)的
一致性,,當(dāng)檢測到錯誤時,產(chǎn)生一個“最近錯誤”中斷請求,,并產(chǎn)生一個錯誤幀,,發(fā)送到總線上。對一個無
錯誤的幀,,位流處理器將它分解成數(shù)據(jù)部分和標(biāo)識符部分,,列表控制器將其以鏈表的形式存儲于報文緩存
中,執(zhí)行遠(yuǎn)程幀或數(shù)據(jù)幀處理,。
在上述數(shù)據(jù)傳送和處理過程中,,會出現(xiàn)一些狀態(tài)字,指示操作完成或出現(xiàn)錯誤,,這些狀態(tài)字或引發(fā)中
斷,,進(jìn)行中斷處理,。
二,從上述結(jié)構(gòu)框圖可以看出,,主要包括:CAN節(jié)點,,報文控制器,中斷處理單元
?。ㄒ唬?,CAN節(jié)點
(1),,位流控制器(Bitstream Prosessor)
主要任務(wù):處理數(shù)據(jù)幀,,遠(yuǎn)程幀,錯誤幀和過載幀,,同時還進(jìn)行串行數(shù)據(jù)流與輸入/輸出寄存器之間
轉(zhuǎn)換工作(Perdiv data frame ,remote frame ,error frame and overload,conversion thd seiral data
stream and the input/output register),。
詳述:位流控制器:對于發(fā)送:根據(jù)報文緩存中的報文對象,由位流處理器產(chǎn)生通過CAN總線的數(shù)據(jù)
幀和遠(yuǎn)程幀,。該的控制器控制CRC產(chǎn)生器,,且給新的遠(yuǎn)程幀和數(shù)據(jù)幀加上校驗和信息。在加入‘幀起始
位’和‘幀
結(jié)束域’之后,,位流處理器開始CAN總線仲裁過程,,且當(dāng)發(fā)現(xiàn)總線空閑時連續(xù)進(jìn)行幀發(fā)送。進(jìn)行數(shù)據(jù)發(fā)送
的同時,,位流控制器連續(xù)地監(jiān)測I/O線的的電平和發(fā)送移位寄存器當(dāng)前送出位的邏輯狀態(tài)之間檢測到失配,,
產(chǎn)生一個‘最近錯誤’中斷請求,錯誤碼由位域NSRX.LEC給出,。
對于接收:通過驗證CRC相關(guān)域,,確定接收到的幀是否有問題,或有問題,,產(chǎn)生一個‘最近錯
誤’中斷請求,,同時產(chǎn)生一個錯誤幀,并發(fā)送到總線上,。若接收的幀無錯誤,,將接收到的幀分解成標(biāo)志符和
數(shù)據(jù)部分,并將接收到的信息傳給報文緩存,,執(zhí)行遠(yuǎn)程幀或數(shù)據(jù)幀處理,,中斷產(chǎn)生和狀態(tài)處理。
?。?),,位時序單元(Bit timing unit)
考慮到傳播延遲和相移,根據(jù)用戶設(shè)置確定采樣點和位時間長度,同時也處理再同步操作(define a
length of a bit time and the location of the sample point according to the user settings,takeing into
accout propration delays and phase shift errors and re-sychronization).
?。?),,錯誤處理單元(error handling unit)
對發(fā)送和接收過程中錯誤進(jìn)行計數(shù),當(dāng)計數(shù)值達(dá)到一定時,,進(jìn)入不同的錯誤指示狀態(tài):錯誤激活,,錯
誤認(rèn)可,關(guān)閉總線,。
?。?),節(jié)點控制單元(Node control unit)
A, 使能/禁止節(jié)點的傳送
B, 使能/禁止可引發(fā)中斷的特定節(jié)點事件
C 幀計數(shù)管理
?。?),中斷控制單元(interrupt control unit)
控制CAN產(chǎn)生的不同類型的事件的中斷
?。ǘ?,報文控制器
(三),,列表控制器
?。ㄋ模袛嗵幚韱卧?br/>