新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > CAN總線中主動錯誤和被動錯誤的通俗解釋

CAN總線中主動錯誤和被動錯誤的通俗解釋

作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
首先建議把廣泛使用的“主動錯誤”和“被動錯誤”概念換成“主動報錯”和“被動報錯”。

1. 主動報錯站點

本文引用地址:http://m.butianyuan.cn/article/201612/330282.htm

只要檢查到錯誤,它立即“主動地”發(fā)出錯標識。所謂“出錯標識“,它本身就是一個“錯誤的位序列”(連續(xù)的6個顯性位,不滿足CAN協(xié)議的“最多5個連續(xù)的同性位”要求),目的是“主動地”告訴大家:即使你們沒有發(fā)現(xiàn)“剛才我已發(fā)現(xiàn)”的錯誤,現(xiàn)在我“以身作則”出錯啦!你們該看到這個錯誤了吧!

2. 被動報錯站點

如果檢查到錯誤,它只能干瞪眼“被動地”等別人(主動報錯站點)報錯,等待的時候它可不能去動總線,直到識別出由主動報錯站點發(fā)出 的“錯誤的位序列”,它才松了一口氣:有人正式報錯了!然后他就可以去競爭總線,該干啥干啥。

3. 出錯標識本身沒有什么優(yōu)先級的問題。

4. 對于通過競爭得到總線使用權(quán)的發(fā)送站點來說,它在一邊發(fā)一邊聽,有可能出現(xiàn)以下幾種情況:

(a) 它自己就發(fā)現(xiàn)錯誤,它就干脆嘩啦嘩啦,亂發(fā)一氣(連續(xù)的發(fā)六個同性位)。就象你小時候在幼兒園練習(xí)寫字,寫錯一個筆畫你自己就不耐煩了,在紙上嘩啦嘩啦亂畫一氣。目的就是告訴別人(別的站點):出錯了!

(b) 它自己沒有發(fā)現(xiàn)錯誤,但作為主動報錯的接收站點發(fā)現(xiàn)了錯誤(比如因為線路長,干擾大引起的錯誤),這個發(fā)現(xiàn)錯誤的站點就會立即嘩啦嘩啦往總線上亂發(fā)一氣(連續(xù)的發(fā)六個顯性位),就象你小時候在幼兒園練習(xí)寫字,寫錯一個筆畫你自己沒發(fā)現(xiàn),可老師(主動報錯站點)發(fā)現(xiàn)了就不耐煩了,在你的紙上嘩啦嘩啦亂畫一氣。目的就是告訴你自己以及告訴別人(發(fā)送站點和別的站點):出錯了!

(c) 它自己沒有發(fā)現(xiàn)錯誤,但作為被動報錯的接收站點發(fā)現(xiàn)了錯誤(比如因為線路長,干擾大引起的錯誤),這個發(fā)現(xiàn)錯誤的站點只能慢慢的等待,等待別的主動報錯站點報錯。如果別的主動報錯站點沒發(fā)現(xiàn)錯誤,那就繼續(xù)等,一直等到該發(fā)ACK的時候不給發(fā)送站發(fā)這個顯性的ACK信號,當然了其他站點可能會發(fā)這個ACK,那說明其他站點沒有發(fā)生錯誤,沒辦法,別人能通信,你不能!然后積攢到一定的時候,你就脫離總線吧!再繼續(xù)等待一段時間,脫胎換骨,重新回到總線上(這個時候錯誤記錄都清0了,你肯定是主動報錯站了)。就象你小時候在幼兒園練習(xí)寫字,寫錯一個筆畫你自己沒發(fā)現(xiàn),但被別的同學(xué)(被動報錯站點)發(fā)現(xiàn)了,但他不能說,嘿嘿(亂說話,老師要打屁股的),他就只能等,等老師來發(fā)現(xiàn)你的錯誤(等待主動報錯站點報錯),或者老師沒眼力,那就等到收作業(yè)的時候,不收你的(不發(fā)ACK),不過老師可能主動來收的(給你發(fā)ACK),那你可沒辦法,繼續(xù)等吧,等到你也當老師了(脫胎換骨了)...

devicenet協(xié)議中關(guān)于CAN 的出錯管理的規(guī)范

一、錯誤類型

CAN 提供了檢測下列錯誤類型的機制:

l. 位錯誤

當發(fā)送器將自己發(fā)送的電平與總線上的電平相比較,發(fā)現(xiàn)兩者不相等時產(chǎn)生。隱性位傳輸時, 顯形位的檢測在仲裁區(qū), ACK 時間段或被動故障標志傳輸期間不會導(dǎo)致位錯誤。

2. 應(yīng)答錯誤

當發(fā)送器確定信息沒有得到應(yīng)答時發(fā)生。在數(shù)據(jù)幀及遠程幀之間存在一個應(yīng)答時間段。該時間段內(nèi),所有接收的節(jié)點,無論是否是預(yù)定的接收者都必須對接收的信息作出應(yīng)答。

3. 填充錯誤

當節(jié)點檢測到 6 個相同電平值的連續(xù)位時發(fā)生。在正常工作情況下,當發(fā)送器檢測到它已經(jīng)發(fā)送了 5 個數(shù)值相同的連續(xù)位時,那么它將在第六位上插入一個取反值(稱之為位填充)。所有接收器在 CRC (循環(huán)冗余檢查)計算之前將除去填充位。 這樣,當節(jié)點檢測到 6 個連續(xù)的具有相同值的位時,即產(chǎn)生一個填充位錯誤。

4. CRC 錯誤

當 CRC (循環(huán)冗余檢查)值與發(fā)送器生成值不匹配時發(fā)生。每一幀包含一個由發(fā)送器初始化的循環(huán)冗余檢查 (CRC) 域。接收器計算出 CRC值,并與發(fā)送器產(chǎn)生的值相比較。如果兩個值不相等,即產(chǎn)生 CRC 錯誤。

5. 格式錯誤

當在一必須發(fā)送預(yù)定值的區(qū)內(nèi)檢測到非法位時發(fā)生。確定的預(yù)定義的位值必須在 CAN 幀內(nèi)的一個確定點發(fā)送,如果在這些區(qū)域中的一個內(nèi)檢測到非法位值,即產(chǎn)生格式錯誤。

二、節(jié)點錯誤狀態(tài)

為了盡量減小網(wǎng)絡(luò)上故障節(jié)點的負面影響,進而提供故障界定, CAN 定義了一個故障界定狀態(tài)機制。一個節(jié)點可能處于下列三種錯誤狀態(tài)之一:

1. 錯誤主動(Error Active)

當一個錯誤主動節(jié)點檢測到錯誤時,它將發(fā)送一個錯誤主動幀,該幀由 6 個連續(xù)的顯性位組成。這一發(fā)送將覆蓋其他任何同時生成的發(fā)送,并導(dǎo)致其他所有節(jié)點都檢測到一個填充錯誤,并依次放棄當前幀。

當處于錯誤主動狀態(tài)的節(jié)點檢測到一個發(fā)送問題時,它將發(fā)出一個活動錯誤幀,以避免所有其他節(jié)點接收信息包。無論檢測到錯誤的節(jié)點是否要接收這個數(shù)據(jù)都要執(zhí)行這個過程。

2. 錯誤被動 (Error Passive)

當一個錯誤被動節(jié)點檢測到錯誤時,它將發(fā)出一個錯誤被動幀。該幀由 6 個連續(xù)的隱性位組成,這個幀可能會被同時出現(xiàn)的其他發(fā)送所覆蓋,如果其它站點沒有檢測到這一錯誤將不會引起丟棄當前幀。

3. 離線 (Bus Off)

處于離線狀態(tài)下的節(jié)點不允許對總線有任何影響它在邏輯上與網(wǎng)絡(luò)斷開。

故障界定狀態(tài)機制中所含過程簡述如下:

1. 節(jié)點保持對發(fā)送和接收錯誤計數(shù)器的跟蹤;
2. 節(jié)點在開始錯誤主動狀態(tài)時錯誤計數(shù)器的值等于0。該狀態(tài)下的節(jié)點假設(shè)所有檢測到的錯誤非該節(jié)點所為;

3. 錯誤類型以及檢出錯誤的結(jié)點被賦予不同的計數(shù)值,這些計數(shù)值將根據(jù)是發(fā)送還是接收錯誤進行累加。有效的接收及發(fā)送使這些計數(shù)器遞減,直至最小值0;

4. 當這些計數(shù)器中的任何一個超出 CAN 定義的閾值時,該節(jié)點進入錯誤被動狀態(tài)。在此狀態(tài)下該節(jié)點將被認為是導(dǎo)致錯誤的原因;

5. 當發(fā)送錯誤計數(shù)值超出 CAN 定義的另一個閾值時,節(jié)點進入離線狀態(tài)。本規(guī)范定義了從離線到錯誤主動之間的狀態(tài)轉(zhuǎn)換機制;

6. 當錯誤被動的節(jié)點的發(fā)送及接收錯誤計數(shù)器值都減小至CAN 定義的閾值以下時,節(jié)點重新進入錯誤主動狀態(tài)。



關(guān)鍵詞: CAN總線主動錯誤被動錯

評論


技術(shù)專區(qū)

關(guān)閉