CAN接收器(上)
CAN接收流程是CAN總線通信中與發(fā)送流程相輔相成的關(guān)鍵環(huán)節(jié),它承擔(dān)著從總線上準(zhǔn)確捕獲、解析并處理數(shù)據(jù)的任務(wù),其設(shè)計的嚴(yán)謹(jǐn)性直接決定了整個網(wǎng)絡(luò)數(shù)據(jù)交互的可靠性。與發(fā)送流程主動競爭總線控制權(quán)不同,接收節(jié)點始終處于監(jiān)聽狀態(tài),通過實時監(jiān)測總線電平變化,精準(zhǔn)捕捉有效數(shù)據(jù)幀,并經(jīng)過一系列校驗與解析步驟,最終將有效信息傳遞給上層應(yīng)用,這一過程既需要與發(fā)送節(jié)點保持時序同步,又要具備強大的錯誤識別與過濾能力,以應(yīng)對復(fù)雜的總線環(huán)境。
接收流程的起點是總線監(jiān)聽與幀同步。CAN總線上的所有節(jié)點在空閑時都會持續(xù)監(jiān)測總線電平,當(dāng)某個發(fā)送節(jié)點啟動發(fā)送時,幀起始(SOF)位——一個顯性電平(低電平)會打破總線的隱性狀態(tài)(高電平),此時接收節(jié)點會立即檢測到這一電平跳變,并以此為基準(zhǔn)啟動同步機(jī)制。CAN協(xié)議采用位同步方式,接收節(jié)點的位時鐘發(fā)生器需要與發(fā)送節(jié)點的位時序保持一致,這一過程包括硬同步和重同步:硬同步發(fā)生在檢測到SOF位的跳變時,接收節(jié)點會將自身位時鐘的同步段與SOF的跳變對齊,確保初始時序一致;而在后續(xù)的位傳輸中,若接收節(jié)點檢測到總線上的電平跳變與自身位時鐘的預(yù)期跳變存在偏差(即相位誤差),會通過重同步機(jī)制微調(diào)位時鐘,使偏差控制在允許范圍內(nèi),保證每一位的采樣都準(zhǔn)確無誤。這種實時同步能力是接收節(jié)點正確解析數(shù)據(jù)的前提,尤其在多節(jié)點通信中,能有效抵消不同節(jié)點間的時鐘漂移。
在實現(xiàn)同步后,接收節(jié)點進(jìn)入幀結(jié)構(gòu)的逐段解析階段,首當(dāng)其沖的是仲裁場的接收與過濾。仲裁場包含標(biāo)識符(ID)及遠(yuǎn)程幀標(biāo)志(RTR)等信息,接收節(jié)點會逐位接收這些數(shù)據(jù),并將標(biāo)識符與自身預(yù)設(shè)的驗收濾波條件進(jìn)行比對。驗收濾波器是接收流程中的“守門人”,其作用是篩選出節(jié)點需要處理的幀,避免無關(guān)數(shù)據(jù)占用處理器資源。濾波器的配置通?;跇?biāo)識符——既可以設(shè)置為只接收特定ID的幀(列表模式),也可以通過掩碼屏蔽部分位,接收符合特定范圍的ID(掩碼模式),且能區(qū)分標(biāo)準(zhǔn)幀(11位ID)和擴(kuò)展幀(29位ID)。當(dāng)接收的標(biāo)識符與濾波條件匹配時,節(jié)點會繼續(xù)接收后續(xù)字段;若不匹配,則會忽略該幀的剩余部分,重新回到監(jiān)聽狀態(tài),等待下一個SOF的到來。這種過濾機(jī)制使CAN總線能在多節(jié)點共存的環(huán)境中,實現(xiàn)數(shù)據(jù)的定向傳輸,提升通信效率。
仲裁場解析通過后,接收節(jié)點依次接收控制場、數(shù)據(jù)場、CRC場、ACK場和幀結(jié)束。控制場中的數(shù)據(jù)長度碼(DLC)明確了數(shù)據(jù)場的字節(jié)數(shù)(0-8字節(jié)),接收節(jié)點會根據(jù)DLC準(zhǔn)備相應(yīng)的緩沖區(qū),確保數(shù)據(jù)場的完整接收。數(shù)據(jù)場是有效信息的載體,接收節(jié)點會按位讀取并按字節(jié)拼接,將原始電信號轉(zhuǎn)換為可被上層應(yīng)用識別的數(shù)字信息。緊接著的CRC場是數(shù)據(jù)完整性的“質(zhì)檢員”,接收節(jié)點會對從SOF到數(shù)據(jù)場的所有位進(jìn)行CRC計算,并將結(jié)果與接收到的CRC碼比對:若一致,說明數(shù)據(jù)傳輸過程未受嚴(yán)重干擾;若不一致,則判定為CRC錯誤,觸發(fā)后續(xù)的錯誤處理機(jī)制。





