can匯流排問題是一模擬較普遍的問題,為了方便can匯流排問題的排查,對can匯流排的錯誤處理機制進行總結。
錯誤幀
當節點檢測到錯誤時,節點會向匯流排上傳送錯誤幀,通知其他節點當前匯流排有錯誤。錯誤幀由錯誤標誌和錯誤界定符組成,如圖1所示。並且分為主動錯誤狀態下的錯誤幀和被動錯誤狀態下的錯誤幀。
圖1 錯誤幀
其中:主動錯誤狀態下錯誤幀的錯誤標誌為6位連續的顯性位,被動錯誤狀態下錯誤幀的錯誤標誌為6位連續的隱性位,錯誤界定符統一為8位連續的隱性位。錯誤檢測
can匯流排的錯誤型別包括位錯誤、填充錯誤、格式錯誤、ack錯誤、crc錯誤五種,錯誤的作用域如圖2所示。其中位錯誤、格式錯誤、ack錯誤屬於傳送節點的錯誤,填充錯誤、格式錯誤、crc錯誤屬於接收節點的錯誤。
圖2 錯誤的作用域
位錯誤
節點將傳送至匯流排上的電平與從匯流排回讀的電平進行比較,如果兩者不同,例如傳送的是隱性位,回讀到確是顯性位,則節點會檢測出位錯誤,如圖3所示。有以下三種例外情況不屬於位錯誤:
1.仲裁區,節點傳送隱性位,回讀為顯性位,這種情況表示仲裁失敗。
2.ack槽,節點傳送隱性位,回讀為顯性位,這種情況表示當前節點傳送的報文至少被乙個接收節點正確接收。
3.該節點傳送被動錯誤標誌位,節點向匯流排傳送被動錯誤標誌,回讀的不是六位連續的隱性位,這種情況是由於can匯流排是線與機制,被動錯誤標誌被其他節點傳送的顯性位給覆蓋,所以回讀不是6位連續的隱性位。
圖3 位錯誤
填充錯誤
在使用位填充法(can協議中規定,當相同極性的電平持續五位時,則新增乙個極性相反的位)進行編碼的資訊中,出現了6個連續相同的位電平,則檢測為填充錯誤。
ack錯誤
節點在傳送報文(資料幀或遙控幀)時,如果接收節點成功接收報文,那麼接收節點會在ack槽對應的時間段內向匯流排傳送乙個顯性位,告知傳送節點報文已正常接收,如圖4所示。當傳送節點在ack槽時間內沒有回讀到顯性位,則傳送節點檢測到ack錯誤。
圖4 ack互動
crc錯誤
傳送節點在傳送can報文(資料幀或遙控幀)時,會對幀起始、仲裁段、控制段、資料段(如圖5所示)進行crc計算,並將計算的結果放置在crc段。接收節點在接收報文時對相同的段執行相同的crc演算法,如果計算結果與crc段的資料不同,則接收節點檢測出crc錯誤。
圖5 crc作用域
格式錯誤
報文中,固定形式的位場含有1個或多個非法位,包括資料幀或遙控幀的crc界定符、ack界定符、eof、錯誤幀界定符、過載幀界定符,則節點檢測為格式錯誤。
錯誤通知
匯流排上節點的狀態機如圖6所示,節點狀態分為三種,分別是主動錯誤、被動錯誤、匯流排關閉。狀態跳轉依據的是tec(傳送錯誤計數器)和rec(接收錯誤計數器)的值,其中rec和tec都小於127時為主動錯誤狀態,該狀態下節點能正常進行通訊,當錯誤產生時,傳送6個連續顯性位組成的主動錯誤標誌;當rec或者tec大於127時,節點狀態跳轉至被動錯誤狀態,該狀態下節點能正常通訊;當錯誤產生時,傳送6個連續隱性位組成的被動錯誤標誌;當tec達到255時,節點進入busoff狀態,並且不能收發報文,匯流排上其他節點依然可以正常通訊。
圖6 節點狀態機
tec和rec計數器值的增減是根據表1規定進行的。
表1 錯誤規則
can匯流排報文是固定的嗎 CAN匯流排原理簡介
一 can匯流排原理 簡介 can controller area network 中文名稱為控制器區域網路,通常稱為can bus,即can匯流排。是由德國bosch 博世 公司研究開發的,現已成為iso國際標準化的序列通訊協議,是目前在國際上應用最廣泛的開放式現場匯流排之一。二 can匯流排原理...
CAN匯流排之CAN的報文格式
來自部落格 一 幀can協議的報文傳輸主要由下面的4種幀來實現 資料幀 從傳送端攜帶資料到接收端。遠端幀 匯流排單元發出遠端幀,請求傳送具有同一識別符的資料幀。錯誤幀 任何單元檢測到一匯流排錯誤就發出錯誤幀。過載幀 過載幀用以在先行的和後續的資料幀 或遠端幀 之間提供一附加的延時。同時幀間空間用來間...
CAN匯流排協議 CAN訊息之「報文型別」
can有四種不同的報文型別 資料幀 遠端幀 錯誤指示幀和超載幀。1 資料幀 can協議有兩種資料幀型別 標準can和擴充套件can 見上文 乙個資料幀中包括7個主要的域 幀起始域 標誌資料幀的開始,由乙個顯性位組成。仲裁域 內容由標示符和遠端傳輸請求位 rtr 組成,rtr用以表明此資訊幀是資料幀還...