mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)
来源:互联网 发布:淘宝客服的工作流程 编辑:程序博客网 时间:2024/05/16 15:02
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且器件进入总线关闭状态。
- mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)
- mcp2515 芯片驱动总线错误BUG的解决方法
- stm32 EXTI中断BUG,无法进入外部中断的问题
- MCP2515无BUG版本驱动(C文件)
- 【BUG】编译器错误CS1595的解决方法
- STM32定时器进入中断后无法退出的解决方法
- DTree的BUG解决方法
- CButtonST的BUG解决方法
- 浮动bug的解决方法
- IE6 BUG的解决方法
- IE6 BUG的解决方法
- IE6 BUG的解决方法
- 无法重现的bug
- facebook ios sdk 无法登出bug的解决方法
- Win7 x64 VC6无法调试程序的bug解决方法
- Win7 x64 VC6无法调试程序的bug解决方法
- 关于STM32F10X 刚配置完定时器后 会立刻进入 中断的 BUG 修复
- ubuntu安装显卡驱动后无法进入图形界面的解决方法
- 抽象类和接口的区别
- iOS本地推送和远程推送详解
- PCM
- mysql(三)表的操作
- Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
- mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)
- 《精通正则表达式》笔记
- jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
- 加解密、PKI与CA基础
- linux上主从复制配置
- 正则表达式
- c语言几种排序算法(有图)
- CoordinatorLayout高级用法-自定义Behavior
- SqlServer索引的原理与应用