newlined 发表于 7 天前

请教大家:关于CAN总线出现错误的问题

两台设备通信,甲乙设备同时上电,甲设备上电后因为一些原因,5秒后才初始化CAN总线(CAN部分根据官网汇编例程编写),乙设备上电后1秒后CAN总线就初始化完成(根据官网C例程编写)。现在情况是乙设备上电完成CAN初始化后,马上向甲设备发送1条报文,甲设备因为CAN总线未完成初始化,没有响应。甲设备完成CAN初始化后,给乙设备发送几条报文,跟踪程序

                              ANL                AUXR2,#NOT      08H                ;选择CAN1模块
                              MOV         A, #SR                           
                              CALL         CAN_ReadReg                        
                              JB      ACC.0,CAN_BUSOFF
时,发现没有执行CAN_BUSOFF ,也就是说CAN 模块不在 BUS-OFF 状态,直接去执行发送程序了,但在乙程序中跟踪,没有收到报文,此时,若乙设备主动发送一次报文,在程序中跟踪,发现乙设备通过执行:
                        sr = CanReadReg(SR);
                        if(sr & 0x01)                              //判断是否有 BS:BUS-OFF状态
                        {      CANAR = MR;
                              CANDR &= ~0x04;                  //清除 Reset Mode, 从BUS-OFF状态退出
                         }
               
后,退出BUS-OFF状态后把报文发了出去,但在甲设备程序中跟踪,没有从CAN总线中收到报文,然后乙设备再发送一次报文,甲设备就收到了,在此以后,甲发送报文,乙也可收到。

有2个问题,1:乙设备上电后发送报文,甲无响应,乙进入BUS-OFF状态;甲设备发送报文,乙不响应,甲为什么没有进入BUS-OFF状态?乙在甲完成CAN初始化后,第一次发送报文,甲为什么收不到?乙真的发出去了吗?

2:我看有关CAN总线错误的寄存器有好几个,请问乙这种状态下,可以通过访问哪个寄存器判断?

程序测试时没有接CAN的测试仪,接了CAN的测试仪,乙设备不会进入BUS-OFF状态,不会出现前面的问题,可能乙发报文时,CAN的测试仪会回应ACK,谢谢大家。




newlined 发表于 6 天前

今天上午,通过机械的跟踪乙设备的程序,发现CAN发送故障时影响的寄存器如下,但是还没有搞清为什么甲设备没有进入BUS-OFF状态。

ISR/IAC      中   BEI: 产生错误中断                         EWI:错误警告中断                         EPI:CAN模块被动错误中断SR             中   ES:   CAN模块至少有一个错误寄存器的值达到或超过了 96ECC         中   TXWRN:当 TXERR 大于等于 96 时该位置位。                         ACKER:   ACK:错误。                         FRMER:帧格式错误。                         BER:         位错误。
RXERR               CAN 总线发送错误计数器

王昱顺 发表于 6 天前

newlined 发表于 2025-11-1 13:33
今天上午,通过机械的跟踪乙设备的程序,发现CAN发送故障时影响的寄存器如下,但是还没有搞清为什么甲设备 ...
因为bus_off下无法接收和发送,
这个本来是设计给干扰到异常时用的,
可以使用isr寄存器中的ewi异常错误中断检测bus_off,
检测到以后判断ecc内的是ack错误,
就马上复位一次bus_off,
使其一直可以接受就行了

newlined 发表于 6 天前

王昱顺 发表于 2025-11-1 14:39
因为bus_off下无法接收和发送,
这个本来是设计给干扰到异常时用的,
可以使用isr寄存器中的ewi异常错误中 ...

谢谢版主的回复,我试下。
页: [1]
查看完整版本: 请教大家:关于CAN总线出现错误的问题