can模块一共有三种错误,为错误主动,错误被动和总线关闭,总线关闭就是所说的bus off,通常情况下我们也只需要对bus off进行特殊处理。在can模块内部有一个错误计数器,当错误次数超过255时就会导致bus off,如果此时bus off的恢复模式设置为禁止自动恢复,就需要认为介入设置恢复机制。
通常主机厂都要求在产生bus off后ECU不能自动恢复,并给出快慢恢复要求,供应商要根据要求来制定bus off的快慢恢复机制。比如在bus off后首先快恢复,时间为50ms,次数超过5次之后切换为慢恢复机制,时间为200ms,在恢复期间ECU不能发出或者接受报文影响整车网络。
对于spc560系列的MCU的配置,应在原来CAN模块初始化的基础上,对CR寄存器的某些位进行指定:
使能BUS OFF Interrupt(BOFFMSK = 1);
对于其他不需要关心的中断要禁止,以免造成其他影响,(ERRMSK= 0,TWRNMSK = 0,RWRNMSK= 0);
配置bus off recovery mode为disable self recovery(BOFFREC = 1)
通过以上的配置之后,在产生bus off之后会触发MCU中断,在中断函数中,