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

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > CAN消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)變?yōu)殡x線狀態(tài)的故障

          CAN消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)變?yōu)殡x線狀態(tài)的故障

          作者: 時(shí)間:2009-06-30 來源:網(wǎng)絡(luò) 收藏

          摘要 處于報(bào)錯(cuò)在一次本地錯(cuò)之后,由于標(biāo)準(zhǔn)考慮不周,會產(chǎn)生該與其他在幀啟停上的不同步,造成錯(cuò)誤的不斷延續(xù),在接收節(jié)點(diǎn)中產(chǎn)生等同離線。本文討論了在節(jié)點(diǎn)中產(chǎn)生真正離線的原因,并提出了解決方案。
          關(guān)鍵詞 報(bào)錯(cuò)幀分界符 優(yōu)先級逆轉(zhuǎn) 離線

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


          是應(yīng)用非常廣泛的現(xiàn)場總線。它已經(jīng)被大部分汽車廠商用作車內(nèi)控制器交換信息的通信干線,是分布式嵌入式系統(tǒng)的關(guān)鍵部分。但是它有一種以前未討論過的與安全有關(guān)的,當(dāng)某一處于報(bào)錯(cuò)的節(jié)點(diǎn)由于干擾而產(chǎn)生一個(gè)本地錯(cuò)后,因標(biāo)準(zhǔn)考慮欠周,該節(jié)點(diǎn)會與其他節(jié)點(diǎn)幀啟停失去同步,在其他掛起待發(fā)的消息時(shí)不斷出錯(cuò),形成等同于離線的狀態(tài),無法提供服務(wù),從而危及安全。本文討論處于報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn),由于同樣的原因失去同步后的演變過程。這里不同的是,因?yàn)闃?biāo)準(zhǔn)中的另一個(gè)規(guī)定,它可能經(jīng)歷一個(gè)真正的離線狀態(tài)。


          1 CAN標(biāo)準(zhǔn)的安全漏洞
          在討論該問題時(shí)假定讀者對CAN的標(biāo)準(zhǔn)已有充分的了解,由于中文譯法的差別,本文采用的術(shù)語可能有所不同,相信不會影響讀者的理解。在Bosch CAN2.O規(guī)范3.1.3款中說:“為了使報(bào)錯(cuò)幀正確結(jié)束,消極報(bào)錯(cuò)節(jié)點(diǎn)可能需要處于空閑狀態(tài)至少有3bit時(shí)間(如果消極報(bào)錯(cuò)接收節(jié)點(diǎn)發(fā)生本地錯(cuò)),因此總線不應(yīng)滿負(fù)荷運(yùn)行。”――這是引起應(yīng)用出的原因。因?yàn)楣?jié)點(diǎn)問并無時(shí)間同步,即便總線有空閑時(shí)間,也不能保證像上述要求那樣的分布。掛起待發(fā)的消息將在服務(wù)間隔(intermission,圖中縮寫為I.M.)后立即發(fā)送。這在規(guī)范中也有規(guī)定:“在另一條消息發(fā)送過程中掛起待發(fā)的消息在服務(wù)間隔后的第一位啟動(發(fā)送)”。ISO11898標(biāo)準(zhǔn)沒有提到3位空閑問題,但是CAN一致性測試標(biāo)準(zhǔn)ISO16845的具體條文會有這種要求(雖然該空閑要求還是不充分的)。CAN規(guī)定處于消極報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn)在發(fā)現(xiàn)錯(cuò)之后發(fā)出6位隱位的消極報(bào)錯(cuò)標(biāo)志(Passive error flag),如讀回6個(gè)連續(xù)的相同位時(shí),就確認(rèn)報(bào)錯(cuò)標(biāo)志發(fā)完,如沒發(fā)現(xiàn)6個(gè)連續(xù)的相同位,就繼續(xù)發(fā)隱位,直到得到確認(rèn),然后開始消極報(bào)錯(cuò)幀分界符的發(fā)送。分界符從發(fā)出隱位讀回也是隱位時(shí)開始計(jì)算,總共為8個(gè)連續(xù)的隱位。在CAN一致性測試標(biāo)準(zhǔn)ISO16845的7.5.6款與8.5.13款中,規(guī)定了接收節(jié)點(diǎn)與發(fā)送節(jié)點(diǎn)在發(fā)消極報(bào)錯(cuò)幀分界符時(shí)的格式錯(cuò)檢查辦法。它規(guī)定,在消極報(bào)錯(cuò)幀分界符開始后的8位中不得有顯位;如有顯位,就視為出錯(cuò),開始新的報(bào)錯(cuò)幀。
          如果一個(gè)處于消極報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn)發(fā)現(xiàn)一個(gè)本地錯(cuò)(即有一種誤判或漏判),由于其他節(jié)點(diǎn)不發(fā)主動報(bào)錯(cuò)幀,那么它發(fā)的消極報(bào)錯(cuò)幀標(biāo)志就不會及時(shí)得到確認(rèn),往往要到圖1所示的數(shù)據(jù)幀或遠(yuǎn)程幀的EOF第5位才會得到確認(rèn);而它的消極報(bào)錯(cuò)幀分界符將延續(xù)到幀的服務(wù)間隔之后,它就和其他節(jié)點(diǎn)的幀啟停失去了同步。其他節(jié)點(diǎn)開始新幀的SOF將被它視為格式錯(cuò),而開始發(fā)新的消極報(bào)錯(cuò)幀。當(dāng)其他節(jié)點(diǎn)有掛起待發(fā)的幀不斷發(fā)送時(shí),這個(gè)處于消極報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn)一直處于不斷出錯(cuò)的狀態(tài),不能發(fā)送也不能接收,即等同于離線狀態(tài)。
          這種源自標(biāo)準(zhǔn)考慮不周的會使CAN的優(yōu)先級逆轉(zhuǎn)(在處于消極報(bào)錯(cuò)狀態(tài)的節(jié)點(diǎn)中的高優(yōu)先級消息無法發(fā)送);同時(shí),基于優(yōu)先級進(jìn)行的調(diào)度分析失靈。以此為算法設(shè)計(jì)得到的消息最壞送達(dá)時(shí)間將是不可靠的,車的安全會受影響。在參考文獻(xiàn)[1]中,討論了修改消極報(bào)錯(cuò)幀分界符長度來解決該故障的方法。


          2 處于消極報(bào)錯(cuò)狀態(tài)發(fā)送節(jié)點(diǎn)本地錯(cuò)的后果
          處于消極報(bào)錯(cuò)狀態(tài)的發(fā)送節(jié)點(diǎn)在有本地錯(cuò)時(shí),其行為傾向更差。標(biāo)準(zhǔn)ISO16845的8.6.9款對發(fā)送節(jié)點(diǎn)在消極報(bào)錯(cuò)幀分界符內(nèi)的格式錯(cuò)規(guī)定了發(fā)送錯(cuò)計(jì)數(shù)器TEC+8,第7.6.12款對處于消極報(bào)錯(cuò)狀態(tài)的接收節(jié)點(diǎn)在消極報(bào)錯(cuò)幀分界符內(nèi)的格式錯(cuò)規(guī)定了接收錯(cuò)計(jì)數(shù)器REC+1。而且標(biāo)準(zhǔn)規(guī)定REC是有上限的,它不會導(dǎo)致節(jié)點(diǎn)成為離線狀態(tài);但TEC會一直加上去,當(dāng)TEC=256時(shí)節(jié)點(diǎn)就成為離線狀態(tài),直到在總線上讀到128個(gè)連續(xù)的11個(gè)隱位,然后它


          關(guān)鍵詞: 狀態(tài) 故障 變?yōu)?/a> 節(jié)點(diǎn) 消極 發(fā)送 CAN

          評論


          相關(guān)推薦

          技術(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); })();