首頁(yè) 新聞 > 科技 > 正文

Can總線(xiàn)如何檢測(cè)BUS-OFF

1.什么是BUS-OFF?

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

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

2.如何檢測(cè)BUS-OFF?

下面以CAN發(fā)送數(shù)據(jù)為例,介紹如何檢測(cè)BUS-OFF錯(cuò)誤狀態(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”);}}通過(guò)檢測(cè)framesend .can_id是否被BUS-OFF置位。

3.BUS-OFF錯(cuò)誤后如何處理?

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

4.代碼實(shí)現(xiàn)

檢測(cè)CAN BUS-OFF錯(cuò)誤并進(jìn)行處理,網(wǎng)上已經(jīng)有開(kāi)源代碼,大家可以參考這個(gè)網(wǎng)址:http://www.pengutronix.de/software/libsocketcan/download/代碼里有個(gè)can_get_state函數(shù),也可以檢測(cè)CAN BUS當(dāng)前的狀態(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總線(xiàn)BUS-OF

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2018 創(chuàng)投網(wǎng) - www.mallikadua.com All rights reserved
聯(lián)系我們:33 92 950@qq.com
豫ICP備2020035879號(hào)-12