CAN资料整理(二):深入理解CAN协议帧格式

目录

一、CAN协议帧格式

1、数据帧

2、遥控帧

3、错误帧

 4、过载帧

 5、帧间隔


一、CAN协议帧格式

CAN协议帧的格式十分重要,部分MCU中的CAN外设寄存器就是根据对应帧结构来进行设计的。

  • 数据帧:用于发送单元向接收单元传送数据的帧
  • 遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧
  • 错误帧:用于当检测出错误时向其他单元通知错误的帧
  • 过载帧:用于接收单元通知其尚未做好接收准备的帧
  • 帧间隔:用于将数据帧和遥控帧与前面的帧分离开来的帧
  • 1、数据帧

    (1)帧起始:标识一个数据帧的开始,用于同步,一个显性位,只有在总线空闲期间节点才能发送SOF

    (2)仲裁段(场):ID、RTR、IDE、SRR

  • ID:唯一确定一条报文,表明报文的含义和优先级;(标准帧:11位ID;拓展帧:29位ID)
  • RTR 远程传送请求位(0:数据帧。              1:远程帧)
  • IDE 标识符拓展位     (0:11位ID,标准帧。1:29位ID,拓展帧)
  • SRR 远程代替请求位   SRR = 1
  • 以Renesas RH850的用户手册中的Receive Rule ID Register举例:其中就设计到CAN数据帧的相关设置

    (3)控制段(场):主要用于表示数据段有多少个字节

  • r1、r0 为保留位,默认为显性电平(逻辑0)
  • DLC 数据长度码:表示数据段的字节数,表示为0~8
  • (4)数据段(场):CAN数据帧要发送的数据内容

    (5)CRC段(场):用于进行CRC校验

  • CRC:接收到的CRC数据,用于进行校验
  • DEL 界定符:用于界定CRC序列,固定1个隐性电平(逻辑1),CRC界定符之前会进行位填充,CRC之后的位域都是固定格式,不允许位填充
  • (6)ACK段(场):确定报文被至少一个节点正确接收

    发送节点在ACK发送隐性位(逻辑1):

  • 正确接收到报文的节点 =》 ACK发送显性位(逻辑0)
  • 未正确接收到报文的节点 =》ACK发送隐性位(逻辑1)
  • 发送节点检测应答位是否被显性电平覆盖(即ACK变为显性位,逻辑0)

  • 没有 =》 ACK错误
  • (7)帧结束7个连续的隐性位(逻辑1),表示帧结束;节点在检测11个连续的隐性位后,认为总线空闲

    2、遥控帧

     具体各位信息可以参考数据帧

    3、错误帧

    (1)CAN中的错误检测:

  • 位检测:节点检测到的位域自身送出的位数值不同。(注:仲裁段与ACK段不参与位检测
  • 填充检测:在使用位填充编码的帧段,不允许出现6个连续相同的电平
  • CRC检测:节点计算CRC序列与接收到的CRC序列不同
  • 格式检测:固定格式位场(CRC界定符之后),含有一个或更多非法位
  • ACK检测:发送节点在ACK位期间未检测到“显性”电平
  • 发送节点的产生错误一般有:位错误、格式错误、ACK错误

    接收节点的产生错误一般有:填充错误、格式错误、CRC错误

    (2)CAN中的错误帧:

    一般流程:检测错误=》发送错误帧=》通知报文错误

    主动错误与被动错误的区别:

  • 主动错误:只要检查到错误,它立即“主动地”发送错误标志,连续6个显性位(不满足CAN协议的“最多5个连续的同性位”要求)。
  • 被动错误:如果检查到错误,它只能“被动地”等其他站点报错,等待的时候不能去动总线,发送了6个隐性位(不满足CAN协议的“最多5个连续的同性位”要求,能够部分或全部被其他节点的显性位覆盖),直到识别出其他站点报错,然后就可以去竞争总线,该干啥干啥。
  • 错误帧的发送

  • 位错误、填充错误、格式错误或ACK错误产生后:当前发送的一下位发送错误帧
  • CRC错误:紧随ACK界定符后的位发送错误帧
  • 错误帧发送后:总线空闲时重发出错的数据帧
  •  

     

     4、过载帧

     5、帧间隔

    物联沃分享整理
    物联沃-IOTWORD物联网 » CAN资料整理(二):深入理解CAN协议帧格式

    发表评论