CAN匯流排基礎(下)
CAN匯流排基礎(上)
CAN報文幀結構
在CAN匯流排上,報文是以「幀」來發送的,每一幀都包含以下幾個部分:
(1)幀起始
在匯流排空閑時,匯流排為隱性狀態。幀起始由單個顯性位構成,標誌著報文的開始,並在匯流排上起著同步作用。
(2)仲裁段
仲裁的主要是定義了報文的標識符,也俗稱ID。在CAN2.0A規範中,標識符為11位,而在CAN2.0B中變為了29位。這意味著在2.0B中可以存在更多不同類型的報文,但是也降低了匯流排的利用率。
(3)控制段
主要定義了數據域位元組的長度。通過數據長度碼,接收節點可以判斷報文數據是否完整。
(4)數據域
包含有0~8個位元組數據。
(5)CRC域
CRC又稱循環冗餘碼效驗(Cyclical Redundancy Check),是數據通信中常見的查錯方法。
(6)ACK域
用於接收節點的反饋應答。
(7)幀結束
由一串7個隱性位組成,表示報文幀的結束。
Ps:在CAN匯流排的開發中,核心的關注點就是CAN報文ID以及其數據域。根據客戶的要求,ECU接收自己感興趣的ID報文的同時,也向外發送別的ECU所需要的ID報文。一般不同整車廠在開發自己的CAN協議規範的同時,也會有自己的checksum機制,不滿足checksum的報文,數據將不會被ECU所接收。
仲裁機制
仲裁是匯流排應用中一個相當重要的概念,在CAN匯流排採用載波偵聽多路訪問/衝突檢測(CSMA/CD)技術。如果匯流排空閑(隱性位),有報文準備發送,那麼每一個節點都可以開始發送報文。報文以顯性位(報文幀開始位)開始,接著是標識符。如果多個節點同時開始發送報文,那麼使用「線與」仲裁機制(仲裁用邏輯「與」)來解決匯流排衝突,確定優先順序最高的報文,而不需要損失時間或數據(非破壞性仲裁)。仲裁機制使用標識符為判斷依據,不僅代表報文幀的內容,還代表報文幀發送的優先順序。二進位數越小的標識符,優先順序越高;反之亦然。
如上圖,ECU單元1和ECU單元2同時開始向匯流排發送數據,開始部分他們的數據格式是一樣的,故無法區分優先順序,直到T時刻,單元1輸出隱性電平,而單元2輸出顯性電平,此時單元1仲裁失利,立刻轉入接收狀態工作,不再與單元2競爭,而單元2則順利獲得匯流排使用權,繼續發送自己的數據。
CAN報文幀種類
CAN匯流排報文傳輸有以下4種不同的格式:
(1)數據幀:由發送節點發出,包含0 - 8個數據位元組。
(2)遠程幀:發送遠程幀向網路節點請求發送某一標識符的數據幀。
(3)錯誤幀:匯流排節點發現錯誤時,以錯誤幀的方式通知網路上的其他節點。
(4)過載幀:發送過載幀,表示當前節點不能處理後續的報文(如幀延遲等)。
Ps:為了保持匯流排的利用率,在車載匯流排上數據幀的報文一般均為8位元組。
CAN匯流排錯誤
CAN匯流排將錯誤分為臨時性錯誤和長期性錯誤。前者主要由外部因素引起,如匯流排上驅動電壓波形不規整、有尖峰或毛刺時,其數據傳輸性能會受到一定程度的短期干擾。長期性錯誤則主要由網路組建非正常狀況引起,比如接觸不良、線路故障、發送器或接收器失效等。CAN中每個具有數據通信能力的網路單元內部都集成有一個發送錯誤計數器和接受錯誤計數器,當該單元在數據發送階段出現一次錯誤時,其發送錯誤計數器自加8;在數據接收階段出現一次錯誤時,其接收錯誤計數器自加1。在相應計數器內容非0的情況下,網路單元每成功發送一幀,發送錯誤計數器自減1;每成功接收一幀,接收錯誤計數內容原本小於127時自減1,大於127時被置為119 - 127之間任意值。這樣,如果某個網路單元的錯誤計數在不斷增長,就說明該單元的數據通信在頻繁發生故障。當計數器內容超過一定閾值時,可以認為該故障是由長期性錯誤引起的。這種機制保證了當某一個節點出現故障的時候,不會造成匯流排長時間癱瘓。
推薦閱讀:
※什麼原因會導致發動機長期燃油修正值變成-2%至-5%左右?-2%左右會不會引起排放中NOx超標?
※奧迪b5或帕薩特b5 20v turbo發動機混合氣過稀故障?
※汽車行駛過程中,如果發動機電腦板(ECU)突然出現故障,車子會不會失控?