【導(dǎo)讀】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í)施的。可以說,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)對(duì)總線錯(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控制器對(duì)錯(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ò)誤。接下來分別對(duì)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ā)送器只要檢測到這些位場對(duì)應(yīng)位流里有5個(gè)連續(xù)相同值的位,便自動(dòng)在接著的下一位插入一個(gè)補(bǔ)碼位。CAN控制器在監(jiān)測總線電平值的同時(shí)對(duì)連續(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ò)誤
節(jié)點(diǎn)無論是作為發(fā)送器的還是作為接收器均可在監(jiān)測報(bào)文期間檢測識(shí)別格式錯(cuò)誤。由于CAN通信嚴(yán)格按照CAN規(guī)范定義的幀格式進(jìn)行報(bào)文封裝傳輸,CAN控制器在監(jiān)測總線電平位時(shí)明確知道當(dāng)前位、后續(xù)位屬于幀格式中哪個(gè)位場,以及屬于位場的第幾個(gè)位,當(dāng)接收到一個(gè)屬于幀格式固定形式的位時(shí),如果實(shí)際電平值與幀格式定義不一致,則檢測到一個(gè)格式錯(cuò)誤。
例外情況,對(duì)于接收器來說,幀結(jié)束最后的位被置于“不重要”狀態(tài),監(jiān)測到的幀結(jié)束最后一位期間的顯性位不被當(dāng)作幀錯(cuò)誤。
5、應(yīng)答錯(cuò)誤
應(yīng)答錯(cuò)誤是由作為發(fā)送器的節(jié)點(diǎn)檢測識(shí)別的。在發(fā)送報(bào)文時(shí),只要在發(fā)送應(yīng)答間隙(隱性)期間所監(jiān)測到的位不為“顯性”,則發(fā)送器會(huì)檢測到一個(gè)應(yīng)答錯(cuò)誤。
注:
1、上述5種錯(cuò)誤不會(huì)相互排斥,也就是說CAN幀中的某個(gè)錯(cuò)誤有可能同屬一種以上的錯(cuò)誤類型。
2、如上所述,作為發(fā)送器或接收器的不同角色時(shí),直接能檢測到的錯(cuò)誤類型是不一樣的。
節(jié)點(diǎn)如何響應(yīng)錯(cuò)誤?
CAN規(guī)范中規(guī)定每個(gè)CAN控制器中實(shí)現(xiàn)一個(gè)發(fā)送錯(cuò)誤計(jì)數(shù)器和一個(gè)接收錯(cuò)誤計(jì)數(shù)器。根據(jù)計(jì)數(shù)值不同,節(jié)點(diǎn)會(huì)處于不同的節(jié)點(diǎn)狀態(tài),并根據(jù)計(jì)數(shù)值的變化進(jìn)行狀態(tài)轉(zhuǎn)換,狀態(tài)轉(zhuǎn)換如圖3所示。
圖3 節(jié)點(diǎn)轉(zhuǎn)態(tài)轉(zhuǎn)換圖
當(dāng)CAN控制器檢測到總線錯(cuò)誤后通過發(fā)送錯(cuò)誤標(biāo)志指示錯(cuò)誤。對(duì)于“錯(cuò)誤主動(dòng)”的節(jié)點(diǎn),錯(cuò)誤標(biāo)志表現(xiàn)為“主動(dòng)錯(cuò)誤標(biāo)志”,對(duì)于“錯(cuò)誤被動(dòng)”的節(jié)點(diǎn),錯(cuò)誤標(biāo)志表現(xiàn)為“被動(dòng)錯(cuò)誤標(biāo)志”。
無論檢測到位錯(cuò)誤、填充錯(cuò)誤、幀格式錯(cuò)誤、還是應(yīng)答錯(cuò)誤,CAN控制器會(huì)在緊鄰的下一位發(fā)送錯(cuò)誤標(biāo)志。如果檢測到的錯(cuò)誤類型是CRC錯(cuò)誤,錯(cuò)誤標(biāo)志的發(fā)送開始于ACK定界符之后的位,即幀結(jié)尾。
綜上所述,CAN控制器對(duì)錯(cuò)誤的響應(yīng)可概括為:根據(jù)當(dāng)前的節(jié)點(diǎn)狀態(tài)在位流序列相應(yīng)的位置用錯(cuò)誤標(biāo)志標(biāo)示錯(cuò)誤,并按照CAN規(guī)范更新錯(cuò)誤計(jì)數(shù)值,進(jìn)行節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換。并且是每成功監(jiān)測到一次錯(cuò)誤便進(jìn)行一次響應(yīng)。
注:
1、由于篇幅有限,關(guān)于錯(cuò)誤計(jì)數(shù)的詳細(xì)規(guī)則、節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換以及錯(cuò)誤幀格式等細(xì)節(jié)均不在本文進(jìn)行討論,請(qǐng)讀者查閱CAN協(xié)議規(guī)范。
2、上述分析可知道,錯(cuò)誤響應(yīng)的關(guān)鍵要素包括錯(cuò)誤標(biāo)志的類型和響應(yīng)的位置。
錯(cuò)誤管理機(jī)制的作用
錯(cuò)誤管理機(jī)制的作用主要體現(xiàn)在對(duì)錯(cuò)誤的響應(yīng)過程。
作為發(fā)送器發(fā)送錯(cuò)誤標(biāo)志時(shí),無論“主動(dòng)錯(cuò)誤”還是“被動(dòng)錯(cuò)誤”都必然包括6個(gè)連續(xù)同極性的位,使其他節(jié)點(diǎn)也識(shí)別到總線錯(cuò)誤,進(jìn)而使所有節(jié)點(diǎn)都能丟棄當(dāng)前出錯(cuò)的幀。
作為接收器發(fā)送錯(cuò)誤標(biāo)志時(shí),“主動(dòng)錯(cuò)誤”標(biāo)志使其他節(jié)點(diǎn)也識(shí)別到總線錯(cuò)誤從而使所有節(jié)點(diǎn)(包括作為發(fā)送器的節(jié)點(diǎn))都能丟棄當(dāng)前出錯(cuò)的幀;“被動(dòng)錯(cuò)誤”標(biāo)志不影響總線通信從而使其他節(jié)點(diǎn)都能成功接收當(dāng)前幀,處于“被動(dòng)錯(cuò)誤”狀態(tài)的節(jié)點(diǎn)屬于“不可信”狀態(tài),其檢測到錯(cuò)誤僅是自己丟棄當(dāng)前幀,這也是錯(cuò)誤管理的靈活性所在,即錯(cuò)誤響應(yīng)并不是嚴(yán)格在任何情況下都使所有節(jié)點(diǎn)丟棄同一幀報(bào)文。
綜上所述,錯(cuò)誤管理機(jī)制可以使所有的節(jié)點(diǎn)同時(shí)接收或丟棄總線的同一幀報(bào)文,又可以使作為接收器的被動(dòng)錯(cuò)誤狀態(tài)的節(jié)點(diǎn)僅自己丟棄當(dāng)前報(bào)文而不影響其他節(jié)點(diǎn)。因此,錯(cuò)誤管理是實(shí)現(xiàn)CAN通信數(shù)據(jù)一致性的機(jī)制之一。
總結(jié)
CAN節(jié)點(diǎn)錯(cuò)誤管理功能是由CAN節(jié)點(diǎn)組成中的CAN控制器負(fù)責(zé)的,對(duì)錯(cuò)誤管理的工作過程可以從“錯(cuò)誤識(shí)別”和“錯(cuò)誤響應(yīng)”兩個(gè)方面進(jìn)行理解。錯(cuò)誤管理是實(shí)現(xiàn)CAN通信數(shù)據(jù)的一致性的機(jī)制之一。
ZPS-CANFD是致遠(yuǎn)電子總線分析儀第二代CAN總線開發(fā)輔助工具,適用于CANFD、CAN、LIN總線的測量及測試儀器,支持總線數(shù)據(jù)的發(fā)送和接收,高層協(xié)議解析及診斷,能對(duì)CANFD、CAN總線物理層電氣信號(hào)實(shí)時(shí)采集和記錄,并附帶有高速模擬通道、通用數(shù)字IO及模擬IO,通過提供的硬件接口及軟件功能,用戶能夠便捷地構(gòu)建總線信號(hào)測量與分析、節(jié)點(diǎn)功能仿真及測試、網(wǎng)絡(luò)可靠性診斷及評(píng)估的自動(dòng)化系統(tǒng)。ZPS-CANFD可實(shí)現(xiàn)CAN/CANFD報(bào)文和波形的同步監(jiān)測,可以直觀的定位排查節(jié)點(diǎn)錯(cuò)誤問題,以及更高效的錯(cuò)誤干擾等模擬測試。
來源:ZLG致遠(yuǎn)儀器,原創(chuàng):研發(fā)部
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理。
推薦閱讀:
設(shè)計(jì)人員如何實(shí)現(xiàn) Wi-Fi 三頻段千兆網(wǎng)速和高吞吐量
凌華科技推出邊緣視覺分析軟件開發(fā)套件EVA SDK加速邊緣AI視覺
“愛芯科技”完成新一輪品牌升級(jí),正式更名“愛芯元智”