<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          CAN總線中主動(dòng)錯(cuò)誤和被動(dòng)錯(cuò)誤的通俗解釋

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

          1. 主動(dòng)報(bào)錯(cuò)站點(diǎn)

          本文引用地址:http://www.ex-cimer.com/article/201612/330282.htm

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

          2. 被動(dòng)報(bào)錯(cuò)站點(diǎn)

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

          3. 出錯(cuò)標(biāo)識(shí)本身沒有什么優(yōu)先級(jí)的問題。

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

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

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

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

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

          一、錯(cuò)誤類型

          CAN 提供了檢測下列錯(cuò)誤類型的機(jī)制:

          l. 位錯(cuò)誤

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

          2. 應(yīng)答錯(cuò)誤

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

          3. 填充錯(cuò)誤

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

          4. CRC 錯(cuò)誤

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

          5. 格式錯(cuò)誤

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

          二、節(jié)點(diǎn)錯(cuò)誤狀態(tài)

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

          1. 錯(cuò)誤主動(dòng)(Error Active)

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

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

          2. 錯(cuò)誤被動(dòng) (Error Passive)

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

          3. 離線 (Bus Off)

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

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

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

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

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

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

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



          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();