深入探秘 CAN 总线:各类帧的特点与工作机制

时间:2025-04-29
  CAN(Controller Area Network)总线凭借其高可靠性、实时性和抗干扰能力,得到了广泛应用。CAN 总线的通信是通过特定类型的帧来实现的,深入了解这些帧的种类、用途和组成,对于掌握 CAN 总线技术至关重要。
  CAN 总线帧的种类
  CAN 总线通信主要通过以下 5 种类型的帧进行:数据帧、遥控帧、错误帧、过载帧和帧间隔。其中,数据帧和遥控帧又有标准格式和扩展格式之分。标准格式具有 11 个位的标识符,扩展格式则有 29 个位的 ID。
  五种类型帧的用途
  帧类型帧用途
  数据帧用于发送单元向接收单元传送数据的帧
  遥控帧用于接收单元向具有相同 ID 的发送单元请求数据的帧
  错误帧用于当检测出错误时向其它单元通知错误的帧
  过载帧用于接收单元通知其尚未做好接收准备的帧
  帧间隔用于将数据帧及遥控帧与前面的帧分离开来
  数据帧的组成
  数据帧是 CAN 总线中为常用的帧,其结构由 7 段组成:帧起始、仲裁段、控制段、数据段、CRC 段、ACK 段和帧结束。
  帧起始:表示帧的开始,由一个显性电平组成。无论是标准数据帧还是扩展数据帧都包含此段,它标志着数据帧和远程帧的起始,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。由于总线空闲时为隐性位,所以帧起始的显性位很容易识别。
  仲裁段:表示帧的优先级,标准格式和扩展格式在此的构成有所不同。标准格式的 ID 有 11 个位,从 ID28 到 ID18 依次发送,禁止高 7 位都为隐性;扩展格式的 ID 有 29 个位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示,同样禁止基本 ID 的高 7 位都为隐性。
  控制段:共 6 位,用于表示数据的字节数。标准帧的控制段由扩展帧标志位 IDE、保留位 r0 和数据长度代码 DLC 组成;扩展帧控制段则由 r1、r0 和 DLC 组成。IDE 在标准帧中位于控制段,为显性 0;在扩展帧中属于仲裁段,为隐性 1。保留位必须全部以显性电平发送,但接收方可以接收显性、隐性及其任意组合的电平。
  数据段:标准、扩展格式相同,可包含 0 - 8 个字节的数据,从 MSB(位)开始输出。
  CRC 段:用于校验传输是否正确。CAN 的报文包含一段 15 位的 CRC 校验码,一旦接收节点算出的 CRC 码与接收到的 CRC 码不同,它会向发送节点反馈出错信息,利用错误帧请求重新发送。CRC 部分的计算一般由 CAN 控制器硬件完成,CRC 界定符恒为隐性 1。
  ACK 段:用于确认是否正常接收,由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。发送节点发送隐性电平 1,接受成功的节点发送显性电平 0,总线电平与节点的发送结果对比,显性表示发送成功,隐性表示发送失败。应答标识为一个隐性电平 1。
  帧结束:由 7 个连续的隐形位组成,表示该帧的结束。
  遥控帧的组成
  遥控帧由帧起始、仲裁段、控制段、CRC 段、ACK 段和帧结束组成,与数据帧相比,远程帧没有数据段。具体对比如下:
  比较内容数据帧远程帧
  ID发送节点的 ID被请求发送节点的 ID
  SRR显性电平隐性电平
  RTR显性电平隐性电平
  DLC发送的数据长度接收的数据长度
  是否有数据段有没有
  CRC 校验范围起始帧 + 仲裁段 + 控制段 + 数据段起始帧 + 仲裁段 + 控制段
  其中,RTR 为远程发送请求位,SRR 为代替远程请求位,DLC 为数据长度位,CRC 为校验位。
  错误帧的组成
  错误帧用于在接收和发送消息时检测出错误并通知其他单元,由错误标志和错误界定符构成,错误界定符由 8 个位的隐性位构成。单元的错误状态分为主动错误状态、被动错误状态和总线关闭态,这些状态依靠发送错误计数和接收错误计数来管理。
  主动错误状态:可以正常参加总线通信的状态,处于该状态的单元检测出错误时,输出主动错误标志。
  被动错误状态:易引起错误的状态。处于该状态的单元虽能参加总线通信,但为不妨碍其他单元通信,接收时不能积极地发送错误通知。即使检测出错误,若其他处于主动错误状态的单元没发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,输出被动错误标志,且在不能马上再次开始发送,在开始下次发送前,在间隔帧期间内必须插入 “延迟传送”(8 个位的隐性位)。
  总线关闭态:不能参加总线上通信的状态,信息的接收和发送均被禁止。处于总线关闭态的单元,检测到 128 次连续 11 个位的隐性位时,发送错误计时器和接收错误计时器都将置为 0。
  CAN - Bus 的错误类型主要包括 CRC 错误、格式错误、应答错误、位发送错误和位填充错误。
  过载帧的组成
  当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点。过载帧由过载标志(6 个位的显性位)和过载界定符(8 个位的隐性位)构成,过载界定符的构成与错误界定符相同,过载标志的构成与主动错误标志相同。
  有 3 种情况会引起过载帧:
  接收节点自身原因,需要延迟接收下一个数据帧或者遥控帧。
  在帧间隔的间歇段的位和第二位检测到一个显性位(正常的间歇段都是隐性位)。
  CAN 节点在错误界定符或过载界定符的第八位(一位)听到一个显性位 0,节点会发送一个过载帧,且错误计数器不会增加。
  间隔帧的组成
  帧间隔用于分隔数据帧和遥控帧,数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开,但过载帧和错误帧前不能插入帧间隔。
上一篇:晶振原理是什么?
下一篇:集线器与交换机在使用方面有什么不同?

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料