干貨分享丨淺談CAN總線的仲裁機制

原創(chuàng) 2020-03-04 16:22:00 CAN總線 CAN仲裁

隨著工業(yè)技術不斷發(fā)展,CAN總線已廣泛應用于車輛、航空、醫(yī)療等高安全要求領域。高頻發(fā)送CAN報文也成為安全測試的必要組成部分。

在信號正常的網(wǎng)絡上高負載率發(fā)送測試時,總線上偶然會出現(xiàn)許多意想不到的問題,例如出現(xiàn)大量錯誤報文、被測設備報文周期出現(xiàn)異常、甚至總線鎖死等,這個時候我們則需要考慮一下CAN網(wǎng)絡上的仲裁是否發(fā)生了異常。

01、什么是總線仲裁

系統(tǒng)中多個設備或模塊可能同時申請對總線的使用權,為避免產生總線沖突,需由總線仲裁機構合理地控制和管理系統(tǒng)中需要占用總線的申請者,在多個申請者同時提出總線請求時,以一定的優(yōu)先算法仲裁哪個應獲得對總線的使用權。只有獲得了總線控制權的設備,才能開始傳送數(shù)據(jù)。

 

 

02、CAN總線仲裁機制

報文的優(yōu)先級,是通過對 ID 的仲裁來確定的。CAN總線上有兩種電平狀態(tài),如果總線上同時出現(xiàn)顯性電平和隱性電平,總線的狀態(tài)會被置為顯性電平,CAN正是利用這個特性進行仲裁。

對于CAN來說,0為顯性,1為隱性。所以當對不同的ID號來進行仲裁時,ID號越小,優(yōu)先級越高。對于標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀的仲裁,如下圖黃色所示,標準幀中的RTR為0,SRR中為1,所以標準幀的優(yōu)先級更高。

 

 

當總線空閑時,有多個節(jié)點同時需要發(fā)送報文,那么每個節(jié)點的發(fā)送器將會對發(fā)送位的電平和被監(jiān)控的總線電平做比較。

如果電平相同,那么該節(jié)點可以繼續(xù)發(fā)送;如果發(fā)送的為一“隱性”電平(1),但是監(jiān)控到一“顯性”電平(0),那么該節(jié)點失去仲裁,必須退出發(fā)送狀態(tài),只到下一次總線空閑的時候在參與總線的仲裁競爭。

 

 

 

03、關于CAN總線仲裁的疑問

1)什么時候出現(xiàn)CAN仲裁?

當總線上的節(jié)點監(jiān)聽到總線空閑時,此時2個及以上的節(jié)點同時向總線上發(fā)送數(shù)據(jù),此時會觸發(fā)CAN總線仲裁機制,來避免數(shù)據(jù)發(fā)送錯誤。

2)那么總線仲裁丟失的節(jié)點,失去總線控制權后,立即轉為接收么?

根據(jù)標示符判斷幀的優(yōu)先級,優(yōu)先級高的繼續(xù)發(fā)送,低的退回,等待高優(yōu)先級幀發(fā)送完成,總線空閑后再進行發(fā)送。

需要注意的是在整個過程中兩個節(jié)點都在監(jiān)聽總線,也就是說接收是不受發(fā)送狀態(tài)限制的,也就沒有轉為接收這一說,所以也就不會出現(xiàn)數(shù)據(jù)不完整的幀,所以仲裁期間發(fā)送的位也是可以接收的。

(3)如何減少仲裁事件的發(fā)生?

CAN總線中的節(jié)點在仲裁失敗、發(fā)送失敗或者請求發(fā)送時總線被其他節(jié)點占用,一般會在下一次空閑到來時請求發(fā)送。總線負載率越高,遇到上面的情況概率也就越大,因此仲裁事件的發(fā)生常出現(xiàn)在高負載率的總線環(huán)境下。如果可以控制總線負載率在合理范圍內,可以大大減少仲裁事件的發(fā)生。

CAN總線采用載波監(jiān)測,CSMACA的通信模式。這種總線仲裁方式允許總線上的任何一個設各都有機會取得總線的控制權并向外發(fā)送數(shù)據(jù)。如果在同一時刻有2個或2個以上的設各要求發(fā)送數(shù)據(jù),就會產生總線沖突,CAN總線能夠實時地檢測這些沖突并對其進行仲裁,從而使具有高優(yōu)先級的數(shù)據(jù)不受任何損壞地傳輸。

相關產品 >

  • OKT507-C 開發(fā)板

    CPU: T507 工業(yè)級處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級T507開發(fā)板系列,飛凌OKT507-C開發(fā)板采用全志T507 四核工業(yè)級處理器 T507設計開發(fā),Cortex-A53架構,工業(yè)級寬溫,性能強,低功耗,是一款高性價比的工業(yè)級產品,提供豐富的開發(fā)設計資料,提供產品規(guī)格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領域。

    了解詳情
    OKT507-C 開發(fā)板
  • OKMX6ULL-C開發(fā)板

    40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設計開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應場景豐富。 了解詳情
    OKMX6ULL-C開發(fā)板

推薦閱讀 換一批 換一批