CAN总线控制器如何根据消息标识符来决定此特定消息是否属于它?这是不是就像接收器已经知道,如果标识符具有假设值5,那么它是给我的。我们编写receiver程序来告诉它你应该对值5感兴趣?
发布于 2014-11-18 19:42:03
CAN节点中的软件必须基于网络规范来决定它感兴趣的消息in,所述网络规范通常是某种类型的文档或哪些消息包含何种信息的其它电子表示。如果一个不感兴趣的消息到达,它只是不处理它,并且软件返回到消息到达之前它正在做的事情(假设中断驱动可以处理)。
一些CAN控制器(即芯片中负责CAN协议发送和接收的部分)具有消息过滤功能,这意味着可以在不感兴趣的消息到达软件之前将其丢弃。其他控制器具有消息过滤功能,可以将其设置为在特定的“消息框”中只接受单个消息ID,并且可以将这些控制器配置为接受您感兴趣的消息。同样,其他消息也会被丢弃。有些控制器同时具有筛选器和消息框。
发布于 2014-11-18 11:25:33
在CAN协议层,CAN网络中的所有节点都是平等的,并决定是否处理消息。"CAN控制器“是一个更高级的概念;它仍然需要像任何其他节点一样检查消息标识符。
请注意,“处理”消息不同于CAN协议消息检查和确认。所有节点都会参与该过程,除非它们处于“仅侦听”模式。
更新:
如何决定处理哪条消息取决于您正在尝试做什么,以及CAN上使用的更高级别的协议。原则上,您屏蔽掉相关的ID位,然后测试它们以查看是否应该处理消息。
例如,如果您希望处理低位4位中为5(二进制0101)的所有消息,则掩码为15 (二进制1111),您将其与接收到的消息ID进行二进制,然后将结果与5进行比较。
例如:
(msg_id & 15) == 5是对测试进行编码的一种方式。您关心哪些位,以及您的实现细节取决于许多其他因素。
发布于 2019-11-11 21:51:59
具体地,对于PDU1 (协议数据单元)消息,指定目的地地址(字节3)。如果设备收到不是发往它的消息,它可以简单地忽略它。地址由各种标准分配,也可以由制造商临时分配。
在一般情况下,CAN-ID (字节0-4)包含关于它是哪种消息的所有细节,并且设备可以检查特定字段以确定它们是否关心该消息。例如,变速器控制器可能不关心电池状态消息,也不关心油量计关于哪些门是锁着的。
https://stackoverflow.com/questions/26985981
复制相似问题