CAN總線是一種基于優(yōu)先級的串行通信網絡,,采用載波監(jiān)聽多路轉換沖突避免協(xié)議,,CAN總線中傳輸的數據幀的起始部分為數據的標識符,標識符可以區(qū)分消息又可以表示消息的優(yōu)先級(0 的優(yōu)先級最高),。 CAN總線為多主工作方式,,網絡上任意一節(jié)點均可在任意時刻主動向網絡上的其它節(jié)點同時發(fā)送消息。若兩個或兩個以上的節(jié)點同時開始傳送報文,,就會產生總線訪問沖突,,根據逐位仲裁原則,借助幀開始部分的標識符,,優(yōu)先級低的節(jié)點主動停止發(fā)送數據,,而優(yōu)先級高的節(jié)點繼續(xù)發(fā)送信息。在仲裁期間,,CAN總線作“與”運算,,每一個節(jié)點都對節(jié)點發(fā)送的電平與總線電平進行比較,,如果電平相同,則節(jié)點可以繼續(xù)發(fā)送,。如規(guī)定0 的優(yōu)先級高,,當某一個節(jié)點發(fā)送1而檢測到0 時,此節(jié)點知道有更高優(yōu)先級的信息在發(fā)送,,它就停止發(fā)送消息,,直到再一次檢測到網絡空閑。 CAN,,總線采用的是一種叫做“載波監(jiān)測,, 多主掌控/沖突避免”(CSMA/CA) 的通信模式。這種總線仲裁方式允許總線上的任何一個設各都有機會取得總線的控制權并向外發(fā)送數據,。如果在同一時刻有2 個或2 個以上的設各要求發(fā)送數據,,就會產生總線沖突,CAN總線能夠實時地檢測這些沖突并對其進行仲裁,,從而使具有高優(yōu)先級的數據不受任何損壞地傳輸,。 當總線處于空閑狀態(tài)時呈隱性電平,此時任何節(jié)點都可以向總線發(fā)送顯性電平作為幀的開始,。如果2個或2個以上同時發(fā)送就會產生競爭,。CAN總線解訣競爭的方法同以太網的CSMA/CD (Carrier Sense Multiple Access with Collislon Detection) 方法基本相似,如圖1所示,。此外,,CAN,總線做了改進并采用CSMA/CA (Carrier Sense Multiple Access withCollision Avoidance) 訪問總線,,按位對標識符進行仲裁,。各節(jié)點在向總線發(fā)送電平的同時,也對總線上的電平讀取,,并與自身發(fā)送的電平進行比較,,如果電平相同繼續(xù)發(fā)送下一位,,不同則停止發(fā)送退出總線競爭,。剩余的節(jié)點繼續(xù)上述過程,直到總線上只剩下1個節(jié)點發(fā)送的電平,, 總線競爭結束,,優(yōu)先級高的節(jié)點獲得總線的控制權。
CAN總線以報文為單位進行數據傳輸,,報文的優(yōu)先級結合在44 位標識符中(擴展幀 的標識符29 位),,具有最小二進制數的標識符的節(jié)點具有最高的優(yōu)先級。這種優(yōu)先級一旦 在系統(tǒng)設計時確定就不能隨意地更改,,總線讀取產生的沖突主要靠這些位仲裁解訣,。之所以 CAN總線不采用以太網使用的延時避免沖突,,主要是為了保證具有更高優(yōu)先級的節(jié)點能夠完整地實時傳輸,而且CSMA/CA 可以有效地避免沖突,。 如圖2所示,,節(jié)點A和節(jié)點B的標識符的第10、9,、8位電平相同,,因此兩個節(jié)點偵聽到的信息和它們發(fā)出的信息相同。第7 位節(jié)點B 發(fā)出一個“1”,,但從節(jié)點上接收到的消息卻是“O“,,說明有更高優(yōu)先級的節(jié)點占用總線發(fā)送消息。節(jié)點B會退出發(fā)送處于單純監(jiān)聽方式而不發(fā)送數據; 節(jié)點A成功發(fā)送仲裁位從而獲得總線的控制權,,繼而發(fā)送全部消息,。總線中信號持續(xù)跟蹤最后獲得總線控制權發(fā)出的報文,,本例中節(jié)點A 的報文將被跟蹤,。這種非破壞性位仲裁方法的優(yōu)點在于,在網絡最終確定哪個節(jié)點被傳送前,,報文的起始部分 已經在網絡中傳輸了,,因此具有高優(yōu)先級的節(jié)點的數據傳輸沒有任何延時。在獲得總線控制 權的節(jié)點發(fā)送數據過程中,,其他節(jié)點成為報文的接收節(jié)點,,并且不會在總線再次空閑之前發(fā)送報文。
CAN非破壞性逐位仲裁示意圖
圖3 為CAN總線上節(jié)點的電平邏輯,,總線上的節(jié)點電平對于總線電平而言是相與的關系,,只有當3 個節(jié)點的電壓都等于1(隱性電平),總線才會保持在vcc (隱性電平) 狀態(tài),。 只要有1個節(jié)點切換到0狀態(tài)(顯性電平),,總線就會被強制在顯性狀態(tài)(0)。這種避免總線沖突的仲裁方式能夠使具有高優(yōu)先級的消息沒有延時地占用總線傳輸,。
按位仲裁是CAN總線特有的仲裁方式,,顯性位覆蓋隱性位。優(yōu)先級高的報文根據此機 制搶占總線,,優(yōu)先級低的報文退出競爭,。正因為CAN 有這樣的仲裁機制,它難以抵抗高優(yōu) 先級攻擊和重發(fā)報文攻擊,。 舉例: 1〉因為CAN 的模塊在發(fā)送數據的時候,,也同時會對總線進行監(jiān)聽,假設兩個節(jié)點同時發(fā)送數據,,A節(jié)點發(fā)送的前3 個位是100,,B節(jié)點為101,,在前2 個位發(fā)送完畢的時候,兩個節(jié)點都會認為自己發(fā)送成功,,但是當發(fā)送到第三個位的時候,,B 節(jié)點會失去仲裁,因為0 的優(yōu)先級高于1的優(yōu)先級,,B 節(jié)點監(jiān)聽到總線上不是1,,因此失去仲裁,等待重新發(fā)送數據,。CAN 節(jié)點在仲裁丟失后,,根據CAN2.0B 協(xié)議規(guī)范,會自動重發(fā),。如果高優(yōu)先級的報文一直占用著總線,,則其他低優(yōu)先級的報文將無法獲得仲裁,但是會嘗試重新發(fā)送,。只有當高優(yōu)先級報文不再占用總線時,,低優(yōu)先級的報文才可能發(fā)送成功。否則低優(yōu)先級報文會出現(xiàn)“假餓死”狀態(tài),。(例如在CAN_ NM 的邏輯環(huán)網絡管理中,,利用T_ max,T_ type 等定時器來防止報文假餓死) |
|