干貨分享丨淺談CAN總線的仲裁機(jī)制
隨著工業(yè)技術(shù)不斷發(fā)展,CAN總線已廣泛應(yīng)用于車輛、航空、醫(yī)療等高安全要求領(lǐng)域。高頻發(fā)送CAN報(bào)文也成為安全測試的必要組成部分。
在信號正常的網(wǎng)絡(luò)上高負(fù)載率發(fā)送測試時(shí),總線上偶然會(huì)出現(xiàn)許多意想不到的問題,例如出現(xiàn)大量錯(cuò)誤報(bào)文、被測設(shè)備報(bào)文周期出現(xiàn)異常、甚至總線鎖死等,這個(gè)時(shí)候我們則需要考慮一下CAN網(wǎng)絡(luò)上的仲裁是否發(fā)生了異常。
01、什么是總線仲裁
系統(tǒng)中多個(gè)設(shè)備或模塊可能同時(shí)申請對總線的使用權(quán),為避免產(chǎn)生總線沖突,需由總線仲裁機(jī)構(gòu)合理地控制和管理系統(tǒng)中需要占用總線的申請者,在多個(gè)申請者同時(shí)提出總線請求時(shí),以一定的優(yōu)先算法仲裁哪個(gè)應(yīng)獲得對總線的使用權(quán)。只有獲得了總線控制權(quán)的設(shè)備,才能開始傳送數(shù)據(jù)。
02、CAN總線仲裁機(jī)制
報(bào)文的優(yōu)先級,是通過對 ID 的仲裁來確定的。CAN總線上有兩種電平狀態(tài),如果總線上同時(shí)出現(xiàn)顯性電平和隱性電平,總線的狀態(tài)會(huì)被置為顯性電平,CAN正是利用這個(gè)特性進(jìn)行仲裁。
對于CAN來說,0為顯性,1為隱性。所以當(dāng)對不同的ID號來進(jìn)行仲裁時(shí),ID號越小,優(yōu)先級越高。對于標(biāo)準(zhǔn)數(shù)據(jù)幀和擴(kuò)展數(shù)據(jù)幀的仲裁,如下圖黃色所示,標(biāo)準(zhǔn)幀中的RTR為0,SRR中為1,所以標(biāo)準(zhǔn)幀的優(yōu)先級更高。
當(dāng)總線空閑時(shí),有多個(gè)節(jié)點(diǎn)同時(shí)需要發(fā)送報(bào)文,那么每個(gè)節(jié)點(diǎn)的發(fā)送器將會(huì)對發(fā)送位的電平和被監(jiān)控的總線電平做比較。
如果電平相同,那么該節(jié)點(diǎn)可以繼續(xù)發(fā)送;如果發(fā)送的為一“隱性”電平(1),但是監(jiān)控到一“顯性”電平(0),那么該節(jié)點(diǎn)失去仲裁,必須退出發(fā)送狀態(tài),只到下一次總線空閑的時(shí)候在參與總線的仲裁競爭。
03、關(guān)于CAN總線仲裁的疑問
(1)什么時(shí)候出現(xiàn)CAN仲裁?
當(dāng)總線上的節(jié)點(diǎn)監(jiān)聽到總線空閑時(shí),此時(shí)2個(gè)及以上的節(jié)點(diǎn)同時(shí)向總線上發(fā)送數(shù)據(jù),此時(shí)會(huì)觸發(fā)CAN總線仲裁機(jī)制,來避免數(shù)據(jù)發(fā)送錯(cuò)誤。
(2)那么總線仲裁丟失的節(jié)點(diǎn),失去總線控制權(quán)后,立即轉(zhuǎn)為接收么?
根據(jù)標(biāo)示符判斷幀的優(yōu)先級,優(yōu)先級高的繼續(xù)發(fā)送,低的退回,等待高優(yōu)先級幀發(fā)送完成,總線空閑后再進(jìn)行發(fā)送。
需要注意的是在整個(gè)過程中兩個(gè)節(jié)點(diǎn)都在監(jiān)聽總線,也就是說接收是不受發(fā)送狀態(tài)限制的,也就沒有轉(zhuǎn)為接收這一說,所以也就不會(huì)出現(xiàn)數(shù)據(jù)不完整的幀,所以仲裁期間發(fā)送的位也是可以接收的。
(3)如何減少仲裁事件的發(fā)生?
CAN總線中的節(jié)點(diǎn)在仲裁失敗、發(fā)送失敗或者請求發(fā)送時(shí)總線被其他節(jié)點(diǎn)占用,一般會(huì)在下一次空閑到來時(shí)請求發(fā)送。總線負(fù)載率越高,遇到上面的情況概率也就越大,因此仲裁事件的發(fā)生常出現(xiàn)在高負(fù)載率的總線環(huán)境下。如果可以控制總線負(fù)載率在合理范圍內(nèi),可以大大減少仲裁事件的發(fā)生。
CAN總線采用“載波監(jiān)測,CSMA/CA的通信模式。這種總線仲裁方式允許總線上的任何一個(gè)設(shè)各都有機(jī)會(huì)取得總線的控制權(quán)并向外發(fā)送數(shù)據(jù)。如果在同一時(shí)刻有2個(gè)或2個(gè)以上的設(shè)各要求發(fā)送數(shù)據(jù),就會(huì)產(chǎn)生總線沖突,CAN總線能夠?qū)崟r(shí)地檢測這些沖突并對其進(jìn)行仲裁,從而使具有高優(yōu)先級的數(shù)據(jù)不受任何損壞地傳輸。
相關(guān)產(chǎn)品 >
-
OKT507-C 開發(fā)板
CPU: T507 工業(yè)級處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級T507開發(fā)板系列,飛凌OKT507-C開發(fā)板采用全志T507 四核工業(yè)級處理器 T507設(shè)計(jì)開發(fā),Cortex-A53架構(gòu),工業(yè)級寬溫,性能強(qiáng),低功耗,是一款高性價(jià)比的工業(yè)級產(chǎn)品,提供豐富的開發(fā)設(shè)計(jì)資料,提供產(chǎn)品規(guī)格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。
了解詳情 -
OKMX6ULL-C開發(fā)板
40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設(shè)計(jì)開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應(yīng)場景豐富。 了解詳情