目录
创作不易,请帮忙点赞+评论+转载,非常感谢
5.4 CAN MAC 帧结构
5.4.1 描述
CAN (Controller Area Network) 网络中节点之间的数据传输和接收由四种不同的帧类型执行和控制:
- 数据帧 (Data Frame, DF):用于从发送器向所有接收器传输数据。
- 远程帧 (Remote Frame, RF):由一个节点发送以请求具有相同标识符的数据帧的传输。
- 错误帧 (Error Frame, EF):在网络中检测到总线错误时,任何节点(发送器或接收器)都可以发送错误帧。
- 过载帧 (Overload Frame, OF):用于在前面的数据帧或远程帧与后续的数据帧或远程帧之间提供额外的延迟。
数据帧和远程帧会竞争总线访问权,并且它们与前一帧之间由一个帧间间隔 (Inter-Frame Space) 分隔。
CAN 中有四种不同类型的数据帧:
- 经典基本帧格式的数据帧 (DF in Classical Base Frame Format):这是标准 CAN 帧格式,标识符长度为 11 位。
- 经典扩展帧格式的数据帧 (DF in Classical Extended Frame Format):这是扩展 CAN 帧格式,标识符长度为 29 位。
- FD 基本帧格式的数据帧 (DF in FD Base Frame Format):这是 CAN Flexible Data Rate (CAN-FD) 的基本帧格式,支持更高的数据传输速率。
- FD 扩展帧格式的数据帧 (DF in FD Extended Frame Format):这是 CAN-FD 的扩展帧格式,同样支持更高的数据传输速率,并且具有 29 位的标识符。
CAN 中有两种不同类型的远程帧:
- 经典基本帧格式的远程帧 (RF in Classical Base Frame Format):这是标准 CAN 远程帧格式,标识符长度为 11 位。
- 经典扩展帧格式的远程帧 (RF in Classical Extended Frame Format):这是扩展 CAN 远程帧格式,标识符长度为 29 位。
这些帧类型共同构成了 CAN 和 CAN-FD 网络通信的基础,确保了可靠和有效的数据传输。
5.4.2 MAC DF(数据帧) 规范
5.4.2.1 描述
在发送时,LLC 数据帧应当转换为 MAC 数据帧。在接收时,MAC 数据帧应当转换回 LLC 数据帧。MAC 数据帧由七个不同的比特字段组成;参见图 5.2。
- SOF (Start Of Frame):标志着帧的开始。
- 仲裁字段:包含标识符字段和格式字段的一部分。
- 控制字段:包含 DLC (Data Length Code) 字段和格式字段的一部分。
- 数据字段:包含 LLC 数据字段。
- CRC 字段:用于循环冗余校验。
- ACK 字段:用于确认接收。
- EOF (End Of Frame):标志着帧的结束。
图5.2 MAC DF
5.4.2.2 SOF (Start Of Frame)
SOF 标记了数据帧 (DF) 和远程帧 (RF) 的开始。它由一个显性位组成。
-
发送 SOF:一个节点只有在总线处于空闲状态时才能发送 SOF。如果一个节点在其暂停传输时间或在帧间间隔的第三个比特位检测到了一个显性位,则应接受它作为 SOF。
-
特殊情况下的 SOF:如果一个节点在帧间间隔的第三个比特位检测到了一个显性位,并且该节点有待发送的消息且处于活动状态(error active)或之前是接收者,则该节点应当从下一个比特开始发送其消息,以标识符的第一个比特开始,而无需首先发送 SOF 位,也不需成为接收者。
-
同步:所有节点都应当同步到第一个开始发送的节点所产生的 SOF 的前沿。
SOF 的作用
SOF 是 CAN 通信中非常重要的标志,它标志着一个帧的开始。SOF 由一个显性位组成,在 CAN 总线上显性位表示逻辑 0,隐性位表示逻辑 1。在 CAN 网络中,显性位具有优先级高于隐性位的特性,这意味着如果多个节点同时发送显性位和隐性位,则总线上会检测到显性位。
发送 SOF
-
总线空闲状态:节点只有在总线处于空闲状态时才能发送 SOF。总线空闲状态指的是总线上的所有节点都在发送隐性位,即总线处于逻辑 1 状态。
-
特殊情况下的 SOF:如果一个节点在帧间间隔的第三个比特位检测到了一个显性位,这通常表示另一个节点已经开始发送 SOF。在这种情况下,如果该节点有待发送的消息,并且它处于活动状态(即没有进入错误被动状态)或之前是接收者,则该节点可以从下一个比特开始发送其消息,直接从标识符的第一个比特开始发送,而无需等待 SOF 位。(这里我的理解是所有节点可以同时发送数据,等待仲裁机制来仲裁哪个可以先发送。 如果读者有更准备的理解请在评论区留言,谢谢)
同步
- 同步到 SOF:所有节点都必须同步到第一个开始发送的节点所产生的 SOF 的前沿。这意味着所有节点必须调整其内部时钟以匹配发送 SOF 的节点的时钟。这种同步是通过检测 SOF 的前沿实现的,以确保所有节点在同一时刻开始处理帧的内容。
SOF 在 CAN 通信中扮演着至关重要的角色,它不仅标记帧的开始,还用于同步所有节点的时钟。节点只有在总线处于空闲状态时才能发送 SOF,而且所有节点都需要同步到第一个发送 SOF 的节点产生的 SOF 前沿。此外,在某些特殊情况下,节点可以直接从标识符的第一位开始发送消息,而无需等待 SOF 位。
5.4.2.3 仲裁字段
仲裁字段由标