
來源:車端初光
1 CAN總線錯誤類型
(資料圖)
為了防止故障節點干擾甚至阻塞整個CAN網絡系統,CAN協議實現了復雜的故障限制機制。為了保證通信的正常,CAN 2.0 總線協議總線中各節點需要采取以下措施進行錯誤檢測:
監視(對發送位的電平與被監控的總線電平進行比較)
循環冗余檢查
位填充
報文格式檢查
CAN協議具有檢測錯誤的能力。但是如果發生錯誤,它無法糾正錯誤。因此,如果發生錯誤,檢測到的節點或ECU將向CAN網絡發送錯誤幀。與之相對應的CAN 2.0 總線協議定義參與通信的CAN節點錯誤類型如下:
位錯誤(Bit Error) 發送的位值和總線監視的位值不相符合時,檢測到一個位錯誤(除仲裁場、應答場外);
填充錯誤(Stuff Error)
如果在使用位填充編碼的位流中,出現了第六個連續相同的位電平,將檢測到一個位填充錯誤;
形式錯誤 (Form Error)
當一個固定形式的位場含有一個或多個非法位時,將檢測到一個形式錯誤;
應答錯誤 (Acknowledgment Error)
在應答間隙(ACK SLOT)所監視的位不為“顯性”,則會檢測到一個應答錯誤;
CRC 錯誤(CRC Error)
如果接收器的CRC結果和發送器的CRC結果不同,將檢測到一個CRC錯誤。
2 CAN總線錯誤處理機制
每個CAN控制器都有自己的CAN總線錯誤處理程序。為了處理這個問題,每個CAN控制器有兩個計數器寄存器(0 – 255),即:發送錯誤計數器 (TEC) 和接收錯誤計數器 (REC) 。如果5個錯誤中發生任何一個發生錯誤,它將根據錯誤類型增加 TEC 或 REC。Tips:一個特例:如果CAN總線上只有一個節點,該節點發送數據幀后得不到響應(ACK),其發送計數器TEC最大只能計到128,即該節點只能進入錯誤被動狀態,而不會進入總線關閉狀態,這就是為什么當您沒有將任何設備連接到網絡時,您的ECU將持續發送幀,但不會檢測到總線關閉并保持錯誤被動狀態。
錯誤計數器的遞增和遞減操作是不對稱的。在成功傳輸或接收消息時,如果相應的錯誤計數器未為零,則相應的錯誤計數器將遞減。在傳輸或接收錯誤的情況下,計數器將遞增,但遞增值大于遞減值。具體錯誤限制管理規則如下:
a) 當接收器檢測到錯誤時,接收錯誤計數器REC+ 1。例外:發送活動錯誤標志、過載標志期間的位錯誤。
b) 當接收器在發送錯誤標志后檢測到顯性位作為第一位時,接收錯誤計數器REC+8。
c) 當發送器發送錯誤標志時,發送錯誤計數器REC+8。
1) 例外 1:如果發送器是錯誤被動狀態,并且由于未檢測到顯性 ACK 而檢測到 ACK 錯誤,并且在發送其被動錯誤標志時未檢測到顯性位。 2) 例外 2:如果發送方因為仲裁期間發生填充錯誤而發送錯誤標志,因此,填充位應該是隱性的,并且已作為隱性發送但被監視為主導的。 在這兩種例外情況下,傳輸錯誤計數器保持不變。
d) 如果發送器在發送活動錯誤標志或過載標志時檢測到位錯誤,則發送錯誤計數器TEC+8。
e) 如果接收器在發送活動錯誤標志或過載標志時檢測到位錯誤,則接收錯誤計數器TEC+8。
f) 在發送活動錯誤標志、被動錯誤標志或過載標志后,任何節點都應容忍最多7 個連續顯性位。在檢測到第14個連續顯性位后(在活動錯誤標志或過載標志的情況下)或在被動錯誤標志后檢測到第 8 個連續顯性位之后,并且每當在出現額外的8個連續顯性位序列之后,REC和TEC都需要+8。
g) 成功傳輸一個幀后(收到 ACK 并且沒有檢測到錯誤,直到 EOF 被檢測到完成),傳輸錯誤計數器應減1,直到為0。
h) 成功接收一個幀后(接收到 ACK 時隙沒有錯誤并且成功ACK 位的發送),接收錯誤計數器應減 1,如果它介于1和127。如果接收錯誤計數器為0,則應保持為零 (0),如果它大于127,則應將其設置為介于119和127。
3 什么是CAN協議中的故障限制
故障限制是一種檢查機制,可以區分短時干擾(例如電纜的噪聲耦合到傳輸介質)和永久性故障(例如,節點發生故障并干擾總線). CAN通信節點的狀態分為暫時錯誤(Error active和Error Passive)和永久性故障(Bus Off);
永久性故障節點自動脫離總線,防止網絡鎖定;Bus Off恢復需要滿足于以下兩個條件:
在bus off發生后,總線上已經檢測到了128次11個連續的隱性位(邏輯"1");
用戶程序請求恢復,通常MCU中的CAN控制器都可以支持自動恢復和手動恢復兩種方式。CAN總線的bus off恢復需要滿足整車的網絡管理規范。
處于暫時錯誤(Error active和Error Passive)狀態的CAN 2.0總線節點,其狀態可以根據其發送錯誤計數器(TEC)和接收錯誤計數器(REC)值的變化,自動切換,而進入永久性故障(Bus Off))狀態的節點,必須進入重新初始化才能恢復:
因此,節點可能處于以下三種可能的錯誤狀態之一:
錯誤活動狀態。錯誤被動狀態。錯誤總線關閉狀態。
1. CAN協議中的錯誤主動狀態
當CAN設備通電時,它以錯誤活動狀態啟動。處于錯誤活動狀態的設備通常可以參與CAN通信。它還會在檢測到錯誤時傳輸主動錯誤標志。此主動錯誤標志(表示主導 0 位序列)會導致當前幀傳輸中止,從而導致同一消息的后續重新傳輸。
其中兩個錯誤計數器(TEC 和 REC)在錯誤活動狀態下都小于 128。它完全參與總線通信,并通過傳輸活動錯誤幀來發出錯誤信號。這包括 6 個主導位的序列,后跟 8 個隱性位,所有其他節點都使用適當的錯誤標志進行響應,以響應違反位填充規則。
2. CAN協議中的錯誤被動狀態
如果發送錯誤計數器或接收錯誤計數器大于127,CAN設備將進入錯誤被動狀態。處于錯誤被動狀態的設備仍然可以參與通信,但在檢測到任何錯誤時會傳輸被動錯誤標志。此被動錯誤標志(隱性 1 位序列)通常不會中止其他設備(如錯誤主動幀)傳輸的幀。
此外,錯誤被動節點必須在消息傳輸后等待額外的時間(Suspend Transmission Field,ITM后的 8 個隱性位),然后才能啟動新數據。
3. CAN協議中的總線關閉狀態
如果CAN控制器的發送誤差計數器超過255,則進入總線關閉狀態。它與總線斷開連接(使用內部邏輯),不再參與總線活動。簡單地說,我們可以說物理上與總線連接和邏輯上斷開連接。為了重新連接協議控制器,必須執行Bus Off recovery sequence。這通常涉及主機系統對CAN控制器的重新初始化和配置,之后它將等待(128 * 11)隱性位時間,然后再開始通信。
審核編輯:湯梓紅
標簽: