1

对于 CAN,帧在遇到 SOF (0) 时开始。但是假设我们的系统刚刚加入了CAN总线。它将如何检测新 CAN 帧的开始?

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

但是,如果以前只连接一个节点怎么办?然后,如果我们看到 ACK 位为 1,则 ACK 定界符位为 1,7 个 EOF 帧位为 1。因此,在三个 IFS 位之前,我们只有一个 10 位(隐性)。如果我们的节点在 IFS 位周期开始发送数据,系统会发生什么?

4

1 回答 1

0

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

对上述说法的解释。

一个 ACK​​_DELIMETER 位、七个 EOF 位和三个 IFS 位。

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

然后第二个节点将检测 CRC-DELIMETER、ACK_SLT、ACK_DELIMETER、七个 EOF 位和三个 IFS 位中的一个。如果节点 2 有数据要发送,那么它将在 IFS 时间的两位发送,考虑到此时总线处于空闲状态(因为 11 位的 1 值来了)。

但根据 Bosch 的 CAN 2.0 协议规范,如果节点检测到 1 中的 0 位和 IFS 时间的两位,则它会发送启动过载标志。所以在这里节点 1 将开始发送过载标志,并且从下一次开始通信将正常工作。

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

如果您认为没有这样做,请随时分享评论。

于 2017-12-26T07:31:25.550 回答