Bus-OFF

Bus-off 状态处理
1 定义了进入、退出 Bus off 状态的条件。当 发送错误计数器 累计超过 255 时,节点
进入 Bus off 状态。在 Bus off 触发后,软件程序立即对 CAN 进行重新初始化,当收到 128 个连续 11
个隐性位,节点由 Bus off 状态变为 错误主动状态 ””,此时 发送错误寄存器 和 接收错误寄存器 ” 清零。
之后 ECU 尝试发送常规报文,一旦常规报文被其它节点成功接收,则节点 应 完成 Bus off 复位的确认,
节点正常通信。
网络节点恢复策略
当分系统节点进入Bus off 后,不允许 CAN 控制器自动复位。在 Bus off 时间后 50ms 时刻, ECU
尝试发送常规报文,一旦常规报文被其它节点成功接收,则节点完成 Bus off 复位确认,节点正常通信。
当 发送错误计数器 累计超过 255 时,节点进入 Bus off 状态;
节点不允许 CAN 控制器自动复位,要求节点进入 Bus off 后,每隔 50ms 尝试复位一次,每复
位一次计数器累加 1如果计数器等于10 ,则节点每 1s 尝试复位一次。如果节点成功发送常规报文,则 Bus off 复位
成功,节点即可正常通信,计数器清 0 ;如果常规报文尝试发送失败,则节点继续每 1s 尝试一次 Bus off
复位。Busoff 快慢恢复时间范围需满足表 19 参数要求。

问题点:

   bus-off 处理的难点在于 当canH canL短路时,造成bus-off 进入错误中断后,开启bus-off处理任务,重新初始化MSCAN成非自动恢复模式。因为can的初始化,导致不满足bus-off的条件,bus-off的状态则被复位,但是实际上此时 canH,canL还是处于短路状态,上层故障monitor无法正确判断此时的总线状态导致无法有效触发 故障。        

代码处理思想:

  先打开can 错误中断,一旦因为can bus-off 进入中断,那么设置标志位flag1此时已经busoff。在bus-off 处理函数中每50ms或者1s复位 MSCAN ,每次复位完成后都 将flag1复位。

  如果canH_canL一直短路,那么在50ms 内或者1000ms内,flag1肯定会被置位,然后进入busoff 处理函数中进行重新初始化MSCAN,如果canH-CANL 分开不再进入 bus-off,那么在50ms或者1000ms内 MSCAN 会被初始化成功,且自动将buso-ff处理任务挂起。

关键点:

1.can控制器连续发送错误帧32次(32*8=256>255)即产生总线脱离也叫bus-off  

2.相应的中断打开,当bus-off发生时,单片机产生错误中断(bus-off中断)

3.如果can控制器被配置成自动恢复,那么can控制器将遵循博世CAN2.0标准进行总线恢复

4.如果can控制器被配置成手动恢复,那么需要用户清空总线脱离寄存器状态位,且等待128次的 连续的隐形位。

5. can发送中断进入的规则是:当can发送缓存清空(can报文被正确发送到总线上)时,进入can发送中断,中断函数中执行

填充 发送缓存器的 指令;

 

       

 

 

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值