MCP2515 (2)

MCP2515的屏蔽器与过滤器有相同的数量。

CAN节点通过标识符来识别 CAN帧是不是自己想要的
识别方法就是通过滤波屏蔽寄存器的设置来完成

接收滤波寄存器设置了标识符每位的值
接收屏蔽寄存器一般有相同的数量匹配接收滤波寄存器
规定接收滤波寄存器标识符每一位的值是否需要进行匹配

比如芯片设置有 6个接收滤波寄存器和 6个接收屏蔽寄存器:
从总线上接收 CAN帧,然后依次将收到的 CAN帧标识符与 6对接收滤波和屏蔽寄存器进行匹配 ,符合某对接收滤波和屏蔽寄存器要求了 ,就停止匹配 ,将数据接收到对应的缓冲区中。

例如:
设置某接收滤波寄存器 00000000001(11位),
接收屏蔽寄存器 11111111101(11位)
则该对组合会拒绝接收 00000000011和 00000000001之外所有的标识符对应的 CAN帧
因为屏蔽器规定第二位(为 0)以外的所有标识符位要严格匹配(与滤波器值一致),第二位的滤波器值和收到的 CAN标识符第二位值是否一致都可以。
不同的芯片滤波屏蔽寄存器的运行方式不太一致 ,至少 AT90CAN128和MCP2515差别就很大 ,不过原理都一样

合理的设定硬件的 mask & filter,可以节省很多 CPU时间。

1:两个 CAN节点通信。一方发送,一方接收。发送方如果没有收到接收方的应答。一直就会处于发送。CPU会处于死循环。

解决1:设置一个等待时间,自开始发送起,等待时间到了以后,取消发送。
解决2:设置起发送位后,不需要等待是否发送成功,去干其它事,程序就不会死在这里了。

2:置起发送位后。发送方的CAN控制器自身是不是要等待接收方的控制器的
应答。。就是我问的 CAN的应答机制。是不是它的底层协议。

解决1:在每次发完后,,再对CAN进行下软件复位。
解决2:填好数据,置起发送位;
去做其它事,到要发送下一笔前,来检查上一次是否已经发送完;
如果上一笔没有发送完,则决定如何处理:取消发送,或是等待。
3:现在需要一起发送超过八个字节的数据。。但是 SJA1000的一次最多只能发送八个字节的数据。如何能一次发送超过八个字节的数据
解决:由发送方拆开,在接收方重组

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值