久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > CAN總線仲裁機制

CAN總線仲裁機制

作者: 時間:2016-12-15 來源:網絡 收藏
最近在學習CAN總線,原先一直不太明白,若有A,B2個節點同一時刻一起向總線上發送數據,CAN總線是怎么仲裁的,來讓A,B其中一個節點退出,保證高優先級的節點優先傳輸,今天又在網上查了一些資料,總算搞明白了一些。

在CAN總線上,若同一個時刻,既有節點向總線上發送隱形電平(1),也有節點發送顯性電平(0),那么此時總線上表現出來的為顯性(0)。

本文引用地址:http://cqxgywz.com/article/201612/330371.htm

當總線空閑時,有多個節點同時需要發送報文,那么每個節點的發送器將會對發送位的電平和被監控的總線電平做比較,如果電平相同,那么該節點可以繼續發送,如果發送的為一“隱性”電平(1),但是監控到一“顯性”電平(0),那么該節點失去仲裁,必須退出發送狀態,只到下一次總線空閑的時候在參與總線的仲裁競爭。

由以上也可以看出,當有多個節點同時爭奪總線的控制權,ID最小的那個節點將會勝出,所以在CAN總線上,節點的ID越小,優先級越高。

先列舉2種特殊情況,根據仲裁來判斷優先級。

1.若在同一時刻,標準格式的報文與擴展格式的報文同時搶占總線,且它們的基礎ID相同,則發標準格式的報文節點就會PK成功。這是因為擴展格式在基本ID后,緊接著是SRR位,與IDE位,且這兩位都是隱性位。而在標準格式中,這兩位分別對應的位為RTR與r1,其中RTR既可以為隱性位,也可以為顯性位,,但是r1必須為顯性位。由仲裁規則可以此時標準幀必定勝出。

2.同理,如果在同一時刻,具有相同格式,且具有相同ID的數據幀與遠程幀爭奪總線控制權,那么數據幀必定勝出。因為RTR顯性表示數據幀,隱性表示遠程幀。

今天又發現了一個問題,前幾天也是在21IC的論壇上看見有這樣一條帖子,上面說如果有2個節點具有相同的ID,同時向總線上發送不同的數據幀,那么這兩個節點將會繼續仲裁數據場,只到有一方退出。開始我也是這樣認為的,但是下午在看到CAN-bus規范V2.0上,關于應答場(ACK)部分的時候,想到了, 如果真是如上所述,就會出現一種比較奇怪的現象:

即如果總線上,只有A,B2個節點,當前只有A節點發送報文,B節點再接收,按照以上的觀點,那么將會發生什么呢?在應答場(ACK)應答間隙(ACK SLOT)的時候,A節點將會發送一個“隱性”位(1),但是同時,B節點卻會發送一個“顯性位”(0)來以示應答(這里假設B節點正確接收到有效的報文),那么此時總線上表現出來就是“顯性”(0)了。但是A卻是發送的是“隱性”(1)啊,那么按照上述說法,此時A節點就要退出總線了,也就不在發送應答界定符(ACK DELIMITER)(顯性1),了,此時總線上就會一直保持顯性(0)狀態,只到位錯誤的發生。

因此,以上說法是不成立的,其實由CAN-bus規范V2.0的P8頁上有如下語句:

Arbitration
Whenever the bus is free, any unit may start to transmit a message. If 2 or more units
start transmitting messages at the same time,the bus access conflict is resolved by
bitwise arbitration using the IDENTIFIER. The mechanism of arbitration guarantees that
neither information nor time is lost. If a DATA and a REMOTE with the
same IDENTIFIER are initiated at the same time, the DATA prevails over the
REMOTE . During arbitration every transmitter compares the level of the bit
transmitted with the level that is monitored on the bus. If these levels are equal the unit
may continue to send. When a ’recessive’ level is sent and a ’dominant’ level is
monitored (see Bus Values), the unit has lost arbitration and must withdraw without
sending one more bit.

由以上紅色部分可知,參與逐位仲裁的位只有仲裁場!!!

那么如果有2個節點具有相同的仲裁場,但是他們的數據場不同,將會發生什么呢?我感覺可能在數據場之間可能會產生位錯誤(Bit Error),接收完CRC序列后,可能會發生一個應答錯誤,或者一個CRC錯誤。



關鍵詞: CAN總線仲裁機

評論


技術專區

關閉