當前CAN總線通訊技術已經運用於各行各業之中,基本是每個總線設計工程師必學的一個通訊網絡。但什麼是CAN通訊中的錯誤幀,很多人還是處於只知其名,不知其所以然的狀態,也因此造成許多工程師在明知總線通訊出現問題卻束手無策的困擾。
一、錯誤標定
檢測到錯誤條件的站通過發送錯誤標誌指示錯誤。對於「錯誤主動」的節點,錯誤信息為「主動錯誤標誌」,對於「錯誤被動」的節點,錯誤信息為「被動錯誤標誌」。站檢測到無論是位錯誤、填充錯誤、形式錯誤,還是應答錯誤,這個站會在下一位時發出錯誤標誌信息。
只要檢測到的錯誤的條件是CRC錯誤,錯誤標誌的發送開始於ACK界定符之後的位(其他的錯誤條件除外)。如圖1所示:
圖1 CRC錯誤幀
二、故障界定
至於故障界定,單元的狀態可能為以下三種之一:「錯誤主動」、「錯誤被動」、「總線關閉」。
1、「錯誤主動」的單元可以正常地參與總線通訊並在錯誤被檢測到時發出主動錯誤標誌。
2、「錯誤被動」的單元不允許發送主動錯誤標誌。「錯誤被動」的單元參與總線通訊,在錯誤被檢測到時只發出被動錯誤標誌。而且,發送以後,「錯誤被動」單元將在初始化下一個發送之前處於等待狀態。(見「掛起發送」)
3、「總線關閉」的單元不允許在總線上有任何的影響(比如,關閉輸出驅動器)。
三個轉態的轉換方式如圖2所示:
圖2 CAN狀態轉換圖
在每一總線單元裡使用兩種計數以便故障界定: 發送錯誤計數、 接收錯誤計數。
這些計數按以下規則改變(注意,在給定的報文發送期間,可能要用到的規則不只一個):
1、當接收器檢測到一個錯誤,接收錯誤計數就加1。在發送主動錯誤標誌或過載標誌期間所檢測到的錯誤為位錯誤時,接收錯誤計數器值不加1。
2、當錯誤標誌發送以後,接收器檢測到的第一個位為「顯性」時,接收錯誤計數值加8。
3、當發送器發送一錯誤標誌時,發送錯誤計數器值加8。
4、發送主動錯誤標誌或過載標誌時,如果發送器檢測到位錯誤,則發送錯誤計數器值加8。
5、當發送主動錯誤標誌或過載標誌時,如果接受器檢測到位錯誤(位錯誤),則接收錯誤計數器值加8。
6、在發送主動錯誤標誌、被動錯誤標誌或過載標誌以後,任何節點最多容許7個連續的 「顯性」位。以下的情況,每一發送器將它們的發送錯誤計數值加8,及每一接收器的接收錯誤計數值加8:
7、報文成功傳送後(得到ACK及直到幀末尾結束沒有錯誤),發送錯誤計數器值減1,除非已經是0。
8、如果接收錯誤計數值介於1和127之間,在成功地接收到報文後(直到應答間隙接收沒有錯誤,及成功地發送了ACK位),接收錯誤計數器值減1。如果接收錯誤計數器值是0,則它保持0,如果大於127,則它會設置一個介於119到127之間值。
9、當發送錯誤計數器值等於或超過128時,或當接收錯誤計數器值等於或超過128時,節點為「錯誤被動」。讓節點成為「錯誤被動」的錯誤條件致使節點發出主動錯誤標誌。
10、當發送錯誤計數器值大於或等於256時,節點為「總線關閉」。
11、當發送錯誤計數器值和接收錯誤計數器值都小於或等於127時,「錯誤被動」的節點重新變為「錯誤主動」。
12、在總線監視到128次出現11個連續「隱性」位之後,「總線關閉」的節點可以變成「錯誤主動」(不再是「總線關閉」),它的錯誤計數值也被設置為0。
備註1:
一個大約大於96的錯誤計數值顯示總線被嚴重幹擾。最好能夠預先採取措施測試這個條件。
備註2:
起動/睡眠:如果起動期間內只有1個節點在線,以及如果這個節點發送一些報文,則將不會有應答,並檢測到錯誤和重複報文。由此,節點會變為「錯誤被動」,而不是「總線關閉」。
聯繫方式
銷售電話:400-888-4005撥1
技術支持電話:400-888-4005撥2
致遠電子 (ID: ZLG_zhiyuan )
還沒關注致遠電子?您將錯過每日泛著油光的乾貨!您將錯過一段顛覆洋品牌的歷史!!有時候你想證明給一萬個人看,到後來,你發現只得到了一個明白的人,那就夠了。你是我們期待已久的粥粉麼?我們的微信號:ZLG_zhiyuan。