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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Can總線如何檢測BUS-OFF

          Can總線如何檢測BUS-OFF

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          1.什么是BUS-OFF?

          當CAN控制器發(fā)生錯誤的次數(shù)超過255次,就會觸發(fā)BUS-OFF錯誤。一般發(fā)生BUS-OFF的條件是CAN總線受周圍環(huán)境干擾,導(dǎo)致CAN發(fā)送端發(fā)送到總線的數(shù)據(jù)被BUS總線判斷為異常,但異常的次數(shù)超過255次,BUS總線自動設(shè)置為BUS-OFF狀態(tài),此時總線處于忙的狀態(tài),數(shù)據(jù)無法發(fā)送,也無法接收。

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

          2.如何檢測BUS-OFF?

          下面以CAN發(fā)送數(shù)據(jù)為例,介紹如何檢測BUS-OFF錯誤狀態(tài)。

          structcan_frameframesend={
          .can_id=0xaa,
          .can_dlc=1,
          .data[0]=0x66,
          };
          err=write(s_can0,&framesend,sizeof(framesend));
          if(err<=0)
          perror(“senddataerror”);
          else{
          if(framesend.can_id&CAN_ERR_BUSOFF){
          perror(“bus-off”);
          }
          }
          通過檢測framesend .can_id是否被BUS-OFF置位。

          3.BUS-OFF錯誤后如何處理?

          最好的處理方法是:restart。can0出錯了,restart can0。

          4.代碼實現(xiàn)

          檢測CAN BUS-OFF錯誤并進行處理,網(wǎng)上已經(jīng)有開源代碼,大家可以參考這個網(wǎng)址:http://www.pengutronix.de/software/libsocketcan/download/代碼里有個can_get_state函數(shù),也可以檢測CAN BUS當前的狀態(tài)。

          intstate;
          if((can_get_state(if_name_can0,&state))<0)
          {
          fprintf(stderr,"cannotgetbustate,""somethingisseriouslywrong");
          }
          elseif(state==CAN_STATE_BUS_OFF)
          {
          fprintf(stderr,"DeviceisinBUS_OFF");
          do_restart("can0");
          }

          do_restart("can0")的作用是restart can0。



          關(guān)鍵詞: Can總線BUS-OF

          評論


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