前言:
在汽車、工業(yè)自動(dòng)化等領(lǐng)域的廣泛應(yīng)用中,CAN 總線作為關(guān)鍵的通信協(xié)議,其穩(wěn)定性直接關(guān)系到系統(tǒng)的可靠運(yùn)行。然而,實(shí)際應(yīng)用中,CAN 總線常因電磁干擾、硬件故障等出現(xiàn)錯(cuò)誤,導(dǎo)致節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài),通信中斷。本文將深入探討 CAN 總線自動(dòng)恢復(fù)機(jī)制的原理、調(diào)優(yōu)方法及實(shí)戰(zhàn)應(yīng)用,旨在幫助工程師優(yōu)化系統(tǒng)配置,提升通信可靠性。
軟硬件環(huán)境說(shuō)明
本次實(shí)戰(zhàn)應(yīng)用基于眺望T113-I平臺(tái),Talowe-EVM-T113-i底板引出兩路 CAN 接口,為方便測(cè)試,這里將兩個(gè) CAN 口連接(L-L,H-H)進(jìn)行回傳收發(fā)測(cè)試。
一、CAN 總線的錯(cuò)誤處理機(jī)制
在 CAN 總線通信中,節(jié)點(diǎn)可能會(huì)因各種原因(如電磁干擾、硬件故障等)出現(xiàn)錯(cuò)誤導(dǎo)致無(wú)法正確收發(fā)報(bào)文而不斷的破壞總線的數(shù)據(jù)幀,從而影響其它正常節(jié)點(diǎn)通信。為了應(yīng)對(duì)這種情況,CAN 協(xié)議設(shè)計(jì)了錯(cuò)誤計(jì)數(shù)器機(jī)制。根據(jù)計(jì)數(shù)值不同,節(jié)點(diǎn)會(huì)處于不同的錯(cuò)誤狀態(tài),并根據(jù)計(jì)數(shù)值的變化進(jìn)行狀態(tài)轉(zhuǎn)換,當(dāng)節(jié)點(diǎn)的發(fā)送錯(cuò)誤計(jì)數(shù)器TEC達(dá)到一定閾值(TEC>255)時(shí),節(jié)點(diǎn)會(huì)自動(dòng)進(jìn)入總線關(guān)閉狀態(tài)。總線關(guān)閉態(tài)是節(jié)點(diǎn)最嚴(yán)重的錯(cuò)誤狀態(tài),在此狀態(tài)節(jié)點(diǎn)不能收發(fā)報(bào)文,以防止其對(duì)總線通信造成進(jìn)一步干擾。
二、bus-off自動(dòng)恢復(fù)機(jī)制
為了提高系統(tǒng)的可用性和容錯(cuò)能力,CAN驅(qū)動(dòng)提供了 restart-ms 參數(shù),用于自動(dòng)恢復(fù)進(jìn)入總線關(guān)閉狀態(tài)的 CAN 設(shè)備。restart-ms 參數(shù)允許用戶設(shè)置設(shè)備在進(jìn)入總線關(guān)閉狀態(tài)后自動(dòng)重啟的時(shí)間間隔。例如,restart-ms 1000 表示設(shè)備會(huì)在檢測(cè)到總線關(guān)閉狀態(tài)后,等待 1000 毫秒自動(dòng)嘗試恢復(fù)。
自動(dòng)恢復(fù)機(jī)制具有以下特點(diǎn):
- 無(wú)限次重試:設(shè)備會(huì)在每次總線關(guān)閉后按照設(shè)定的時(shí)間間隔嘗試重啟,直到總線恢復(fù)正常。
- 自動(dòng)化處理:無(wú)需人工干預(yù),設(shè)備可以自行檢測(cè)并修復(fù)錯(cuò)誤。
三、restart-ms 參數(shù)的調(diào)優(yōu)
在實(shí)際應(yīng)用中,合理設(shè)置 restart-ms 參數(shù)至關(guān)重要,以確保系統(tǒng)在錯(cuò)誤發(fā)生時(shí)能夠高效恢復(fù),同時(shí)避免對(duì)總線造成額外負(fù)擔(dān)。 3.1根據(jù)實(shí)時(shí)性需求設(shè)置恢復(fù)時(shí)間
- 在高實(shí)時(shí)性要求的場(chǎng)景(如汽車控制系統(tǒng)),建議將 restart-ms 設(shè)置為較短的時(shí)間間隔(如 500 - 1000 毫秒),以確保設(shè)備快速恢復(fù)。
- 在低實(shí)時(shí)性要求的場(chǎng)景(如工業(yè)自動(dòng)化監(jiān)控),可以適當(dāng)延長(zhǎng)恢復(fù)時(shí)間(如 3000 毫秒),以減少頻繁重啟對(duì)總線負(fù)載的影響。
3.2考慮系統(tǒng)負(fù)載
在高負(fù)載的 CAN 總線中,建議延長(zhǎng) restart-ms 時(shí)間(如 2000 毫秒或更長(zhǎng)),以避免頻繁重啟增加總線負(fù)載
3.3動(dòng)態(tài)調(diào)整與監(jiān)控
系統(tǒng)運(yùn)行過(guò)程中,通過(guò)監(jiān)控工具定期觀察錯(cuò)誤恢復(fù)情況,并根據(jù)實(shí)際運(yùn)行狀況動(dòng)態(tài)調(diào)整 restart-ms 參數(shù)。
四、實(shí)戰(zhàn)案例
全志SDK內(nèi)CAN自動(dòng)恢復(fù)機(jī)制默認(rèn)未開(kāi)啟。燒錄眺望提供固件或SDK默認(rèn)編譯固件。將兩個(gè) CAN 口連接(L-L,H-H)進(jìn)行回傳收發(fā)測(cè)試。
編寫一個(gè)簡(jiǎn)單腳本,awlink1每隔1秒通過(guò)cansend向awlink0發(fā)送一個(gè)CAN消息。
#!/bin/bash
ip link set awlink0 downip link set awlink0 type can bitrate 500000ip link set awlink0 up
ip link set awlink1 downip link set awlink1 type can bitrate 500000ip link set awlink1 up
candump -ta awlink0 >/dev/null 2>&1 &
while true; docansendawlink1123#1122334455667788>/dev/null2>&1 sleep 1done
4.1未開(kāi)啟自動(dòng)恢復(fù)機(jī)制
運(yùn)行腳本放到后臺(tái)去執(zhí)行后,這里選擇用杜邦線將其中一個(gè)CAN口的CANH/CANL 短接。CANH/CANL短路時(shí)會(huì)導(dǎo)致錯(cuò)誤從而進(jìn)入總線關(guān)閉(bus-off)狀態(tài)不再接收和發(fā)送數(shù)據(jù)。
用ip -details -statistics link show awlinkX 查詢CANX的狀態(tài)及情況。
注:根據(jù)cansend awlinkX選擇的不同,報(bào)錯(cuò)提示也會(huì)有所不同。這里腳本為cansend awlink1,所以報(bào)錯(cuò)為sunxi-awlink awlink@0x1 awlink1: bus-off。
4.2開(kāi)啟自動(dòng)恢復(fù)機(jī)制
修改全志SDK內(nèi)文件(TinaSDK為sunxi_awlink.c,Longan SDK為sunxi_can.c)開(kāi)啟自動(dòng)恢復(fù)機(jī)制,這里參數(shù)為500ms 后恢復(fù),用戶可根據(jù)實(shí)際需求調(diào)整。
priv->awlink.restart_ms = 500;
添加內(nèi)容如圖所示:
重復(fù)4.1測(cè)試過(guò)程,運(yùn)行腳本放到后臺(tái)去執(zhí)行后,將其中一個(gè)CAN口的CANH/CANL 短接。設(shè)備在檢測(cè)到進(jìn)入總線關(guān)閉(bus-off)狀態(tài)后,等待500ms后自動(dòng)嘗試重啟。
ip -details -statistics link showawlinkX 查詢到CAN數(shù)據(jù)繼續(xù)正常收發(fā)。證明自動(dòng)恢復(fù)機(jī)制開(kāi)啟成功!
五、總結(jié)
通過(guò)開(kāi)啟CAN自動(dòng)恢復(fù)機(jī)制和合理設(shè)置 restart-ms 參數(shù),CAN 設(shè)備能夠在總線錯(cuò)誤發(fā)生時(shí)自動(dòng)高效恢復(fù),從而保障系統(tǒng)的可靠性和穩(wěn)定性。
想了解更多相關(guān)技術(shù)知識(shí)或產(chǎn)品信息,請(qǐng)關(guān)注眺望電子公眾號(hào)并聯(lián)系我們,我們將竭誠(chéng)為您服務(wù)!
-
核心板
+關(guān)注
關(guān)注
5文章
1164瀏覽量
30900 -
can通訊
+關(guān)注
關(guān)注
1文章
31瀏覽量
10997 -
全志T113
+關(guān)注
關(guān)注
0文章
63瀏覽量
655
發(fā)布評(píng)論請(qǐng)先 登錄
米爾核心板純國(guó)產(chǎn)入門級(jí)性價(jià)比優(yōu)選T113

什么是CAN的BUS-OFF,如何恢復(fù)BUS-OFF?

STM32G4 CAN為什么無(wú)法檢測(cè)到bus-off狀態(tài)?
請(qǐng)問(wèn)NUC240 CAN bus遇到bus-off如何自動(dòng)恢復(fù)?
68元工業(yè)級(jí)雙核A7,全新T113核心板震撼上市!

米爾核心板全志T113純國(guó)產(chǎn)入門級(jí)性價(jià)比優(yōu)選

全志D1和t113對(duì)比
基于T113開(kāi)發(fā)板優(yōu)化啟動(dòng)速度方法

100%國(guó)產(chǎn)物料認(rèn)證,米爾入門級(jí)國(guó)產(chǎn)核心板全志T113-i方案

上新!米爾發(fā)布純國(guó)產(chǎn)入門級(jí)核心板全志T113-i方案

7折購(gòu)!米爾基于全志T113系列開(kāi)發(fā)板

評(píng)論