CAN协议帧结构

26 篇文章 0 订阅
14 篇文章 0 订阅

一、数据帧的整体结构

┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐  
│ 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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值