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





