微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Can总线如何检测BUS-OFF

Can总线如何检测BUS-OFF

时间:12-15 来源:互联网 点击:
1.什么是BUS-OFF

当CAN控制器发生错误的次数超过255次,就会触发BUS-OFF错误。一般发生BUS-OFF的条件是CAN总线受周围环境干扰,导致CAN发送端发送到总线的数据被BUS总线判断为异常,但异常的次数超过255次,BUS总线自动设置为BUS-OFF状态,此时总线处于忙的状态,数据无法发送,也无法接收。

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。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top