CAN怎樣處理錯誤
錯誤處理內(nèi)建在CAN協(xié)議中,對CAN系統(tǒng)的運行十分重要。錯誤處理的目標(biāo)是檢測CAN總線上出現(xiàn)的報文中的錯誤,從而傳送器可以重傳出錯的報文。總線上的每個CAN控制器都會嘗試檢測報文中的錯誤。如果發(fā)現(xiàn)錯誤,發(fā)現(xiàn)節(jié)點將傳送一個錯誤標(biāo)志,從而中斷總線通信。其它節(jié)點將檢測錯誤標(biāo)志導(dǎo)致的錯誤(如果它們尚未檢測到初始錯誤)并采取合適的措施(例如丟棄當(dāng)前報文)。
每個節(jié)點維護兩個錯誤計數(shù)器:傳送錯誤計數(shù)器和接收錯誤計數(shù)器。有幾個規(guī)則規(guī)定這些計數(shù)器怎樣增加和/或減少計數(shù)。總的來講,檢測到故障的傳送器增加其傳送錯誤計數(shù)器比偵聽節(jié)點增加其接收錯誤計數(shù)器要快。這是因為,很有可能是傳送器發(fā)生了故障!當(dāng)任何錯誤計數(shù)器增加到超過某個值時,節(jié)點將首先進入“錯誤被動”,也就是說,它在檢測到錯誤時不會積極地阻止總線通信,然后“離開總線”,這意味著節(jié)點根本不參與總線通信。
使用錯誤計數(shù)器,CAN節(jié)點不但可以檢測故障,而且可以執(zhí)行錯誤限制。
錯誤檢測機制
CAN協(xié)議定義了五種以上不同的方法來檢測錯誤。其中兩種工作在位層次,另外三種工作在報文層次。
位監(jiān)視
位填充
幀檢查
應(yīng)答檢查
循環(huán)冗余檢查
1. 位監(jiān)視
CAN總線上的每個傳送器都會監(jiān)視(也就是回讀)傳送的信號電平。如果真正讀到的位電平與傳送的位電平不同,會發(fā)出信號指示位錯誤(仲裁過程中不會發(fā)出位錯誤)。
2. 位填充
節(jié)點連續(xù)發(fā)送五個具有相同電平的位后,將在發(fā)送出去的位流中加上第六個相反電平的位。接收方將刪除這個額外的位。這樣做是為了避免總線上出現(xiàn)過度的直流電成分,但它同時也給予了接收方檢測錯誤的額外機會:如果總線上出現(xiàn)五個以上相同電平的連續(xù)位,會發(fā)出信號指示填充錯誤。
3. 幀檢查
CAN報文的一些部分具有固定的格式,也就是說,標(biāo)準(zhǔn)明確定義了何種電平和何時出現(xiàn)這種電平(CRC定界符、ACK定界符、幀結(jié)束以及間歇,但是間歇還有一些另外的特殊錯誤檢查規(guī)則)。如果一個CAN控制器在這些固定字段中的一個中檢測到無效值,將發(fā)出組成錯誤。
4. 應(yīng)答檢查
總線上正確接收報文的所有節(jié)點(不管這些節(jié)點是否對報文內(nèi)容“感興趣”)預(yù)期將在報文中所謂的應(yīng)答時隙中發(fā)送一個顯性電平。這是,發(fā)送方將發(fā)送一個隱性電平。如果發(fā)送方無法在應(yīng)答時隙中檢測到顯性電平,會發(fā)出應(yīng)答錯誤的信號。
5. 循環(huán)冗余檢查
每個報文都包含一個15位的循環(huán)冗余校驗和(CRC)。節(jié)點如果在報文中檢測到與自己計算所得不同的CRC,將發(fā)出CRC錯誤的信號。
錯誤限制機制
總線上的每個CAN控制器都將在每個報文中嘗試檢測以上列出的錯誤。如果發(fā)現(xiàn)錯誤,發(fā)現(xiàn)節(jié)點將發(fā)送一個錯誤標(biāo)志,從而停止總線通信。其它節(jié)點將檢測到由錯誤標(biāo)志引發(fā)的錯誤(如果它們尚未檢測到原始錯誤)并采取恰當(dāng)?shù)拇胧ㄒ簿褪莵G棄當(dāng)前報文)。
每個節(jié)點維護兩個錯誤計數(shù)器:傳送錯誤計數(shù)器和接收錯誤計數(shù)器。有幾個規(guī)則規(guī)定這些計數(shù)器怎樣增加和/或減少計數(shù)。總的來講,檢測到故障的傳送器增加其傳送錯誤計數(shù)器比偵聽節(jié)點增加其接收錯誤計數(shù)器要快。這是因為很有可能是傳送器發(fā)生了故障!
節(jié)點開始時處于主動錯誤模式。當(dāng)兩個錯誤計數(shù)器中的任何一個的計數(shù)超過127時,當(dāng)兩個錯誤計數(shù)器中的任何一個計數(shù)超過127時,節(jié)點將進入稱為被動錯誤的狀態(tài)。當(dāng)傳送錯誤計數(shù)器達到255以上時,節(jié)點將進入總線離線狀態(tài)。
1.主動錯誤節(jié)點將在檢測到錯誤時發(fā)送主動錯誤標(biāo)志。
2.被動錯誤節(jié)點將在檢測到錯誤時發(fā)送被動錯誤標(biāo)志。
3.總線離線節(jié)點不會在總線上傳送任何內(nèi)容。
增加和減少錯誤計數(shù)器的規(guī)則略顯復(fù)雜,但是原理比較簡單:傳送錯誤的步進為8個錯誤點數(shù),而接收錯誤的步進為1個錯誤點數(shù)。正確傳送和/或接收的報文會減小計數(shù)器值。
示例(稍加簡化):假設(shè)總線上的節(jié)點A運氣不好。不管什么時候A發(fā)送報文都發(fā)生失敗(由于種種原因)。每次失敗時,它的傳送錯誤計數(shù)器增加8并發(fā)送主動錯誤標(biāo)志。然后它將嘗試重傳報文,但是一直失敗。
當(dāng)傳送錯誤計數(shù)器超過127時(也就是在16次嘗試之后),節(jié)點A進入被動錯誤模式。區(qū)別在于,它現(xiàn)在將在總線上傳送被動錯誤標(biāo)志。被動錯誤標(biāo)志包含6個隱性位,不會影響其它的總線通信,所以其它節(jié)點不會偵聽到有關(guān)總線錯誤的反饋。但是,A繼續(xù)增加其傳送錯誤計數(shù)器。當(dāng)計數(shù)值超過255時,節(jié)點A最終放棄傳送并進入總線離線模式。
其它節(jié)點怎樣響應(yīng)節(jié)點A?對于A傳送的每個主動錯誤標(biāo)志,其它節(jié)點將為其接收錯誤計數(shù)器增加1。當(dāng)A進入總線離線狀態(tài)時,其它節(jié)點的接收錯誤計數(shù)器的計數(shù)大大低于錯誤被動的限制值(127)。每次正確收到一條報文,這個計數(shù)值將減1。但是,節(jié)點A將停留在總線離線狀態(tài)。
大部分CAN控制器將為兩種狀態(tài)提供狀態(tài)位(和相應(yīng)的中斷):
“錯誤警告” – 一個或兩個錯誤計數(shù)器的計數(shù)超過96
“總線離線”,如上所述。
一些控制器(但不是所有)還為被動錯誤狀態(tài)提供一個位。一些控制器還可以直接訪問錯誤計數(shù)器。
CAN控制器在發(fā)生錯誤時自動重傳報文的特性有時候會很煩人。市場上至少有一種控制器(飛利浦公司生產(chǎn)的SJA1000)允許對錯誤處理完全人工控制。
總線故障模式
ISO 11898標(biāo)準(zhǔn)列出了CAN總線線纜的幾種故障模式:
1.CAN_H中斷
2.CAN_L中斷
3.CAN_H短路到電池電壓
4.CAN_L短路到接地
5.CAN_H短路到接地
6.CAN_L短路到電池電壓
7.CAN_L短路到CAN_H線路
8.CAN_H和CAN_L在同一個位置中斷
9.丟失到終端網(wǎng)絡(luò)的連接
對于故障1-6和9,建議減小S/N比率保持總線繼續(xù)工作。對于故障8,建議保持產(chǎn)生的子系統(tǒng)繼續(xù)工作。對于故障7,可以選擇減小S/N比率繼續(xù)工作。
實踐中,使用82C250類型收發(fā)器的CAN系統(tǒng)無法在發(fā)生故障1-7時繼續(xù)工作,在發(fā)生故障8-9時可能無法繼續(xù)工作。
但是,存在諸如TJA1053等容錯能力強的驅(qū)動程序可以處理所有故障。通常,獲得這種容錯能力的代價是最大速度受到限制。對于TJA1053,最大速度是125kbps。
-
CAN
+關(guān)注
關(guān)注
57文章
2893瀏覽量
466778 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2284瀏覽量
96046 -
總線
+關(guān)注
關(guān)注
10文章
2952瀏覽量
89373
原文標(biāo)題:CAN總線錯誤處理介紹
文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
CAN控制器總線錯誤分析之CAN節(jié)點BusOff恢復(fù)過程分析與測試

一文讀懂Can總線錯誤處理
一文讀懂CAN總線錯誤處理

Rust語言中錯誤處理的機制
CAN總線錯誤分析方法 精選資料推薦
LabVIEW中的錯誤處理
虹科干貨 | 帶你全面了解“CAN總線錯誤”(三)——CAN節(jié)點狀態(tài)與錯誤計數(shù)器

虹科干貨 | 帶你全面了解“CAN總線錯誤”(四)——在實踐中生成和記錄CAN錯誤

認識CAN總線錯誤 CAN總線錯誤分析與解決

評論