当前位置:   article > 正文

CAN资料整理(二):CAN协议帧格式_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、帧间隔

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/83669
推荐阅读
相关标签
  

闽ICP备14008679号