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