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