CAN總線(xiàn)的仲裁
當總線(xiàn)處于空閑狀態(tài)時(shí)呈隱性電平,此時(shí)任何節點(diǎn)都可以向總線(xiàn)發(fā)送顯性電平作為幀的開(kāi)始。如果2個(gè)或2個(gè)以上同時(shí)發(fā)送就會(huì )產(chǎn)生競爭。CAN總線(xiàn)解決競爭的方法同以太網(wǎng)的CSMA/CD(Carrier Sense Multiple Access with Collislon Detection)方法基本相似,如圖1所示。此外,CAN總線(xiàn)做了改進(jìn)并采用CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)訪(fǎng)問(wèn)總線(xiàn),按位對標識符進(jìn)行仲裁。各節點(diǎn)在向總線(xiàn)發(fā)送電平的同時(shí),也對總線(xiàn)上的電平讀取,并與自身發(fā)送的電平進(jìn)行比較,如果電平相同繼續發(fā)送下一位,不同則停止發(fā)送退出總線(xiàn)競爭。剩余的節點(diǎn)繼續上述過(guò)程,直到總線(xiàn)上只剩下1個(gè)節點(diǎn)發(fā)送的電平,總線(xiàn)競爭結束,優(yōu)先級高的節點(diǎn)獲得總線(xiàn)的控制權。
圖1 Ethernet采用的CSMA/ CD總線(xiàn)訪(fǎng)問(wèn)過(guò)程
CAN總線(xiàn)以報文為單位進(jìn)行數據傳輸,報文的優(yōu)先級結合在44位標識符中(擴展幀的標識符29位),具有最小二進(jìn)制數的標識符的節點(diǎn)具有最高的優(yōu)先級。這種優(yōu)先級一旦在系統設計時(shí)確定就不能隨意地更改,總線(xiàn)讀取產(chǎn)生的沖突主要靠這些位仲裁解決。之所以CAN總線(xiàn)不采用以太網(wǎng)使用的延時(shí)避免沖突,主要是為了保證具有更高優(yōu)先級的節點(diǎn)能夠完整地實(shí)時(shí)傳輸,而且CSMA/CA可以有效地避免沖突。
如圖2所示,節點(diǎn)A和節點(diǎn)B的標識符的第lO、9、8位電平相同,因此兩個(gè)節點(diǎn)偵聽(tīng)到的信息和它們發(fā)出的信息相同。第7位節點(diǎn)B發(fā)出一個(gè)“1”,但從節點(diǎn)上接收到的消息卻是“0”,說(shuō)明有更高優(yōu)先級的節點(diǎn)占用總線(xiàn)發(fā)送消息。節點(diǎn)B會(huì )退出發(fā)送處于單純監聽(tīng)方式而不發(fā)送數據;節點(diǎn)A成功發(fā)送仲裁位從而獲得總線(xiàn)的控制權,繼而發(fā)送全部消息??偩€(xiàn)中的信號持續跟蹤最后獲得總線(xiàn)控制權發(fā)出的報文,本例中節點(diǎn)A的報文將被跟蹤。這種非破壞性位仲裁方法的優(yōu)點(diǎn)在于,在網(wǎng)絡(luò )最終確定哪個(gè)節點(diǎn)被傳送前,報文的起始部分已經(jīng)在網(wǎng)絡(luò )中傳輸了,因此具有高優(yōu)先級的節點(diǎn)的數據傳輸沒(méi)有任何延時(shí)。在獲得總線(xiàn)控制權的節點(diǎn)發(fā)送數據過(guò)程中,其他節點(diǎn)成為報文的接收節點(diǎn),并且不會(huì )在總線(xiàn)再次空閑之前發(fā)送報文。
圖2 CAN總線(xiàn)節點(diǎn)訪(fǎng)問(wèn)總線(xiàn)過(guò)程
圖3為CAN總線(xiàn)上節點(diǎn)的電平邏輯,總線(xiàn)上的節點(diǎn)電平對于總線(xiàn)電平而言是相與的關(guān)系,只有當3個(gè)節點(diǎn)的電壓都等于1(隱性電平),總線(xiàn)才會(huì )保持在ycc(隱性電平)狀態(tài)。只要有1個(gè)節點(diǎn)切換到0狀態(tài)(顯性電平),總線(xiàn)就會(huì )被強制在顯性狀態(tài)(0)。這種避免總線(xiàn)沖突的仲裁方式能夠使具有高優(yōu)先級的消息沒(méi)有延時(shí)地占用總線(xiàn)傳輸。
圖3 CAN總線(xiàn)上節點(diǎn)的電平邏輯
評論