当前位置: 首页 > news >正文

CAN协议帧结构

一、数据帧的整体结构

┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐  
│ SOF   │ ID[11]│ RTR   │ IDE   │ DLC   │ Data  │       │       │       │       │ CRC   │  
│(1bit) │(11bit)│(1bit) │(1bit) │(4bit) │(0-8B) │       │       │       │       │(16bit)│  
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤  
│ 显性  │ ID值  │ 显性  │ 显性  │ DLC值 │ 数据0 │ 数据1 │ 数据2 │ ...   │ 数据N │ CRC值 │  
│(0)    │(决定优先级)│(数据帧)│(标准帧)│(数据长度)│       │       │       │       │       │(校验)  
└───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘  └───────┬───────┘ (如果是扩展帧,则ID为29位,且IDE为隐性)  │  扩展ID[18] (仅扩展帧有)  EOF (帧结束,通常为一系列隐性位,不在此图中表示)  
ACK槽 (确认槽,用于接收节点发送确认信号,也不在此图中表示)

CAN数据帧由多个字段组成,每个字段都承载着特定的信息,以确保数据在CAN总线上的高效、准确传输。

二、开始帧(Start of Frame, SOF)

  • 功能:开始帧标志着数据帧的起始,它是一个特殊的位模式,用于同步总线上的所有节点。
  • 实现:在CAN 2.0B规范中,开始帧是一个显性位(逻辑0)。

三、ID字段(Identifier Field)

  • 功能:ID字段用于标识数据帧的优先级和类型。在CAN总线上,多个节点可能同时尝试发送数据。此时,ID字段的值决定了哪个数据帧将首先被传输。ID值越小,优先级越高。
  • 长度:在标准帧中,ID字段为11位;在扩展帧中,ID字段为29位(但前11位与标准帧相同,后18位为扩展部分)。

四、RTR位(Remote Transmission Request Bit)

  • 功能:RTR位用于区分数据帧和远程帧。当RTR位为显性(逻辑0)时,表示该帧为数据帧;当RTR位为隐性(逻辑1)时,表示该帧为远程帧。远程帧用于请求发送特定ID的数据帧。

五、IDE位(Identifier Extension Bit)

  • 功能:IDE位用于标识帧是标准帧还是扩展帧。在标准帧中,IDE位为显性(逻辑0);在扩展帧中,IDE位为隐性(逻辑1)。IDE位的设置决定了ID字段的长度和帧的格式。

六、DLC(Data Length Code)

  • 功能:DLC字段表示数据区的字节数。它告诉接收节点数据区中有多少个字节的数据需要接收。
  • 长度:DLC字段通常为4位,可以表示0到8个字节的数据长度(在某些CAN实现中,DLC字段可能更长,以支持更多的数据长度)。

七、数据区(Data Field)

  • 功能:数据区是实际传输数据的部分。它包含了节点想要发送给其他节点的信息。
  • 长度:数据区的长度由DLC字段决定,最多可以包含8个字节的数据(在某些CAN实现中可能更多)。

八、CRC校验码(Cyclic Redundancy Check)

  • 功能:CRC校验码用于检测数据帧在传输过程中是否发生了错误。它通过对数据帧的特定部分(通常是ID字段、RTR位、IDE位、DLC字段和数据区)进行多项式运算来生成。
  • 实现:接收节点在接收到数据帧后,会对相同的部分进行相同的多项式运算,并将结果与发送节点发送的CRC校验码进行比较。如果两者相同,则表示数据帧在传输过程中没有发生错误;如果不同,则表示发生了错误,接收节点将丢弃该数据帧。

九、ACK槽(Acknowledgment Slot)

虽然ACK槽不是数据帧的一部分,但它在数据帧的传输过程中起着重要作用。ACK槽位于数据帧和错误帧之间,用于接收节点向发送节点发送确认信号(显性位表示确认,隐性位表示未确认)。如果接收节点正确接收了数据帧,它将在ACK槽期间发送一个显性位作为确认信号。

十、帧结束(End of Frame, EOF)

  • 功能:帧结束标志着数据帧的结束。它是一系列隐性位,用于告知总线上的其他节点该数据帧已经传输完毕。

http://www.mrgr.cn/news/45879.html

相关文章:

  • 45岁被裁员的程序员,何去何从?
  • 题目:圆桌会议
  • 在虚拟机里试用了几个linux操作系统
  • C语言 | Leetcode C语言题解之第464题我能赢吗
  • 探索 ACM:计算机领域的卓越组织
  • TCP_SOCKET编程实现
  • site-packages is not writeable
  • AI是如何思考的?
  • 代码随想录day23:贪心part1
  • 蒙特卡罗方法 - 重要采样篇
  • ACM介绍
  • 基于Web的实时动作捕捉工具
  • yub‘s Algorithmic Adventures_Day7
  • TCP(Transmission Control Protocol,传输控制协议)整理
  • 供应链管理师案例分析题3
  • Collection 和 Collections 有什么区别?
  • 【CuPy报错】NVRTC_ERROR_COMPILATION (6)找不到 ‘vector_types.h‘
  • 【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分
  • 【3dgs】3DGS**(3D Geometry Sensing)与 **NeRF**(Neural Radiance Fields)对比
  • 系统架构设计师论文《论企业集成平台的技术与应用》精选试读