mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)

http://blog.renren.com/share/221002615/11483613167 来自张涛的日志


现象:CAN总线在线上设备热插拔或长时间运行后出现总线异常情况,有时不能发送和接收,有时只能发送不能接收。


分析:

         经过观察,发现出现只能发送不能接收的情况是由于没有调用中断服务造成的,而在整个驱动中并没有其它地方会异常释放中断,所以断定为mcp2515本身没有发出中断;查看芯片手册,发现在CANINTF中断标志位寄存器中有两个错误中断标志位,其它五个为正常情况下的中断标志位,驱动中并没有对错误中断进行处理,造成的结果是总线中发生错误后,错误中断没有处理,CANINTF中的错误标志位始终没有被清除,造成其它中断被堵塞,因此无法接收数据;而长时间动行后,错误中断计数器达到一定值后,总线就被关闭,所以会出现收发都不正常的情况。


解决办法:最简单的办法就是处理错误中断,在出现错误后重置mcp2515芯片。


结果:使用以上办法后,热插拔总线设备并不会出现总线异常情况。



==========================



7.6 错误中断
当错误中断使能 (CANINTE.ERRIE =1)时,如果发
生溢出或发送器/接收器的错误状态发生改变,器件将
在INT引脚产生中断。错误标志 (EFLG)寄存器将会
表明以下错误中断状况之一。




7.6.1 接收器溢出
当MAB组合好收到的有效报文 (该报文符合验收滤波
器的接收条件),而与该滤波器相关的接收缓冲器尚无
法装载新报文时,将发生溢出。相应的EFLG.RXnOVR
位将被置1,表明发生溢出。该位必须由MCU清零




7.6.2 接收器警告
REC达到MCU警告限定值96。


7.6.3 发送器警告
TEC达到MCU警告限定值96。


7.6.4 接收器被动错误
REC超出被动错误限定值127,且器件进入被动错误状态。


7.6.5 发送器被动错误
TEC超出被动错误限定值127,且器件进入被动错误状
态。


7.6.6 总线关闭
TEC超出255且器件进入总线关闭状态。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值