A simple intro to CAN errors
CAN 總線錯誤
在本系列文章中,我們將為您詳細介紹 CAN 總線錯誤的相關知識,包括 CAN 總線錯誤的基礎概念、CAN 總線錯誤的類型、CAN 錯誤幀和 CAN 節點錯誤狀態,並透過實際的應用測試生成並記錄 CAN 錯誤。
甚麼是 CAN 總線錯誤
控制器局域網路(Controller Area Network, CAN)是當今汽車和工業自動化系統的重要標準。可靠性是 CAN 總線協議的核心優勢之一,這使其成為安全關鍵應用的理想選擇。但值得注意的是,錯誤處理對 CAN 的穩健性來說至關重要。
CAN 總線錯誤的發生可能有多種原因,比如電纜故障、噪聲、不匹配的終端電阻、CAN 節點故障等。識別、分類和解決此類 CAN 錯誤是確保整個 CAN 系統持久性能的關鍵。錯誤處理可以識別和拒絕錯誤的訓息,使發送者能夠重新傳輸訊息。此外,該過程有助於識別和斷開持續傳輸錯誤訊息的 CAN 節點。
CAN 錯誤處理如何工作
錯誤處理是 CAN 標準和每個 CAN 控制器的內置部分。換句話說,每個 CAN 節點都以相同的方式處理故障識別和限制。下面我們做了一個簡單的說明性示例:
具體步驟示例
- CAN 節點 1 將消息傳輸到 CAN 總線-並讀取它發送的每一位,在這樣做的過程中,它發現發送顯性的一位被讀取為隱性
- 這是一個 “位錯誤”,節點 1 會引發一個活動錯誤標誌以通知其他節點,實際上,這意味著節點 1 將 6 個顯性位序列發送到總線上,反過來,6 個顯性位被其他節點視為 “位填充錯誤”
- 作為響應,節點 2 和 3 同時引發活動錯誤標誌,此引發的錯誤標誌序列構成 “CAN錯誤幀”的一部分
- CAN 節點 1 的發送器將其 “發送錯誤計數器” (TEC) 增加 8,CAN 節點 2 和 3 將其 “接收錯誤計數器” (REC) 增加 1,CAN 節點 1 自動重新傳輸訊息。結果節點 1 將其 TEC 減少 1,節點 2 和 3 將其 REC 減少 1
CAN 錯誤幀
在上述示例中,CAN 節點 “引發活動錯誤標誌”,從而創建 “錯誤幀” 以響應檢測到的 CAN 錯誤。為了理解它是如何工作的,讓我們首先看一個 “正常” 的 CAN 幀(沒有錯誤):
請注意,我們突出顯示了 CAN 幀中的 “位填充”。位填充是 CAN 標準的一個微妙但重要的部分。基本上它規定,每當 CAN 節點發送相同邏輯電平(顯性或隱性)的五個位時,它必須發送相反電平的一個位。接收 CAN 節點會自動刪除這個額外的位。此過程有助於確保網路的持續同步。
根據前面的示例,當 CAN 節點 1 在 CAN 消息傳輸期間檢測到錯誤時,它會立即傳輸相同邏輯電平的6位序列——也稱為引發活動錯誤標誌。
正如前文所述,這樣的序列違反了位填充規則——也稱為 “位填充錯誤”。此外,此錯誤對網路上的所有 CAN 節點都是可見的(與導致此錯誤標誌出現的 “位錯誤” 相反)。因此,錯誤標誌的增加可以被視為一種 “全局性” 錯誤發現的方式,確保通知每個 CAN 節點。
請注意,其他 CAN 節點會將活動錯誤標誌視為位填充錯誤。作為響應,它們還會引發一個活動錯誤標誌。正如我們後面將解釋的,區分錯誤標誌很重要。特別是,第一個錯誤標誌(來自 “發現” 節點)通常被稱為 “主要” 活動錯誤標誌,而後續 “反應” 節點的錯誤標誌被稱為 “次要” 活動錯誤標誌(s) 。
CAN 錯誤幀示例
示例1、6 位標誌錯誤
在這裡,所有 CAN 節點同時發現 CAN 報文中存在錯誤並同時發出錯誤標誌。結果是錯誤標誌全部重疊並且顯性位的總序列總共持續 6 位。在這種情況下,所有 CAN 節點都將自己視為 “發現” CAN 節點。
同時發現這種類型的錯誤幀在實踐中不太常見。但是,它可能是由於格式錯誤(例如 CRC 定界符是顯性而不是隱性)或 CAN 發送器在寫入 CRC 字段期間遇到位錯誤而發生的。
示例2、12 位錯誤標誌
在本示例中,CAN 節點 1 傳輸顯性位,但將其讀取為隱性-這意味著它發現了位錯誤。它立即發送 6 個顯性位的序列。其他節點僅在讀取完整的 6 位後才發現位填充錯誤,之後它們同時提高錯誤標誌,從而產生隨後的 6 個顯性位序列-即總共 12 個。
示例3、9位錯誤標誌
在本示例中,當 CAN 節點 1 發現位錯誤並開始發送 6 個顯性位時,它已經發送了 3 個顯性位序列。一旦通過主要活動錯誤標誌的一半,節點 2 和 3 識別位填充錯誤(由於 3 個初始顯性位後面跟著另外 3 個顯性位)並開始提高它們的錯誤標誌。結果是來自錯誤標誌的顯性位序列變為 9 位長。
上述引發錯誤標誌的邏輯反映在我們所謂的 “活動” CAN錯誤幀中。請特別注意各個節點引發的次要錯誤標誌如何相互重疊——以及主要和次要標誌也可能如何重疊。結果是來自引發錯誤標誌的主要位序列可能是 6 到 12 位長。
該序列始終以 8 個隱性位序列終止,標誌著錯誤幀的結束。實際上,活動錯誤幀可能在錯誤CAN 幀中的不同位置 “開始”,這取決於何時發現錯誤。然而,結果將是相同的:所有節點都丟棄錯誤的 CAN 幀,發送節點可以嘗試重新發送失敗的消息。
被動錯誤標誌
如果 CAN 節點已從其預設的 “活動” 狀態轉變為 “被動” 狀態,那麼它將只能引發所謂的 “被動錯誤標誌”。被動錯誤標誌是 6 個隱性位的序列。在這種情況下,區分由發送節點和接收節點引發的被動錯誤標誌是相關的。
示例4、發送器是被動錯誤
如圖所示,如果發送器(例如我們示例中的 CAN 節點 1)引發被動錯誤標誌(例如響應位錯誤),這將對應於 6 個隱性位的連續序列。這又被所有 CAN 節點檢測為位填充錯誤。假設其他CAN 節點仍處於其錯誤活動狀態,它們將引發 6 個顯性位的活動錯誤標誌。換言之,無源發送器仍然可以 “傳達” CAN幀是錯誤的。
示例5、接收器是主動錯誤
相反,如果接收器產生被動錯誤標誌,這實際上對總線上的所有其他 CAN 節點 “不可見”(因為任何顯性位都勝過隱性位序列)。實際上,這意味著錯誤被動接收器不再具有破壞其他 CAN 節點傳輸的幀的能力。
~關注我們獲得更多技術知識分享~
宏虹電子為客戶提供 CAN 卡、CAN 數據記錄儀、數據採集模塊、CAN 網關和轉換器等硬體設備,以及Kvaser CANLIB SDK 等軟體。深厚的技術積累和優秀的技術服務能力是眾多客戶選擇虹科的理由,歡迎隨時聯繫我們!