CAN節(jié)點(diǎn)的穩(wěn)定性、可靠性和安全性得益于其強(qiáng)大的錯(cuò)誤管理機(jī)制。那么,CAN節(jié)點(diǎn)為什么能感知錯(cuò)誤?又是如何響應(yīng)錯(cuò)誤?您是否能清晰地想象出這一過程?本文將為大家詳細(xì)分析CAN節(jié)點(diǎn)錯(cuò)誤管理的工作過程。
節(jié)點(diǎn)電路構(gòu)成
如圖1所示,MCU作為主控制器,完成CAN控制器和功能電路的控制。
圖1 CAN節(jié)點(diǎn)組成框圖
CAN控制器是工作于數(shù)據(jù)鏈路層的器件,集成了CAN規(guī)范中數(shù)據(jù)鏈路層的全部功能,其功能由軟件和硬件共同實(shí)現(xiàn),從設(shè)備供應(yīng)商買回來的CAN控制器已經(jīng)把相應(yīng)的邏輯固化在其硅片之中;MCU是工作于應(yīng)用層的器件,其功能由軟件和硬件共同實(shí)現(xiàn),MCU運(yùn)行的程序可由設(shè)計(jì)者靈活設(shè)計(jì),以實(shí)現(xiàn)CAN節(jié)點(diǎn)的特定功能;CAN收發(fā)器工作于物理層,其功能完全由硬件實(shí)現(xiàn),其作用是將CAN控制器的邏輯電平轉(zhuǎn)化為CAN總線的模擬差分信號(hào),以及把總線模擬差分信號(hào)轉(zhuǎn)換成CAN控制器的邏輯電平。
CAN節(jié)點(diǎn)的錯(cuò)誤管理屬于CAN通信規(guī)范數(shù)據(jù)鏈路層的內(nèi)容,具體來說,錯(cuò)誤管理是通過MCU和CAN控制器來實(shí)施的??梢哉f,CAN控制器是錯(cuò)誤管理的基礎(chǔ)設(shè)施,我們可以從兩個(gè)方面理解其工作邏輯:一是如何感知錯(cuò)誤,二是如何響應(yīng)錯(cuò)誤。
注:
1、本文所說的CAN規(guī)范指的是德國BOSCH公司的《CAN Specification Version 2.0》。
節(jié)點(diǎn)如何感知錯(cuò)誤?
如前文所述,節(jié)點(diǎn)對總線錯(cuò)誤的識(shí)別是通過CAN控制器來完成的。CAN控制器輸出給收發(fā)器發(fā)送引腳TX的邏輯信號(hào)位會(huì)從收發(fā)器接收引腳RX接收,這使得CAN控制器可以在發(fā)送一個(gè)邏輯位期間同時(shí)監(jiān)測總線的實(shí)際電平值。CAN控制器檢測總線錯(cuò)誤原理如圖2所示:
圖2 監(jiān)測總線錯(cuò)誤原理圖
如圖2描述,CAN控制器監(jiān)測一個(gè)總線電平的電平值是在采樣點(diǎn)位置進(jìn)行的,判斷是否出現(xiàn)錯(cuò)誤是在信息處理時(shí)間內(nèi)完成的。
綜上所述,CAN控制器對錯(cuò)誤的識(shí)別可概括為:無論是作為發(fā)送器還是接收器,在采樣點(diǎn)位置成功監(jiān)測到當(dāng)前總線的實(shí)際電平值后,CAN控制器便按照CAN規(guī)范中描述的錯(cuò)誤管理規(guī)則判斷是否出現(xiàn)錯(cuò)誤。
CAN通信過程中的錯(cuò)誤類型包括5種,分別是:位錯(cuò)誤、填充錯(cuò)誤、CRC錯(cuò)誤、幀格式錯(cuò)誤、應(yīng)答錯(cuò)誤。接下來分別對5種錯(cuò)誤的檢測識(shí)別過程進(jìn)行解析。
1、位錯(cuò)誤
位錯(cuò)誤是由作為發(fā)送器的節(jié)點(diǎn)在發(fā)送報(bào)文期間進(jìn)行檢測識(shí)別的。CAN控制器的程序邏輯發(fā)送的電平與監(jiān)測到總線的實(shí)際信號(hào)不一致即在此位期間檢測到位錯(cuò)誤。
例外情況,在仲裁場或應(yīng)答間隙期間發(fā)送一“隱性”位卻監(jiān)視到一“顯性”位,以及當(dāng)發(fā)送器發(fā)送一個(gè)被動(dòng)錯(cuò)誤標(biāo)志但檢測到“顯性”位時(shí),均也不被視為位錯(cuò)誤,以實(shí)現(xiàn)特定的功能。
2、填充錯(cuò)誤
在CAN幀的位場中,幀起始、仲裁場、控制場、數(shù)據(jù)場以及CRC序列,均通過位填充的方法編碼。無論何時(shí),發(fā)送器只要檢測到這些位場對應(yīng)位流里有5個(gè)連續(xù)相同值的位,便自動(dòng)在接著的下一位插入一個(gè)補(bǔ)碼位。CAN控制器在監(jiān)測總線電平值的同時(shí)對連續(xù)相同的位電平值會(huì)進(jìn)行計(jì)數(shù),如果在使用位填充法進(jìn)行編碼的信息中,出現(xiàn)了第6個(gè)連續(xù)相同的位電平值時(shí),便檢測到一個(gè)填充錯(cuò)誤。
3、CRC錯(cuò)誤
CRC錯(cuò)誤是由作為接收器的節(jié)點(diǎn)進(jìn)行檢測識(shí)別的。CRC序列共15位(不包含填充位),其內(nèi)容由幀起始、仲裁場、控制場、數(shù)據(jù)場(如果有)的無填充位流計(jì)算而來。
CRC序列計(jì)算使用CAN規(guī)范規(guī)定的方法。作為發(fā)送器的節(jié)點(diǎn)發(fā)送CAN報(bào)文時(shí)CRC序列由規(guī)定的計(jì)算方法確定,作為接收器的節(jié)點(diǎn)從總線上接收完數(shù)據(jù)場最后一個(gè)數(shù)據(jù)位(沒有數(shù)據(jù)場時(shí)是接收完控制場的最后一個(gè)位)后,如果接下來接收到實(shí)際的CRC序列與接收器的計(jì)算結(jié)果不一致,便檢測到CRC錯(cuò)誤。
4、格式錯(cuò)誤