对于CAN,帧在遇到SOF (0)时开始。但是假设我们的系统刚刚加入了CAN总线。它如何能够检测到新CAN帧的开始?
EOF是7个隐性比特加上3个IFS (帧间间隔) bits..so,我们可以等待10个连续的1,然后如果之后切换到0,我们可以将其视为新帧的开始。
但是,如果以前只连接了一个节点呢?然后,如果我们看到ACK位是1,ACK定界位是1,7个EOF帧位是1,那么在这三个IFS位之前,我们得到10位(隐性)。如果我们的节点在IFS位周期内开始发送数据,系统会发生什么情况?
发布于 2017-12-26 15:31:26
抱歉,我的假设有误。如果我们看到CAN帧结构,那么节点需要监控总线,如果检测到11个连续的位为'1‘,那么只有节点会认为总线是空闲的。
对上述声明的解释。
一个ACK_DELIMETER位、七个EOF位和三个IFS位。
因此,现在如果我们假设只有一个节点连接到系统,并且下一个节点在第一个节点传输CAN帧的数据部分时连接。
然后,第二节点将在CRC-DELIMETER、ACK_SLT、ACK_DELIMETER、七个EOF比特和三个IFS比特中检测一个。如果节点2有数据要发送,那么它将在IFS时间的两个比特发送它,认为总线在那个时刻是空闲的(因为11个比特的值为1)。
但是根据Bosch的CAN 2.0协议规范,如果节点在IFS时间的1和2比特中检测到0比特,则它发送开始过载标志。因此,在这里,节点1将开始发送过载标志,并且从下一次开始,通信将正确工作。
如果1也在那里作为CRC的最后一位,则将发生相同的事情,则第二节点可以在IFS时间的1SIT位开始发送帧,并且节点1将开始发送过载帧作为规范的一部分。
如果你认为这是不是这样做的,请随时分享评论。
https://stackoverflow.com/questions/47906919
复制相似问题