吃完飯後不刷牙:can匯流排基礎(上)zhuanlan.zhihu.com
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之間任意值。這樣,如果某個網路單元的錯誤計數在不斷增長,就說明該單元的資料通訊在頻繁發生故障。當計數器內容超過一定閾值時,可以認為該故障是由長期性錯誤引起的。這種機制保證了當某乙個節點出現故障的時候,不會造成匯流排長時間癱瘓。
乙個菜鳥汽車程式猿的成長之路~
can test 接收報文 一文搞懂CAN匯流排
最近在整理匯流排的基本知識,前幾天對lin匯流排進行了整理 lin匯流排。今天來整理一下can匯流排,首先回顧一下之前寫過的can相關的文章。can匯流排錯誤處理機制 基於can的刷寫流程 can訊息中的motorola和intel can一致性測試是什麼 can歷史 1983年,bosch開始著手...
can test 接收報文 獲取CAN報文並解析
一 獲得can報文的過程 準備軟硬體環境,硬體周立功can卡,軟體使用zlgcantest,安裝在電腦上 通過can卡連線整車can或者除錯埠,通過軟體互動介面獲取can報文。二 can2.0b報文基本格式 接收到的報文,是一串十六進製制的字元,而報文格式定義和位數是按照二進位制定義的。29位擴充套...
CAN匯流排之CAN的報文格式
來自部落格 一 幀can協議的報文傳輸主要由下面的4種幀來實現 資料幀 從傳送端攜帶資料到接收端。遠端幀 匯流排單元發出遠端幀,請求傳送具有同一識別符的資料幀。錯誤幀 任何單元檢測到一匯流排錯誤就發出錯誤幀。過載幀 過載幀用以在先行的和後續的資料幀 或遠端幀 之間提供一附加的延時。同時幀間空間用來間...