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