一、前言
在汽車電子、工業(yè)自動(dòng)化等眾多領(lǐng)域,CAN 總線作為一種可靠的通信協(xié)議被廣泛應(yīng)用。而 AS32S601 芯片憑借其卓越的性能和可靠性,在這些領(lǐng)域也發(fā)揮著重要作用。其中,CAN Bus Off 功能作為 CAN 總線通信中的關(guān)鍵錯(cuò)誤處理機(jī)制,對(duì)于保障整個(gè)通信網(wǎng)絡(luò)的穩(wěn)定性具有重要意義。
二、CAN Bus Off 功能詳解
(一)定義與作用
CAN Bus Off(總線關(guān)閉)是指 CAN 節(jié)點(diǎn)因發(fā)送錯(cuò)誤幀過(guò)多,超出設(shè)定數(shù)量后,被總線 “關(guān)閉” 進(jìn)入 Bus Off 狀態(tài)。此時(shí)節(jié)點(diǎn)無(wú)法收發(fā)消息,直至被重置或自動(dòng)恢復(fù)。其主要作用是防止故障節(jié)點(diǎn)持續(xù)干擾總線通信,確保其他正常節(jié)點(diǎn)能繼續(xù)工作。
(二)錯(cuò)誤狀態(tài)分類
- 主動(dòng)錯(cuò)誤狀態(tài)(Error Active) :節(jié)點(diǎn)正常參與通信時(shí)的狀態(tài)。檢測(cè)到錯(cuò)誤會(huì)發(fā)送主動(dòng)錯(cuò)誤標(biāo)志(連續(xù) 6 個(gè)顯性位),強(qiáng)制中斷當(dāng)前總線報(bào)文傳輸。
- 被動(dòng)錯(cuò)誤狀態(tài)(Error Passive) :節(jié)點(diǎn)發(fā)送或接收錯(cuò)誤計(jì)數(shù)器超過(guò) 127 時(shí)進(jìn)入。此狀態(tài)下節(jié)點(diǎn)雖能通信,但發(fā)送錯(cuò)誤標(biāo)志時(shí)用被動(dòng)錯(cuò)誤標(biāo)志(連續(xù) 6 個(gè)隱性位),不會(huì)強(qiáng)制中斷總線報(bào)文傳輸。
- 總線關(guān)閉狀態(tài)(Bus Off) :最嚴(yán)重錯(cuò)誤狀態(tài),節(jié)點(diǎn)發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)超過(guò) 255 時(shí)觸發(fā)。節(jié)點(diǎn)完全脫離總線,不能收發(fā)報(bào)文。

:
Bus Off機(jī)制的設(shè)計(jì)目的是為了避免某個(gè)設(shè)備因?yàn)樽陨碓颍ɡ缬布p壞)導(dǎo)致無(wú)法正確收發(fā)報(bào)文而不斷破壞總線的數(shù)據(jù)幀,從而影響其他正常節(jié)點(diǎn)通信。
三、Bus Off 產(chǎn)生原因與觸發(fā)條件
(一)產(chǎn)生原因
- 物理層故障 :如 CAN_H/CAN_L 線路開路或短路(包括對(duì)電源或地短路)、終端電阻缺失、接地不良等,會(huì)影響信號(hào)傳輸?shù)耐暾院涂煽啃裕M(jìn)而導(dǎo)致 CAN 節(jié)點(diǎn)出現(xiàn)錯(cuò)誤幀。
- 信號(hào)干擾 :強(qiáng)電磁干擾、強(qiáng)電流干擾會(huì)破壞 CAN 總線上傳輸?shù)男盘?hào),使節(jié)點(diǎn)接收到錯(cuò)誤的報(bào)文,從而引發(fā)錯(cuò)誤計(jì)數(shù)器增加。
- 節(jié)點(diǎn)故障 :CAN 控制器或收發(fā)器硬件損壞、軟件邏輯錯(cuò)誤導(dǎo)致持續(xù)發(fā)送錯(cuò)誤幀,會(huì)使節(jié)點(diǎn)自身發(fā)送錯(cuò)誤幀數(shù)量迅速上升,最終觸發(fā) Bus Off 狀態(tài)。
- 總線負(fù)載過(guò)高 :CAN 總線負(fù)載率長(zhǎng)期接近或超過(guò)理論上限(如 >70%),會(huì)導(dǎo)致報(bào)文無(wú)法及時(shí)發(fā)送,節(jié)點(diǎn)重試次數(shù)增加,錯(cuò)誤計(jì)數(shù)累積。
(二)觸發(fā)機(jī)制
基于 CAN 協(xié)議定義的錯(cuò)誤計(jì)數(shù)器機(jī)制,主要包括發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)和接收錯(cuò)誤計(jì)數(shù)器(REC)。當(dāng) TEC 超過(guò)閾值(通常為 255)時(shí),節(jié)點(diǎn)進(jìn)入 Bus Off 狀態(tài)。錯(cuò)誤計(jì)數(shù)規(guī)則如下:
- 發(fā)送錯(cuò)誤時(shí):TEC + 8
- 接收錯(cuò)誤時(shí):REC + 1
- 成功發(fā)送后:TEC - 1(最低降至 0)
- 成功接收后:REC - 1(最低降至 0)
狀態(tài)轉(zhuǎn)換路徑依次為主動(dòng)錯(cuò)誤狀態(tài) → 被動(dòng)錯(cuò)誤狀態(tài) → 總線關(guān)閉狀態(tài)。
四、Bus Off 的檢測(cè)與解決測(cè)試
(一)檢測(cè)方法
- 錯(cuò)誤計(jì)數(shù)器監(jiān)控 :通過(guò)監(jiān)控 TEC 和 REC 值預(yù)測(cè)節(jié)點(diǎn)狀態(tài)變化。當(dāng) TEC > 127 時(shí)進(jìn)入被動(dòng)錯(cuò)誤狀態(tài);TEC > 255 時(shí)進(jìn)入 Bus Off 狀態(tài)。可使用如下代碼監(jiān)控并打印 TEC 計(jì)數(shù):
/*------監(jiān)控并打印TEC計(jì)數(shù)------*/
Printf("TEC: 0x%x !rn", CANFD3- >ECR & CANFD_ECR_TEC);
Printf("ESTAT: 0x%xrn", CANFD3- >SR & CANFD_SR_ESTAT);

** 2.狀態(tài)寄存器查詢** :在錯(cuò)誤中斷處理邏輯中查詢 CAN 控制器的狀態(tài)寄存器相應(yīng)位。示例代碼如下:
PLIC_InitTypeDef PLIC_InitStructure;
CANFD_ITConfig(CANFD3, CANFD_IT_EBSOFF, ENABLE);//打開BUSOFF中斷
/*
* Function: CANFD3_IRQ_Handler
* Description: CANFD3 interrupt handler function.
* Param: None.
* Return: None.
*/
**void** CANFD3_IRQ_Handler()
{
**if** (CANFD_GetITStatus(CANFD3, CANFD_FLAG_BSOFF) != RESET)
{
Printf("BusOff!rn");
/* Clear the interrupt pending bits */
CANFD_ClearITPendingBit(CANFD3, CANFD_CLEAR_BSOFF);
}
}
(二)解決方案
- 自動(dòng)恢復(fù) :若支持自動(dòng)恢復(fù)功能(auto bus on),可使用以下代碼開啟:
/*------打開BUS-OFF自動(dòng)回復(fù)功能------*/
CANFD_AutoBusOffRecoConfig(CANFD3,ENABLE);

2.手動(dòng)恢復(fù) :需重置 CAN 控制器或重新初始化 CAN 節(jié)點(diǎn)。讓 CAN 進(jìn)入初始化模式,再進(jìn)入正常工作模式。示例代碼如下:
/*------打開BUS-OFF自動(dòng)回復(fù)功能------*/
**if** (key3_flag)
{
key3_flag = 0;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("The key3 pressed,BUS-OFF Recovery!rn");
}
3.快慢恢復(fù)策略
:快恢復(fù)適用于臨時(shí)性錯(cuò)誤,短時(shí)間內(nèi)(如 50ms)嘗試恢復(fù);慢恢復(fù)適用于較長(zhǎng)時(shí)間(如 1s)后恢復(fù),避免頻繁錯(cuò)誤影響系統(tǒng)。代碼示例如下:
/*------BUS-OFF慢恢復(fù)-快恢復(fù)策略------*/
**if** (Quick_Recovery_Flag < 5)
{
**if** (time50_flag)
{
time50_flag = 0;
Quick_Recovery_Flag++;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("50ms BUS 0FF Quick Recovery!rn");
}
}
**if** (Slow_Recovery_Flag < 3)
{
**if** (time1000_flag)
{
time1000_flag= 0;
Slow_Recovery_Flag++;
CANFD_SetBusOff_Recovery(CANFD3);
Printf("1000ms BUS 0FF Slow Recovery!rn");
}
}
五、Bus Off 的影響與后果
(一)對(duì)節(jié)點(diǎn)的影響
- 通信能力喪失 :節(jié)點(diǎn)無(wú)法發(fā)送報(bào)文或應(yīng)答總線上的報(bào)文,也不能對(duì)總線產(chǎn)生任何影響,但部分實(shí)現(xiàn)下仍可接收總線上的數(shù)據(jù)。
- 功能限制 :雖然 ECU 節(jié)點(diǎn)從總線脫離,但 ECU 依然正常運(yùn)行,所有任務(wù)仍被操作系統(tǒng)調(diào)度。
(二)對(duì)系統(tǒng)的影響
- 保護(hù)機(jī)制 :防止故障節(jié)點(diǎn)不斷發(fā)送錯(cuò)誤幀,影響整個(gè)網(wǎng)絡(luò)的通信質(zhì)量,確保其他正常節(jié)點(diǎn)可以繼續(xù)通信。
- 潛在風(fēng)險(xiǎn) :若關(guān)鍵節(jié)點(diǎn)進(jìn)入 Bus Off 且無(wú)法恢復(fù),可能導(dǎo)致系統(tǒng)功能降級(jí)或失效,在安全關(guān)鍵系統(tǒng)中可能引發(fā)更嚴(yán)重的后果。
總結(jié)
CAN Bus Off 功能作為 CAN 總線通信中的重要錯(cuò)誤處理機(jī)制,在 AS32S601 芯片中得到了良好的支持和實(shí)現(xiàn)。通過(guò)深入了解其原理、產(chǎn)生原因、觸發(fā)條件以及檢測(cè)和恢復(fù)方法,我們能夠更好地應(yīng)對(duì) CAN 總線通信中可能出現(xiàn)的問(wèn)題,提高系統(tǒng)的可靠性。在實(shí)際應(yīng)用中,應(yīng)根據(jù)系統(tǒng)需求選擇合適的檢測(cè)和恢復(fù)策略,平衡系統(tǒng)可靠性和響應(yīng)速度。
審核編輯 黃宇
-
芯片
+關(guān)注
關(guān)注
463文章
54025瀏覽量
466395 -
mcu
+關(guān)注
關(guān)注
147文章
18940瀏覽量
398688 -
CAN
+關(guān)注
關(guān)注
59文章
3068瀏覽量
472803
發(fā)布評(píng)論請(qǐng)先 登錄
從直流到高頻:深度解析電流探頭的關(guān)鍵性能指標(biāo)與選型指南
深海連接器:從原理到應(yīng)用的全維度解析
AS32S601型MCU芯片在商業(yè)衛(wèi)星電源系統(tǒng)伺服控制器中的性能分析與應(yīng)用解析
AS32S601在軌重構(gòu)(OTA)方案的優(yōu)化與分析
基于AS32S601微控制器的CANFD多幀數(shù)據(jù)傳輸處理方法研究
AS32S601與ASP4644S芯片抗輻照性能解析及核電站消防應(yīng)用
AS32S601 芯片 ADC 模塊交流耦合測(cè)試:技術(shù)要點(diǎn)與實(shí)踐
MCU芯片AS32S601在衛(wèi)星光纖放大器(EDFA)中的應(yīng)用探索
AS32X601芯片Flash擦寫調(diào)試技術(shù)解析
AS32S601 芯片在衛(wèi)星互聯(lián)網(wǎng)推進(jìn)系統(tǒng)中的技術(shù)適配性研究
PCBA 加工環(huán)節(jié)大盤點(diǎn),報(bào)價(jià)全流程及周期深度剖析
皮秒脈沖激光技術(shù)在AS32S601單粒子效應(yīng)評(píng)估中的應(yīng)用
深度解析 AS32S601 芯片 CAN Bus Off 機(jī)制:從原理到應(yīng)用的全流程指南
評(píng)論