找回密码
 立即注册
查看: 47|回复: 3

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-11-02 07:50:58

45

主题

234

回帖

2069

积分

金牌会员

积分
2069
发表于 前天 13:26 | 显示全部楼层 |阅读模式
两台设备通信,甲乙设备同时上电,甲设备上电后因为一些原因,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,谢谢大家。




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-11-02 07:50:58

45

主题

234

回帖

2069

积分

金牌会员

积分
2069
发表于 昨天 13:33 | 显示全部楼层
今天上午,通过机械的跟踪乙设备的程序,发现CAN发送故障时影响的寄存器如下,但是还没有搞清为什么甲设备没有进入BUS-OFF状态。

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

RXERR               CAN 总线发送错误计数器

点评

因为bus_off下无法接收和发送,这个本来是设计给干扰到异常时用的,可以使用isr寄存器中的ewi异常错误中断检测bus_off,检测到以后判断ecc内的是ack错误,就马上复位一次bus_off,使其一直可以接受就行了  详情 回复 发表于 昨天 14:39
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:607
  • 最近打卡:2025-11-02 00:15:24
已绑定手机
已实名认证

122

主题

2951

回帖

7674

积分

版主

积分
7674
发表于 昨天 14:39 | 显示全部楼层
newl*** 发表于 2025-11-1 13:33
今天上午,通过机械的跟踪乙设备的程序,发现CAN发送故障时影响的寄存器如下,但是还没有搞清为什么甲设备 ...

因为bus_off下无法接收和发送,
这个本来是设计给干扰到异常时用的,
可以使用isr寄存器中的ewi异常错误中断检测bus_off,
检测到以后判断ecc内的是ack错误,
就马上复位一次bus_off,
使其一直可以接受就行了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-11-02 07:50:58

45

主题

234

回帖

2069

积分

金牌会员

积分
2069
发表于 昨天 15:50 | 显示全部楼层
王*** 发表于 2025-11-1 14:39
因为bus_off下无法接收和发送,
这个本来是设计给干扰到异常时用的,
可以使用isr寄存器中的ewi异常错误中 ...

谢谢版主的回复,我试下。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-11-2 14:52 , Processed in 0.111395 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表