一、什么是CAN協(xié)議
電子計(jì)算機(jī)網(wǎng)絡(luò)用電子語(yǔ)言來(lái)說(shuō)話(huà),各電控單元必須使用和解讀相同的電子語(yǔ)言,這種語(yǔ)言稱(chēng)“協(xié)議”,汽車(chē)電腦網(wǎng)絡(luò)常見(jiàn)的傳輸協(xié)議有數(shù)種。寶來(lái)車(chē)裝用博世公司產(chǎn)品,數(shù)據(jù)總線(xiàn)采用CAN協(xié)議,這個(gè)協(xié)議是由福特、Internet與博世公司共同開(kāi)發(fā)的高速汽車(chē)通信協(xié)議。CAN是Controller Area Network(控制單元區(qū)域網(wǎng)絡(luò))的縮寫(xiě),意思是控制單元通過(guò)網(wǎng)絡(luò)交換數(shù)據(jù)。
二、CAN數(shù)據(jù)傳輸系統(tǒng)的優(yōu)點(diǎn)
數(shù)據(jù)總線(xiàn)與其他部件組合在一起就成為數(shù)據(jù)傳輸系統(tǒng),CAN數(shù)據(jù)傳輸系統(tǒng)的優(yōu)點(diǎn)是:
①將傳感器信號(hào)線(xiàn)減至最少,使更多的傳感器信號(hào)進(jìn)行高速數(shù)據(jù)傳遞。 ②電控單元和電控單元插腳最小化應(yīng)用,節(jié)省電控單元的有限空間。 ③如果系統(tǒng)需要增加新的功能,僅需軟件升級(jí)即可。 ④各電控單元的監(jiān)測(cè)對(duì)所連接的CAN總線(xiàn)進(jìn)行實(shí)時(shí)監(jiān)測(cè),如出現(xiàn)故障該電控單元會(huì)存儲(chǔ)故障碼。
⑤CAN數(shù)據(jù)總線(xiàn)符合國(guó)際標(biāo)準(zhǔn),以便于一輛車(chē)上不同廠家的電控單元間進(jìn)行數(shù)據(jù)交換。
三、CAN數(shù)據(jù)格式
1.名詞
1)顯性和隱性
顯性-0 隱性-1(diff=0)
2)數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過(guò)載幀、幀間隔
數(shù)據(jù)幀:用于發(fā)送節(jié)點(diǎn)向接收節(jié)點(diǎn)傳送數(shù)據(jù)的幀
遠(yuǎn)程幀:用于接收節(jié)點(diǎn)向具有相同ID的發(fā)送節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)的幀
錯(cuò)誤幀:用于當(dāng)檢測(cè)出錯(cuò)誤時(shí)向其他節(jié)點(diǎn)通知錯(cuò)誤的幀
過(guò)載幀:用于接收節(jié)點(diǎn)通知其尚未做好接受準(zhǔn)備的幀
幀間隔:用于將數(shù)據(jù)幀及遠(yuǎn)程幀與前面的幀分離開(kāi)來(lái)的幀
3)遠(yuǎn)程數(shù)據(jù)請(qǐng)求
通過(guò)發(fā)送遠(yuǎn)程幀,一個(gè)需要數(shù)據(jù)的的節(jié)點(diǎn)可以請(qǐng)求另一個(gè)節(jié)點(diǎn)發(fā)送相應(yīng)的數(shù)據(jù)幀,稱(chēng)為遠(yuǎn)程數(shù)據(jù)請(qǐng)求。數(shù)據(jù)幀和相應(yīng)的遠(yuǎn)程幀具有相同的標(biāo)識(shí)符。
2.CAN標(biāo)準(zhǔn)幀與CAN擴(kuò)展幀格式
數(shù)據(jù)幀和遠(yuǎn)程幀都可以使用標(biāo)準(zhǔn)幀格式或者擴(kuò)展幀格式。
RTR:遠(yuǎn)程發(fā)送請(qǐng)求位,數(shù)據(jù)幀中為顯性,遠(yuǎn)程幀中為隱性。
SRR:替代遠(yuǎn)程請(qǐng)求位(在擴(kuò)展格式中在RTR位置,所以得此名),隱性位。此位可判斷出標(biāo)準(zhǔn)幀優(yōu)先于擴(kuò)展幀。
IDE:標(biāo)識(shí)符擴(kuò)展位,標(biāo)準(zhǔn)幀-顯性,擴(kuò)展幀-隱性,表示該幀為標(biāo)準(zhǔn)幀還是擴(kuò)展幀。
R1、R0:保留位。
DLC:數(shù)據(jù)長(zhǎng)度代碼,如下圖所示,包括下圖中的DLC3、DLC2、DLC1、DLC0:
CRC段:由CAN控制器自動(dòng)填充。
CRC分隔符:隱性位。
ACK段:2位,由CAN控制器自動(dòng)填充。包括應(yīng)答位和應(yīng)答界定位。應(yīng)答界定位緊鄰幀結(jié)束。在應(yīng)答域中,發(fā)送器發(fā)出兩個(gè)隱性位,當(dāng)接收器正確的接收到有效的報(bào)文,該接收器就會(huì)在應(yīng)答位期間,用一顯性位填充應(yīng)答位作為回應(yīng),而應(yīng)答界定位一直保持為隱性。
幀結(jié)束:由7個(gè)隱性位組成,由CAN控制器自動(dòng)填充。兩種幀格式可出現(xiàn)在同一總線(xiàn)上
3.數(shù)據(jù)幀
SOF幀開(kāi)始:數(shù)據(jù)幀開(kāi)始的段
仲裁段:該幀優(yōu)先級(jí)的段
控制段:數(shù)據(jù)的字節(jié)數(shù)以及保留位的段
數(shù)據(jù)段:數(shù)據(jù)的內(nèi)容,0~8個(gè)字節(jié)
CRC段:檢查幀的傳輸錯(cuò)誤的段
ACK段:確認(rèn)正常接收的段
幀結(jié)束:數(shù)據(jù)幀結(jié)束的段
4.遠(yuǎn)程幀
通過(guò)發(fā)送遠(yuǎn)程幀,作為數(shù)據(jù)接收器的節(jié)點(diǎn)可以發(fā)起各自數(shù)據(jù)源的數(shù)據(jù)傳送請(qǐng)求,即向數(shù)據(jù)發(fā)送器請(qǐng)求發(fā)送具有相同ID的數(shù)據(jù)幀。
遠(yuǎn)程幀由幀起始、仲裁段、控制段、CRC段、ACK段和幀結(jié)束組成。
遠(yuǎn)程幀沒(méi)有數(shù)據(jù)段。
5.錯(cuò)誤幀
出錯(cuò)標(biāo)志有兩種:主動(dòng)(積極)錯(cuò)誤標(biāo)志和被動(dòng)(消極)錯(cuò)誤標(biāo)志。
主動(dòng)(積極)錯(cuò)誤標(biāo)志:6個(gè)連續(xù)的顯行位組成。
被動(dòng)(消極)錯(cuò)誤標(biāo)志:6個(gè)連續(xù)的隱性位組成,有可能被其他節(jié)點(diǎn)的顯行位覆蓋。
一個(gè)錯(cuò)誤積極節(jié)點(diǎn)如果檢測(cè)到一個(gè)錯(cuò)誤條件,會(huì)發(fā)送一個(gè)積極錯(cuò)誤標(biāo)志進(jìn)行標(biāo)識(shí)。這一錯(cuò)誤標(biāo)志違反了正常的位填充規(guī)則(適用于從幀起始到CRC界定符之間的所有場(chǎng))或破壞了應(yīng)答場(chǎng)和幀結(jié)束場(chǎng)的固定格式,結(jié)果是引起其他節(jié)點(diǎn)檢測(cè)到新的錯(cuò)誤條件并各自開(kāi)始發(fā)送錯(cuò)誤標(biāo)志,因此,這個(gè)在總線(xiàn)上可被檢測(cè)到的顯性位序列是各個(gè)節(jié)點(diǎn)發(fā)出的不同錯(cuò)誤標(biāo)志疊加的結(jié)果。該序列的總長(zhǎng)度在6~12位之間變化。
一個(gè)消極錯(cuò)誤節(jié)點(diǎn)如果檢測(cè)到一個(gè)錯(cuò)誤條件,會(huì)試圖發(fā)送一個(gè)消極錯(cuò)誤標(biāo)志進(jìn)行指示。這個(gè)消極錯(cuò)誤節(jié)點(diǎn)會(huì)一直等待6個(gè)具有相同極性的連續(xù)位,等待從消極錯(cuò)誤標(biāo)志的起始開(kāi)始,當(dāng)檢測(cè)到6個(gè)相同極性的連續(xù)位時(shí),消極錯(cuò)誤標(biāo)志發(fā)送即完成。
錯(cuò)誤界定符由8個(gè)隱性位組成,錯(cuò)誤標(biāo)志發(fā)出以后,每個(gè)節(jié)點(diǎn)都發(fā)出隱性位,并一直監(jiān)視總線(xiàn)直到檢測(cè)出隱性位,隨后開(kāi)始發(fā)送剩余的7個(gè)隱性位。
CAN提供了檢測(cè)下列錯(cuò)誤類(lèi)型機(jī)制:
1)應(yīng)答錯(cuò)誤
2)填充錯(cuò)誤
3)CRC錯(cuò)誤
4)格式錯(cuò)誤
6.過(guò)載幀
存在3中過(guò)載條件,引起過(guò)載標(biāo)志的發(fā)送。
1)接收器要求延遲下一次數(shù)據(jù)幀或遠(yuǎn)程幀的到達(dá)。
2)在幀間隔間歇場(chǎng)的第一和第二位檢測(cè)到顯性位。
3)如果一個(gè)CAN節(jié)點(diǎn)在錯(cuò)誤界定符或過(guò)載界定符的第8位(最后一位)采樣到一個(gè)顯性位,則節(jié)點(diǎn)會(huì)發(fā)送一個(gè)過(guò)載幀(而不是錯(cuò)誤幀)。錯(cuò)誤計(jì)數(shù)器不會(huì)增加。
最多可產(chǎn)生2個(gè)過(guò)載幀來(lái)延遲下一數(shù)據(jù)幀或遠(yuǎn)程幀。
過(guò)載標(biāo)志由6個(gè)顯性位組成,其全部形式與積極錯(cuò)誤標(biāo)志一樣。過(guò)載標(biāo)志破壞了幀間隔間歇場(chǎng)的固定形式,結(jié)果其他節(jié)點(diǎn)也檢測(cè)到一個(gè)過(guò)載條件,并各自開(kāi)始發(fā)送過(guò)載幀。如果在幀間隔間歇場(chǎng)的第3位期間檢測(cè)到一個(gè)顯性位,則該位將解釋為幀起始。
注意:1)CAN總線(xiàn)的錯(cuò)誤幀、過(guò)載幀怎么發(fā)出,是硬件自己完成,還是要軟件實(shí)現(xiàn)?
答: 當(dāng)然是由硬件自動(dòng)發(fā)出,不需要軟件參與。
7.幀間隔
幀間隔用于分割數(shù)據(jù)幀和遠(yuǎn)程幀的幀。
數(shù)據(jù)幀和遠(yuǎn)程幀可通過(guò)插入幀間隔將本幀與前面的任何幀(數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過(guò)載幀)分開(kāi)。過(guò)載幀和錯(cuò)誤幀之前沒(méi)有幀間隔,多個(gè)過(guò)載幀之間也不是通過(guò)幀間隔分開(kāi)的。
幀間隔包括間歇場(chǎng)、總線(xiàn)空閑場(chǎng)以及可能的暫停發(fā)送域。只有剛發(fā)送出去前一報(bào)文的錯(cuò)誤消極節(jié)點(diǎn)才需要暫停發(fā)送場(chǎng)。
非錯(cuò)誤消極節(jié)點(diǎn)或者作為前一報(bào)文接收器的節(jié)點(diǎn)的幀間隔如圖。
作為前一報(bào)文發(fā)送器的錯(cuò)誤消極節(jié)點(diǎn)的幀間隔如圖。
間歇場(chǎng)包括3個(gè)隱性位。間歇場(chǎng)期間,所有節(jié)點(diǎn)均不允許發(fā)送數(shù)據(jù)幀或者遠(yuǎn)程幀,他唯一的作用是標(biāo)識(shí)一個(gè)過(guò)載條件。
注意,如果一個(gè)正準(zhǔn)備發(fā)送報(bào)文的CAN節(jié)點(diǎn)在間歇場(chǎng)的第三位檢測(cè)到一個(gè)顯性位,他將認(rèn)為這是一個(gè)幀的開(kāi)始,并且在下一位時(shí)間,從報(bào)文的標(biāo)識(shí)符的第一位開(kāi)始發(fā)送報(bào)文,而不再發(fā)送一個(gè)幀起始位,同時(shí)也不會(huì)成為報(bào)文接收器。
總線(xiàn)空閑周期為任意長(zhǎng)度。在此期間,總線(xiàn)空閑,任何需要發(fā)送報(bào)文的節(jié)點(diǎn)都可以訪問(wèn)總線(xiàn)。
一個(gè)因其他報(bào)文正在發(fā)送而被掛起的報(bào)文,將在間歇場(chǎng)后的第一位開(kāi)始發(fā)送。此時(shí)檢測(cè)到的總線(xiàn)上一個(gè)顯性位將被解釋為一個(gè)幀起始。
暫停發(fā)送場(chǎng)是指錯(cuò)誤消極節(jié)點(diǎn)發(fā)送一個(gè)報(bào)文以后,在開(kāi)始發(fā)送下一個(gè)報(bào)文或者認(rèn)可總線(xiàn)處于空閑之前,在間歇場(chǎng)后發(fā)出的8個(gè)隱性位。如果在此期間一次由其他節(jié)點(diǎn)引起的傳送開(kāi)始了,則該節(jié)點(diǎn)將成為報(bào)文接收器。
四、CAN數(shù)據(jù)傳輸系統(tǒng)構(gòu)成及過(guò)程
(1)CAN數(shù)據(jù)傳輸系統(tǒng)構(gòu)成
CAN數(shù)據(jù)傳輸系統(tǒng)中每塊電腦的內(nèi)部增加了一個(gè)CAN控制器,一個(gè)CAN收發(fā)器;每塊電腦外部連接了兩條CAN數(shù)據(jù)總線(xiàn)。在系統(tǒng)中作為終端的兩塊電腦,其內(nèi)部還裝有一個(gè)數(shù)據(jù)傳遞終端(有時(shí)數(shù)據(jù)傳遞終端安裝在電腦外部)。
(2)各部件功能
①CAN控制器作用是接收控制單元中微處理器發(fā)出的數(shù)據(jù),處理數(shù)據(jù)并傳給CAN收發(fā)器。同時(shí)CAN控制器也接收收發(fā)器收到的數(shù)據(jù),處理數(shù)據(jù)并傳給微處理器。
②CAN收發(fā)器 是一個(gè)發(fā)送器和接收器的組合,它將CAN控制器提供的數(shù)據(jù)轉(zhuǎn)化成電信號(hào)并通過(guò)數(shù)據(jù)總線(xiàn)發(fā)送出去,同時(shí),它也接收總線(xiàn)數(shù)據(jù),并將數(shù)據(jù)傳到CAN控制器。
③數(shù)據(jù)傳遞終端 實(shí)際是一個(gè)電阻器,作用是避免數(shù)據(jù)傳輸終了反射回來(lái),產(chǎn)生反射波而使數(shù)據(jù)遭到破壞。
④CAN數(shù)據(jù)總線(xiàn) 用以傳輸數(shù)據(jù)的雙向數(shù)據(jù)線(xiàn),分為CAN高位(CAN-high)和低位(CAN—low)數(shù)據(jù)線(xiàn)。數(shù)據(jù)沒(méi)有指定接收器,數(shù)據(jù)通過(guò)數(shù)據(jù)總線(xiàn)發(fā)送給各控制單元,各控制單元接收后進(jìn)行計(jì)算。為了防止外界電磁波干擾和向外輻射,CAN總線(xiàn)采用兩條線(xiàn)纏繞在一起,兩條線(xiàn)上的電位是相反的,如果一條線(xiàn)的電壓是5V,另一條線(xiàn)就是0V,兩條線(xiàn)的電壓和總等于常值。通過(guò)該種辦法,CAN總線(xiàn)得到保護(hù)而免受外界電磁場(chǎng)干擾,同時(shí)CAN總線(xiàn)向外輻射也保持中性,即無(wú)輻射。
(3)數(shù)據(jù)傳遞過(guò)程
例如:發(fā)動(dòng)機(jī)電腦向某電腦CAN收發(fā)器發(fā)送數(shù)據(jù),該電腦CAN收發(fā)器接收到由發(fā)動(dòng)機(jī)電腦傳來(lái)的數(shù)據(jù),轉(zhuǎn)換信號(hào)并發(fā)給本電腦的控制器。CAN數(shù)據(jù)傳輸系統(tǒng)的其他電腦收發(fā)器均接收到此數(shù)據(jù),但是要檢查判斷此數(shù)據(jù)是否是所需要的數(shù)據(jù),如果不是將忽略掉。
評(píng)論