總線離線模式:CAN 節(jié)點(diǎn)的 “故障隔離狀態(tài)”
總線離線模式是 CAN 控制器的 “故障保護(hù)” 模式,當(dāng)節(jié)點(diǎn)的 “發(fā)送錯(cuò)誤計(jì)數(shù)(TEC)超過(guò) 255” 時(shí),控制器會(huì)自動(dòng)從正常模式切換至總線離線模式,此時(shí)節(jié)點(diǎn)完全停止與總線的交互:既不發(fā)送任何幀(包括數(shù)據(jù)幀、錯(cuò)誤幀),也不接收總線上的幀,僅能通過(guò)軟件復(fù)位或硬件復(fù)位恢復(fù)。總線離線模式的核心目標(biāo)是 “隔離故障節(jié)點(diǎn)”,避免持續(xù)發(fā)送錯(cuò)誤幀的節(jié)點(diǎn)占用總線帶寬、干擾其他正常節(jié)點(diǎn)的通信,是 CAN 總線 “故障容錯(cuò)” 能力的關(guān)鍵機(jī)制。
(一)總線離線模式的技術(shù)細(xì)節(jié):錯(cuò)誤計(jì)數(shù)觸發(fā)與恢復(fù)邏輯
總線離線模式的觸發(fā)完全依賴 “錯(cuò)誤計(jì)數(shù)機(jī)制”,這是 CAN 協(xié)議定義的核心容錯(cuò)邏輯。CAN 控制器內(nèi)部維護(hù)兩個(gè)計(jì)數(shù)器:發(fā)送錯(cuò)誤計(jì)數(shù)(TEC) 與接收錯(cuò)誤計(jì)數(shù)(REC),計(jì)數(shù)器的增減由總線錯(cuò)誤類型決定:
當(dāng)節(jié)點(diǎn)發(fā)送幀時(shí)檢測(cè)到錯(cuò)誤(如位錯(cuò)誤、仲裁丟失),TEC 加 8;若發(fā)送成功(未檢測(cè)到錯(cuò)誤),TEC 減 1(最低為 0);
當(dāng)節(jié)點(diǎn)接收幀時(shí)檢測(cè)到錯(cuò)誤(如 CRC 錯(cuò)誤、填充錯(cuò)誤),REC 加 8;若接收成功,REC 減 1(最低為 0);
當(dāng) TEC > 96 或 REC > 96 時(shí),節(jié)點(diǎn)進(jìn)入 “錯(cuò)誤被動(dòng)模式”(Error Passive Mode),此時(shí)節(jié)點(diǎn)發(fā)送錯(cuò)誤幀時(shí)僅發(fā)送 “被動(dòng)錯(cuò)誤標(biāo)志”(6 個(gè)隱性位),而非顯性位,減少對(duì)總線的干擾;
當(dāng) TEC > 255 時(shí),節(jié)點(diǎn)進(jìn)入 “總線離線模式”,控制器禁用收發(fā)電路,停止與總線交互。
在總線離線模式下,CAN 控制器的狀態(tài)寄存器會(huì)置位 “總線離線標(biāo)志”(如 SJA1000 的 CAN_SR 寄存器中的 BOFF 位),MCU 可通過(guò)讀取該標(biāo)志判斷節(jié)點(diǎn)是否離線。節(jié)點(diǎn)要從離線模式恢復(fù),需滿足 “恢復(fù)條件”:控制器需監(jiān)測(cè)到總線連續(xù)出現(xiàn) 11 個(gè)隱性位(總線空閑)的次數(shù)達(dá)到 “恢復(fù)計(jì)數(shù)器” 閾值(通常為 128 次),此時(shí) TEC 與 REC 會(huì)被清零,控制器自動(dòng)切換回正常模式;或通過(guò)軟件寫入 “復(fù)位位”(如 CAN_CR 寄存器中的 INIT 位),強(qiáng)制控制器復(fù)位并恢復(fù)正常模式。這種 “自動(dòng)監(jiān)測(cè) + 手動(dòng)復(fù)位” 的恢復(fù)邏輯,確保故障節(jié)點(diǎn)在總線恢復(fù)正常后能重新接入,同時(shí)避免故障未解決時(shí)頻繁接入總線。
(二)總線離線模式的應(yīng)用場(chǎng)景:故障隔離與系統(tǒng)容錯(cuò)
總線離線模式是 CAN 系統(tǒng) “穩(wěn)定性保障” 的關(guān)鍵,主要用于 “故障節(jié)點(diǎn)隔離” 與 “系統(tǒng)容錯(cuò)”。在汽車 CAN 總線中,若某 ECU(如車窗控制模塊)因硬件故障(如 CAN 收發(fā)器短路)持續(xù)發(fā)送錯(cuò)誤幀,其 TEC 會(huì)快速增長(zhǎng):第一次錯(cuò)誤 TEC+8,第二次 + 8…… 當(dāng) TEC 超過(guò) 255 時(shí),ECU 進(jìn)入總線離線模式,停止發(fā)送錯(cuò)誤幀。此時(shí),汽車的其他核心節(jié)點(diǎn)(如發(fā)動(dòng)機(jī) ECU、ABS 控制器)仍能正常通信,避免車窗模塊的故障導(dǎo)致整個(gè)總線癱瘓,確保汽車的行駛安全 —— 若沒(méi)有總線離線模式,錯(cuò)誤幀會(huì)持續(xù)占用總線,導(dǎo)致發(fā)動(dòng)機(jī)轉(zhuǎn)速數(shù)據(jù)、剎車信號(hào)無(wú)法傳輸,引發(fā)嚴(yán)重安全事故。
在工業(yè) CAN 系統(tǒng)中,總線離線模式同樣重要:例如,工業(yè)生產(chǎn)線的某傳感器因線路老化導(dǎo)致 CAN_H 與 CAN_L 短路,持續(xù)發(fā)送錯(cuò)誤幀,TEC 超過(guò) 255 后進(jìn)入離線模式,停止與總線交互。生產(chǎn)線的其他節(jié)點(diǎn)(PLC、伺服驅(qū)動(dòng)器)仍能正常通信,生產(chǎn)線可繼續(xù)運(yùn)行(僅丟失該傳感器的數(shù)據(jù)),工程師可在不停機(jī)的情況下更換故障傳感器,待傳感器更換后,通過(guò)軟件復(fù)位使其恢復(fù)正常模式,接入總線,大幅降低停機(jī)損失。
在智能家居 CAN 系統(tǒng)中,若智能燈節(jié)點(diǎn)因固件錯(cuò)誤持續(xù)發(fā)送無(wú)效幀,TEC 超過(guò) 255 后進(jìn)入離線模式,停止干擾總線。其他設(shè)備(如窗簾電機(jī)、空調(diào))仍能正常通信,用戶可通過(guò) APP 發(fā)現(xiàn)該智能燈離線,聯(lián)系維修人員處理,避免因一個(gè)設(shè)備故障影響整個(gè)家居系統(tǒng)的使用。





