最近在學(xué)習CAN總線(xiàn),原先一直不太明白,若有A,B2個(gè)節點(diǎn)同一時(shí)刻一起向總線(xiàn)上發(fā)送數據,CAN總線(xiàn)是怎么仲裁的,來(lái)讓A,B其中一個(gè)節點(diǎn)退出,保證高優(yōu)先級的節點(diǎn)優(yōu)先傳輸,今天又在網(wǎng)上查了一些資料,總算搞明白了一些。在CAN總線(xiàn)上,若同一個(gè)時(shí)刻,既有節點(diǎn)向總線(xiàn)上發(fā)送隱形電平(1),也有節點(diǎn)發(fā)送顯性電平(0),那么此時(shí)總線(xiàn)上表現出來(lái)的為顯性(0)。
本文引用地址:http://dyxdggzs.com/article/201612/330371.htm當總線(xiàn)空閑時(shí),有多個(gè)節點(diǎn)同時(shí)需要發(fā)送報文,那么每個(gè)節點(diǎn)的發(fā)送器將會(huì )對發(fā)送位的電平和被監控的總線(xiàn)電平做比較,如果電平相同,那么該節點(diǎn)可以繼續發(fā)送,如果發(fā)送的為一“隱性”電平(1),但是監控到一“顯性”電平(0),那么該節點(diǎn)失去仲裁,必須退出發(fā)送狀態(tài),只到下一次總線(xiàn)空閑的時(shí)候在參與總線(xiàn)的仲裁競爭。
由以上也可以看出,當有多個(gè)節點(diǎn)同時(shí)爭奪總線(xiàn)的控制權,ID最小的那個(gè)節點(diǎn)將會(huì )勝出,所以在CAN總線(xiàn)上,節點(diǎn)的ID越小,優(yōu)先級越高。
先列舉2種特殊情況,根據仲裁來(lái)判斷優(yōu)先級。
1.若在同一時(shí)刻,標準格式的報文與擴展格式的報文同時(shí)搶占總線(xiàn),且它們的基礎ID相同,則發(fā)標準格式的報文節點(diǎn)就會(huì )PK成功。這是因為擴展格式在基本ID后,緊接著(zhù)是SRR位,與IDE位,且這兩位都是隱性位。而在標準格式中,這兩位分別對應的位為RTR與r1,其中RTR既可以為隱性位,也可以為顯性位,,但是r1必須為顯性位。由仲裁規則可以此時(shí)標準幀必定勝出。
2.同理,如果在同一時(shí)刻,具有相同格式,且具有相同ID的數據幀與遠程幀爭奪總線(xiàn)控制權,那么數據幀必定勝出。因為RTR顯性表示數據幀,隱性表示遠程幀。
今天又發(fā)現了一個(gè)問(wèn)題,前幾天也是在21IC的論壇上看見(jiàn)有這樣一條帖子,上面說(shuō)如果有2個(gè)節點(diǎn)具有相同的ID,同時(shí)向總線(xiàn)上發(fā)送不同的數據幀,那么這兩個(gè)節點(diǎn)將會(huì )繼續仲裁數據場(chǎng),只到有一方退出。開(kāi)始我也是這樣認為的,但是下午在看到CAN-bus規范V2.0上,關(guān)于應答場(chǎng)(ACK)部分的時(shí)候,想到了, 如果真是如上所述,就會(huì )出現一種比較奇怪的現象:
即如果總線(xiàn)上,只有A,B2個(gè)節點(diǎn),當前只有A節點(diǎn)發(fā)送報文,B節點(diǎn)再接收,按照以上的觀(guān)點(diǎn),那么將會(huì )發(fā)生什么呢?在應答場(chǎng)(ACK)應答間隙(ACK SLOT)的時(shí)候,A節點(diǎn)將會(huì )發(fā)送一個(gè)“隱性”位(1),但是同時(shí),B節點(diǎn)卻會(huì )發(fā)送一個(gè)“顯性位”(0)來(lái)以示應答(這里假設B節點(diǎn)正確接收到有效的報文),那么此時(shí)總線(xiàn)上表現出來(lái)就是“顯性”(0)了。但是A卻是發(fā)送的是“隱性”(1)啊,那么按照上述說(shuō)法,此時(shí)A節點(diǎn)就要退出總線(xiàn)了,也就不在發(fā)送應答界定符(ACK DELIMITER)(顯性1),了,此時(shí)總線(xiàn)上就會(huì )一直保持顯性(0)狀態(tài),只到位錯誤的發(fā)生。
因此,以上說(shuō)法是不成立的,其實(shí)由CAN-bus規范V2.0的P8頁(yè)上有如下語(yǔ)句:
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.
由以上紅色部分可知,參與逐位仲裁的位只有仲裁場(chǎng)?。?!
那么如果有2個(gè)節點(diǎn)具有相同的仲裁場(chǎng),但是他們的數據場(chǎng)不同,將會(huì )發(fā)生什么呢?我感覺(jué)可能在數據場(chǎng)之間可能會(huì )產(chǎn)生位錯誤(Bit Error),接收完CRC序列后,可能會(huì )發(fā)生一個(gè)應答錯誤,或者一個(gè)CRC錯誤。
評論