節點無論是作為發送器的還是作為接收器均可在監測報文期間檢測識別格式錯誤。由于CAN通信嚴格按照CAN規范定義的幀格式進行報文封裝傳輸,CAN控制器在監測總線電平位時明確知道當前位、后續位屬于幀格式中哪個位場,以及屬于位場的第幾個位,當接收到一個屬于幀格式固定形式的位時,如果實際電平值與幀格式定義不一致,則檢測到一個格式錯誤。
例外情況,對于接收器來說,幀結束最后的位被置于“不重要”狀態,監測到的幀結束最后一位期間的顯性位不被當作幀錯誤。
5、應答錯誤
應答錯誤是由作為發送器的節點檢測識別的。在發送報文時,只要在發送應答間隙(隱性)期間所監測到的位不為“顯性”,則發送器會檢測到一個應答錯誤。
注:
1、上述5種錯誤不會相互排斥,也就是說CAN幀中的某個錯誤有可能同屬一種以上的錯誤類型。
2、如上所述,作為發送器或接收器的不同角色時,直接能檢測到的錯誤類型是不一樣的。
節點如何響應錯誤?
CAN規范中規定每個CAN控制器中實現一個發送錯誤計數器和一個接收錯誤計數器。根據計數值不同,節點會處于不同的節點狀態,并根據計數值的變化進行狀態轉換,狀態轉換如圖3所示。
圖3 節點轉態轉換圖
當CAN控制器檢測到總線錯誤后通過發送錯誤標志指示錯誤。對于“錯誤主動”的節點,錯誤標志表現為“主動錯誤標志”,對于“錯誤被動”的節點,錯誤標志表現為“被動錯誤標志”。
無論檢測到位錯誤、填充錯誤、幀格式錯誤、還是應答錯誤,CAN控制器會在緊鄰的下一位發送錯誤標志。如果檢測到的錯誤類型是CRC錯誤,錯誤標志的發送開始于ACK定界符之后的位,即幀結尾。
綜上所述,CAN控制器對錯誤的響應可概括為:根據當前的節點狀態在位流序列相應的位置用錯誤標志標示錯誤,并按照CAN規范更新錯誤計數值,進行節點狀態轉換。并且是每成功監測到一次錯誤便進行一次響應。
注:
1、由于篇幅有限,關于錯誤計數的詳細規則、節點狀態轉換以及錯誤幀格式等細節均不在本文進行討論,請讀者查閱CAN協議規范。
2、上述分析可知道,錯誤響應的關鍵要素包括錯誤標志的類型和響應的位置。
錯誤管理機制的作用
錯誤管理機制的作用主要體現在對錯誤的響應過程。
作為發送器發送錯誤標志時,無論“主動錯誤”還是“被動錯誤”都必然包括6個連續同極性的位,使其他節點也識別到總線錯誤,進而使所有節點都能丟棄當前出錯的幀。
作為接收器發送錯誤標志時,“主動錯誤”標志使其他節點也識別到總線錯誤從而使所有節點(包括作為發送器的節點)都能丟棄當前出錯的幀;“被動錯誤”標志不影響總線通信從而使其他節點都能成功接收當前幀,處于“被動錯誤”狀態的節點屬于“不可信”狀態,其檢測到錯誤僅是自己丟棄當前幀,這也是錯誤管理的靈活性所在,即錯誤響應并不是嚴格在任何情況下都使所有節點丟棄同一幀報文。
綜上所述,錯誤管理機制可以使所有的節點同時接收或丟棄總線的同一幀報文,又可以使作為接收器的被動錯誤狀態的節點僅自己丟棄當前報文而不影響其他節點。因此,錯誤管理是實現CAN通信數據一致性的機制之一。
總結
CAN節點錯誤管理功能是由CAN節點組成中的CAN控制器負責的,對錯誤管理的工作過程可以從“錯誤識別”和“錯誤響應”兩個方面進行理解。錯誤管理是實現CAN通信數據的一致性的機制之一。