新聞中心

CAN總線仲裁機(jī)制

作者: 時(shí)間:2016-12-15 來(lái)源:網(wǎng)絡(luò) 收藏
最近在學(xué)習(xí)CAN總線,原先一直不太明白,若有A,B2個(gè)節(jié)點(diǎn)同一時(shí)刻一起向總線上發(fā)送數(shù)據(jù),CAN總線是怎么仲裁的,來(lái)讓A,B其中一個(gè)節(jié)點(diǎn)退出,保證高優(yōu)先級(jí)的節(jié)點(diǎn)優(yōu)先傳輸,今天又在網(wǎng)上查了一些資料,總算搞明白了一些。

在CAN總線上,若同一個(gè)時(shí)刻,既有節(jié)點(diǎn)向總線上發(fā)送隱形電平(1),也有節(jié)點(diǎn)發(fā)送顯性電平(0),那么此時(shí)總線上表現(xiàn)出來(lái)的為顯性(0)。

本文引用地址:http://butianyuan.cn/article/201612/330371.htm

當(dāng)總線空閑時(shí),有多個(gè)節(jié)點(diǎn)同時(shí)需要發(fā)送報(bào)文,那么每個(gè)節(jié)點(diǎn)的發(fā)送器將會(huì)對(duì)發(fā)送位的電平和被監(jiān)控的總線電平做比較,如果電平相同,那么該節(jié)點(diǎn)可以繼續(xù)發(fā)送,如果發(fā)送的為一“隱性”電平(1),但是監(jiān)控到一“顯性”電平(0),那么該節(jié)點(diǎn)失去仲裁,必須退出發(fā)送狀態(tài),只到下一次總線空閑的時(shí)候在參與總線的仲裁競(jìng)爭(zhēng)。

由以上也可以看出,當(dāng)有多個(gè)節(jié)點(diǎn)同時(shí)爭(zhēng)奪總線的控制權(quán),ID最小的那個(gè)節(jié)點(diǎn)將會(huì)勝出,所以在CAN總線上,節(jié)點(diǎn)的ID越小,優(yōu)先級(jí)越高。

先列舉2種特殊情況,根據(jù)仲裁來(lái)判斷優(yōu)先級(jí)。

1.若在同一時(shí)刻,標(biāo)準(zhǔn)格式的報(bào)文與擴(kuò)展格式的報(bào)文同時(shí)搶占總線,且它們的基礎(chǔ)ID相同,則發(fā)標(biāo)準(zhǔn)格式的報(bào)文節(jié)點(diǎn)就會(huì)PK成功。這是因?yàn)閿U(kuò)展格式在基本ID后,緊接著是SRR位,與IDE位,且這兩位都是隱性位。而在標(biāo)準(zhǔn)格式中,這兩位分別對(duì)應(yīng)的位為RTR與r1,其中RTR既可以為隱性位,也可以為顯性位,,但是r1必須為顯性位。由仲裁規(guī)則可以此時(shí)標(biāo)準(zhǔn)幀必定勝出。

2.同理,如果在同一時(shí)刻,具有相同格式,且具有相同ID的數(shù)據(jù)幀與遠(yuǎn)程幀爭(zhēng)奪總線控制權(quán),那么數(shù)據(jù)幀必定勝出。因?yàn)镽TR顯性表示數(shù)據(jù)幀,隱性表示遠(yuǎn)程幀。

今天又發(fā)現(xiàn)了一個(gè)問(wèn)題,前幾天也是在21IC的論壇上看見(jiàn)有這樣一條帖子,上面說(shuō)如果有2個(gè)節(jié)點(diǎn)具有相同的ID,同時(shí)向總線上發(fā)送不同的數(shù)據(jù)幀,那么這兩個(gè)節(jié)點(diǎn)將會(huì)繼續(xù)仲裁數(shù)據(jù)場(chǎng),只到有一方退出。開(kāi)始我也是這樣認(rèn)為的,但是下午在看到CAN-bus規(guī)范V2.0上,關(guān)于應(yīng)答場(chǎng)(ACK)部分的時(shí)候,想到了, 如果真是如上所述,就會(huì)出現(xiàn)一種比較奇怪的現(xiàn)象:

即如果總線上,只有A,B2個(gè)節(jié)點(diǎn),當(dāng)前只有A節(jié)點(diǎn)發(fā)送報(bào)文,B節(jié)點(diǎn)再接收,按照以上的觀點(diǎn),那么將會(huì)發(fā)生什么呢?在應(yīng)答場(chǎng)(ACK)應(yīng)答間隙(ACK SLOT)的時(shí)候,A節(jié)點(diǎn)將會(huì)發(fā)送一個(gè)“隱性”位(1),但是同時(shí),B節(jié)點(diǎn)卻會(huì)發(fā)送一個(gè)“顯性位”(0)來(lái)以示應(yīng)答(這里假設(shè)B節(jié)點(diǎn)正確接收到有效的報(bào)文),那么此時(shí)總線上表現(xiàn)出來(lái)就是“顯性”(0)了。但是A卻是發(fā)送的是“隱性”(1)啊,那么按照上述說(shuō)法,此時(shí)A節(jié)點(diǎn)就要退出總線了,也就不在發(fā)送應(yīng)答界定符(ACK DELIMITER)(顯性1),了,此時(shí)總線上就會(huì)一直保持顯性(0)狀態(tài),只到位錯(cuò)誤的發(fā)生。

因此,以上說(shuō)法是不成立的,其實(shí)由CAN-bus規(guī)范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)?。。?/p>

那么如果有2個(gè)節(jié)點(diǎn)具有相同的仲裁場(chǎng),但是他們的數(shù)據(jù)場(chǎng)不同,將會(huì)發(fā)生什么呢?我感覺(jué)可能在數(shù)據(jù)場(chǎng)之間可能會(huì)產(chǎn)生位錯(cuò)誤(Bit Error),接收完CRC序列后,可能會(huì)發(fā)生一個(gè)應(yīng)答錯(cuò)誤,或者一個(gè)CRC錯(cuò)誤。



關(guān)鍵詞: CAN總線仲裁機(jī)

評(píng)論


技術(shù)專區(qū)

關(guān)閉