CAN發(fā)送器(下)
仲裁成功的節(jié)點(diǎn)獲得總線控制權(quán)后,將依次發(fā)送數(shù)據(jù)幀的控制場、數(shù)據(jù)場、CRC場、ACK場和幀結(jié)束??刂茍鲋械臄?shù)據(jù)長度碼(DLC)明確了數(shù)據(jù)場中包含的字節(jié)數(shù)(0-8字節(jié)),確保接收節(jié)點(diǎn)能夠正確解析數(shù)據(jù)長度;數(shù)據(jù)場是有效數(shù)據(jù)的載體,按照字節(jié)順序依次發(fā)送;CRC場包含了對幀起始到數(shù)據(jù)場的循環(huán)冗余校驗(yàn)碼,用于接收節(jié)點(diǎn)檢測數(shù)據(jù)傳輸過程中是否出現(xiàn)錯(cuò)誤;ACK場則用于接收節(jié)點(diǎn)確認(rèn)數(shù)據(jù)接收成功——當(dāng)接收節(jié)點(diǎn)正確接收到數(shù)據(jù)幀(無CRC錯(cuò)誤)后,會在ACK位期間發(fā)送一個(gè)顯性電平作為應(yīng)答,發(fā)送節(jié)點(diǎn)檢測到這一顯性電平后,確認(rèn)數(shù)據(jù)已被至少一個(gè)節(jié)點(diǎn)成功接收;最后,幀結(jié)束由7個(gè)隱性電平位組成,用于告知總線上的所有節(jié)點(diǎn)本次數(shù)據(jù)發(fā)送完成,總線即將恢復(fù)空閑狀態(tài)。
在整個(gè)發(fā)送過程中,CAN控制器還會進(jìn)行實(shí)時(shí)的錯(cuò)誤檢測與處理,以保障數(shù)據(jù)傳輸?shù)目煽啃浴?刂破鲿O(jiān)測發(fā)送的每一位信號,若出現(xiàn)位錯(cuò)誤(自身發(fā)送與總線電平不一致,且非仲裁階段)、CRC錯(cuò)誤(接收節(jié)點(diǎn)反饋CRC校驗(yàn)失?。┗?span>ACK錯(cuò)誤(未檢測到接收節(jié)點(diǎn)的應(yīng)答信號)等情況,發(fā)送節(jié)點(diǎn)會立即發(fā)送錯(cuò)誤標(biāo)志(由6個(gè)顯性電平位組成),通知總線上的其他節(jié)點(diǎn)本次傳輸出現(xiàn)異常。隨后,發(fā)送節(jié)點(diǎn)會根據(jù)錯(cuò)誤類型決定是否重發(fā):對于暫時(shí)性錯(cuò)誤(如偶然的電磁干擾),節(jié)點(diǎn)會在總線恢復(fù)空閑后重新發(fā)送數(shù)據(jù)幀;若錯(cuò)誤持續(xù)出現(xiàn)(如總線故障),節(jié)點(diǎn)會按照CAN協(xié)議的錯(cuò)誤管理規(guī)則,逐步從主動錯(cuò)誤狀態(tài)切換到被動錯(cuò)誤狀態(tài),最終可能進(jìn)入總線關(guān)閉狀態(tài),避免持續(xù)影響整個(gè)網(wǎng)絡(luò)的運(yùn)行。
當(dāng)數(shù)據(jù)幀的幀結(jié)束位發(fā)送完成后,發(fā)送節(jié)點(diǎn)的CAN控制器會再次監(jiān)測總線電平,確認(rèn)總線是否恢復(fù)隱性電平,同時(shí)釋放總線控制權(quán)。此時(shí),發(fā)送流程基本完成,節(jié)點(diǎn)回到空閑狀態(tài),等待下一次數(shù)據(jù)發(fā)送請求。整個(gè)過程從數(shù)據(jù)封裝、總線監(jiān)測、仲裁競爭,到數(shù)據(jù)傳輸、錯(cuò)誤處理和總線釋放,形成了一個(gè)閉環(huán)的工作流程,既保證了多個(gè)節(jié)點(diǎn)共享總線的有序性,又通過嚴(yán)格的錯(cuò)誤檢測機(jī)制保障了數(shù)據(jù)傳輸?shù)目煽啃浴?span>
CAN發(fā)送流程的設(shè)計(jì)充分體現(xiàn)了實(shí)時(shí)性與可靠性的平衡,其非破壞性仲裁機(jī)制使得高優(yōu)先級數(shù)據(jù)能夠快速獲得總線控制權(quán),滿足工業(yè)控制、汽車電子等場景對實(shí)時(shí)響應(yīng)的需求;而多層次的錯(cuò)誤檢測與重發(fā)機(jī)制,則有效抵御了傳輸過程中的干擾和故障,確保數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。正是這一系列嚴(yán)謹(jǐn)?shù)牧鞒淘O(shè)計(jì),使得CAN總線在復(fù)雜的多節(jié)點(diǎn)通信場景中始終保持穩(wěn)定高效的運(yùn)行狀態(tài),成為嵌入式系統(tǒng)中不可或缺的通信解決方案。





