CAN总线空闲检测

时间:2017-12-20 13:15:15

标签: embedded can-bus canopen

对于CAN,当遇到SOF(0)时帧开始。但是,让我们说我们的系统刚刚加入CAN,它将如何检测新CAN帧的启动?

EOF是7个隐性位加3个IFS(帧间间隔)位...所以我们可以等待10个连续1然后如果有一个切换到0之后我们可以认为这是新帧的开始

但是,我的问题是如果之前只连接了一个节点会怎样。然后,如果我们看到ACK位为1,则ACK定界符位为1且7个EOF帧位为1.因此,在3个IFS位之前,我们只得到10位(隐性)如果我们的节点开始在IFS中发送数据比特周期系统会发生什么?

1 个答案:

答案 0 :(得分:0)

抱歉,我的假设有误。如果我们看到CAN帧结构,则节点需要监视总线,如果11个连续位被检测为“1”,那么只有节点会将总线视为空闲。

上述声明的解释。 1个ACK_DELIMETER位,7个EOF位和3个IFS位。

所以,现在如果我们假设只有一个节点连接到系统而下一个节点连接,而第一个节点正在传输CAN帧的数据部分。

然后第二个节点将检测CRC-DELIMETER中的1,ACK_SLT,ACK_DELIMETER,7个EOF位和3个IFS位。如果节点2有一个要发送的数据,那么它会在IFS时间的2位发送它,考虑到那时总线是空闲的(因为11位为1位)。但是根据博世的CAN 2.0协议规范,如果一个节点在1和2比特的IFS时间内检测到0比特,那么它会发送过载标志。因此,节点1将开始发送过载标志,并且从下次开始通信将工作正常。

如果1也作为CRC的最后一位然后第二个节点可能开始在IFS时间的1个位发送帧,并且节点1将开始发送过载帧作为规范的一部分,则会发生相同的事情。

如果您认为这是未完成的,请随时分享评论。