您的位置 首页 ADAS

Can总线怎么检测BUS-OFF

1什么是BUS-OFF?当CAN控制器发生错误的次数超过255次,就会触发BUS-OFF错误。一般发生BUS-OFF的条件是CAN总线受周围环境干扰,导致CAN发

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。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/233332.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部