新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Can總線如何檢測BUS-OFF

        Can總線如何檢測BUS-OFF

        作者: 時間:2016-12-15 來源:網絡 收藏
        1.什么是BUS-OFF

        當CAN控制器發生錯誤的次數超過255次,就會觸發BUS-OFF錯誤。一般發生BUS-OFF的條件是CAN總線受周圍環境干擾,導致CAN發送端發送到總線的數據被BUS總線判斷為異常,但異常的次數超過255次,BUS總線自動設置為BUS-OFF狀態,此時總線處于忙的狀態,數據無法發送,也無法接收。

        本文引用地址:http://www.104case.com/article/201612/330366.htm

        2.如何檢測BUS-OFF?

        下面以CAN發送數據為例,介紹如何檢測BUS-OFF錯誤狀態。

        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.代碼實現

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

        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。



        關鍵詞: Can總線BUS-OF

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 开原市| 屏东市| 富川| 正蓝旗| 特克斯县| 富源县| 佛教| 木兰县| 从江县| 昭苏县| 迭部县| 平谷区| 柳林县| 中阳县| 长武县| 安康市| 巫溪县| 聊城市| 泰顺县| 离岛区| 桐柏县| 海盐县| 南木林县| 安乡县| 兴城市| 常宁市| 南宫市| 秭归县| 五寨县| 池州市| 沙田区| 临江市| 汶川县| 高雄县| 卢龙县| 东丰县| 炎陵县| 寿光市| 汶川县| 巴塘县| 黎平县|