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且器件進入總線關閉狀態。
?
?
?
?
總結
以上是生活随笔為你收集整理的mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于MCP2515帧连发、多发的坑
- 下一篇: STM32 KEIL MDK 本地时间和