CAN -- CAN总线短帧结构
2026/6/2 12:02:18 网站建设 项目流程

1、CAN总线的短帧结构,是指单帧CAN报文单次最多仅传输8字节有效数据的帧设计,是其兼顾实时性和可靠性的核心特点‌。

短帧结构的核心参数

CAN总线标准定义,一个数据帧的‌有效数据段(用户实际传输的信息)长度仅为0~8字节‌,相比以太网、以太网IP等其他协议数百上千字节的最大帧长,长度极短,因此被称为短帧结构。

按照完整帧结构计算,包含仲裁段、控制段、校验段等额外字段后,一个标准CAN数据帧的总长度也仅在44~84位之间,即使在1Mbps的最高速率下,单帧传输时间也不到1ms,不会长时间占用总线。

短帧设计带来的核心优势

短帧结构的设计专门针对汽车、工控等实时性和可靠性要求高的场景,核心优势有两点:

  1. 实时性更强‌:数据量小、发送和接收的总时间短,总线占用时间短,能更快完成高优先级报文的传输,满足动力、安全相关系统对实时响应的要求。
  2. 可靠性更高‌:短帧受外界电磁干扰的概率远低于长帧,即使单帧出错,重发的成本也更低,配合CAN自带的错误校验机制,大幅降低了通信出错的概率。

需要注意的扩展方案

如果需要传输大于8字节的数据,CAN总线有专门的扩展方案:

  • CAN FD(灵活数据速率CAN)可以将单帧有效数据扩展到最大64字节,保留短帧优势的同时支持更大数据量传输;
  • 大于64字节的数据,会通过CAN协议的分包拆分机制,分成多个短帧依次发送,不会破坏原有短帧设计的优势。

FD全称是Flexible Data-Rate,翻译为‌灵活数据速率**,核心是指它支持仲裁段和数据段用不同速率传输的灵活设计。

具体拆解说明:

  1. 核心含义‌:"Flexible(灵活)"指的是‌可变速率‌——仲裁阶段用和经典CAN相同的1Mbps以内低速保障兼容性,数据阶段可以切换到2~8Mbps的高速提升传输效率,这种分阶段变速设计就是"灵活"的由来。
  2. 和「扩展」的区别‌:大家常说的"扩展"其实指的是它做了两个关键扩展:一是把单帧最大数据长度从8字节扩展到64字节,二是对帧格式做了功能扩展;但这些是CAN FD的特性,并不是FD这个单词本身的含义。
  3. 常见误区澄清‌:确实很多资料会误传FD是"扩展(Extension/Extended)"的缩写,实际从最初博世提出CAN FD概念,到后续ISO 11898-1:2015的标准定义,FD一直就是Flexible Data-Rate(灵活数据速率)的缩写,和帧格式里的"扩展帧"也不是一个概念。

简单总结:FD代表灵活可变的数据速率,"更大数据长度"是这个设计带来的功能改进,不是FD本身的含义。

2‌、CAN总线过载帧是由接收节点主动发送的总线管理类帧,作用是通知总线所有节点:当前接收节点尚未完成数据接收准备,请求其他节点推迟发送新报文,实现流量控制。

过载帧的帧结构

过载帧结构非常简单,固定由两个部分组成:

  1. 过载标志‌:由‌6个连续的显性位‌组成,格式和主动错误标志完全一致。它会破坏帧间隔的固定格式,触发所有节点检测到过载状态,让其他节点也同步发送过载标志。
  2. 过载界定符‌:由‌8个连续的隐性位‌组成,格式和错误界定符完全一致,标志过载帧发送结束,等待总线恢复空闲状态。

过载帧的触发条件

只有两种合法场景会触发过载帧发送:

  1. 接收节点缓存不足‌:接收节点已经填满内部接收缓冲区,暂时无法处理下一条新报文,因此发送过载帧请求延迟发送,这是最常见的触发场景。
  2. 帧间隔检测到异常‌:在帧间隔的间歇场阶段,节点检测到总线上出现了显性电平(不符合协议要求的电平状态),也会触发过载帧。

过载帧的常见问题和注意事项

  1. 过载帧不是错误帧:过载帧是节点正常的流量控制行为,不代表总线发生通信错误,只有错误帧才是总线错误的通知机制。
  2. 过载帧会增加总线延迟:过量的过载帧会导致总线整体通信延迟上升,如果开发中频繁抓到过载帧,通常说明总线负载过高、节点处理能力不足或者软件缓冲区配置不合理。
  3. 部分中文资料存在概念误区:权威CAN 2.0B规范仅将过载帧定义为四种可发送的实体帧之一,"帧间隔"本质是总线时序状态而非独立帧类型,不要混淆概念。

CAN总线错误帧是总线上节点检测到通信错误后,主动发送用来通知所有节点本次传输出错的特殊帧,是CAN总线实现错误检测和错误恢复的核心机制‌。

错误帧的基础结构

错误帧由固定的两个部分组成:

  1. 错误标志‌:分为两种类型:
    • 主动错误标志:‌6个连续的显性位‌,由处于主动错误状态的节点发送,主动通知总线出错
    • 被动错误标志:‌6个连续的隐性位‌,由处于被动错误状态的节点发送,仅被动通知出错
      由于不同节点检测错误的时间不一致,实际总线上的错误标志通常会扩展为6~12个显性位。
  2. 错误界定符‌:固定为‌8个连续的隐性位‌,标志错误帧发送结束,等待总线恢复空闲,让各个节点重新开始发送报文。

触发错误帧的5种常见错误

CAN总线一共定义了5类可检测的错误,任意一类错误被检测到,都会触发节点发送错误帧:

位错误:节点发送的电平和总线上回读的电平不一致(三种仲裁、应答场景除外)
ACK错误:发送节点在ACK槽没有检测到显性应答位,说明没有任何节点成功接收报文。
填充错误:在需要位填充的字段(SOF~CRC序列),检测到连续6个相同极性的电平。
CRC错误:接收节点计算出的CRC值和发送节点发送的CRC序列不一致
格式错误:在要求固定电平的字段(CRC界定符、ACK界定符、EOF等)检测到非法值

节点错误状态和错误计数规则

CAN总线通过发送错误计数和接收错误计数动态调整节点状态,避免单个故障节点阻塞整个总线:

  1. 主动错误状态‌:错误计数小于128,节点可正常通信,检测到错误后发送主动错误标志
  2. 被动错误状态‌:错误计数在128~255之间,节点只能发送被动错误标志,发送后需要额外等待才能发起下一次传输
  3. 总线关闭状态‌:发送错误计数超过255,节点关闭输出,完全退出总线通信
  4. 状态可恢复:当错误计数降低至阈值以下,被动错误节点会恢复为主动错误,总线关闭节点检测到128次连续隐性位后也会自动恢复。

常见问题说明

  1. 错误帧和过载帧的区别:错误帧用于通知‌通信错误‌,过载帧是接收节点请求‌推迟发送新报文‌,属于正常流量控制,二者功能完全不同。
  2. 少量错误帧属于正常现象:偶尔的电磁干扰就会触发少量错误帧,一般错误率低于5%都属于正常范围,如果错误率超过10%,说明总线存在硬件故障、阻抗不匹配或波特率偏差,需要排查总线布线和硬件。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询