通信总线协议之CAN-FD协议详解

本文详细解析了CAN-FD总线协议,介绍其特点(如8Mbps传输速率和64字节数据长度),如何从CAN升级到CANFD,以及硬件和网络兼容性的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通信总线之CAN-FD总线协议详解

1. CAN-FD 简介

1.1 什么是CAN FD

  • 在《 通信总线协议之CAN总线协议详解 》中介绍了CAN 2.0 A/B总线协议,但是随着总线技术在汽车电子领域越来越广泛的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度数据传输速率的要求也越来越高,传统CAN(1MBit/s,8Bytes Payload)已难以满足日益增加的需求。
  • 因此,一种能够与CAN 2.0 A/B兼容,但通信速率更高,有效载荷更高的CAN总线 :CAN-FD总线协议应运而生,在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate)
  • CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。

1.2 CAN FD的特点

  • CAN FD传输速率是可变的:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,最高速率可达到8Mbps
  • CAN FD数据长度不同:CAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节,这减少了协议开销,并提高了协议效率。
  • CAN FD帧格式不同:CanFD新增了FDF、BRS、ESI位
    • FDF 位(Flexible Data Rate Format):原 CAN 数据帧中的保留位 r,用来区别是 CAN 报文还是 CAN-FD 报文,FDF 位常为隐性 1,表示 CAN FD 报文;
    • BRS 位( Bit Rate Switch):表示位速率转换,当 BRS 为显性位 0时,数据段的位速率与仲裁段的位速率一致(恒定速率),当 BRS 为隐性位 1时速率可变(即 BSR 到 CRC 使用转换速率传输);
    • ESI 位(Error State Indicator):发送节点错误状态指示,主动错误时发送显性位 0被动错误时发送隐性位 1

2. CAN-FD总线协议

  • CAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。
  • 与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。

CAN 标准帧格式
CAN FD帧格式

2.1 帧起始

  • CAN FD与CAN使用相同的SOF标志位来标志报文的起始
  • 帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步的作用
    在这里插入图片描述

2.2 仲裁段

  • 与传统CAN相比,CAN FD取消了远程帧,用RRS位替换了RTR位,为常显性;
    • RTR(Remote Transmission Request Bit):远程发送请求位,RTR位在数据帧里必须是显性,而在远程帧里为隐性
    • RRS(Remote Request Substitution):远程请求替换位,即传统CAN中的RTR位,CAN FD中为常显性
  • IDE位仍为标准帧和扩展帧标志位,若标准帧与扩展帧具有相同的前 11 位 ID,那么标准帧将会由于 IDE 位为 0,优先获得总线;
    在这里插入图片描述

2.3 控制段

  • 控制段中CANFD与CAN有着相同的IDEresDLC位;同时增加了三个控制bit位,FDF、BRS、ESI
  • FDF(Flexible Data Rate Format):原CAN数据帧中的保留位r,FDF常为隐性,表示CAN FD 报文;
  • BRS(Bit Rate Switch):位速率转换开关,当BRS为显性位时数据段的位速率与仲裁段的位速率一致,当BRS为隐性位时数据段的位速率高于仲裁段的位速率;
  • ESI(Error State Indicator):错误状态指示,主动错误时发送显性位,被动错误时发送隐性位;
    在这里插入图片描述
  • DLC同样是4bit表示数据段的长度,对应的关系如下:
    在这里插入图片描述

2.4 数据段

  • 数据段即为传输的具体数据内容
  • CAN FD不仅能支持传统的0-8字节报文,同时可以支持12, 16, 20, 24, 32, 48, 64字节

在这里插入图片描述

2.5 CRC段

  • 为了避免位填充对CRC的影响,CAN FD在CRC场中增加了stuff count记录填充位的个数对应8的模,并用格雷码表示,还增加了奇偶校验位;且在CRC中加入了填充位FSB(fixed stuff-bit)

  • Stuff Count由以下两个元素组成:

    1. 格雷码计算:CRC区域之前的填充位数除以8,得到的余数(Stuff bit count modulo 8)进行格雷码计算得到的值(Bit 0-2)
    2. 奇偶校验(parity):通过格雷码计算后的值的奇偶校验(偶校验)
  • CAN FD对CRC算法进行了改进,CRC对填充位也加入了计算;在校验部分为避免有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。

  • CAN的CRC的位数是15位,而在CAN FD中,CRC场扩展到了21位,如下:

    • 当传输数据为0~8字节时:CRC 15位
    • 当传输数据为9~16字节时:CRC 17位
    • 当传输数据为17~64个字节时:CRC 21位
      在这里插入图片描述

2.6 ACK段

  • 与CAN相比,在CAN FD中最多可接受2个位时间有效的ACK,允许1个额外的位时间来补偿收发器相移和传播延迟
  • 由从高速的数据场到慢速的仲裁场时,时钟切换会引起收发器相移和总线传播延迟;为了补偿其相移和延迟,相比传统的CAN,在CAN FD中多加了这额外的1位时间
  • 在ACK之后,发送ACK界定符,这是一个表示ACK结束的分隔符,用1位隐性位表示
    在这里插入图片描述

2.7 帧结束

  • 与CAN一样,CAN FD的帧结尾也为连续7位的隐性位

3. 如何从传统的CAN升级到CAN FD

  • 尽管 CANFD 继承了绝大部分传统 CAN 的特性,但是从传统 CAN 到 CANFD 的升级, 仍需要做很多的工作,主要包括:
    1. 硬件和工具方面,要使用 CANFD,首先要选取支持 CANFD 的 CAN 控制器和收发器,还要选取新的网络调试和监测工具;
    2. 网络兼容性方面,对于传统 CAN 网段的部分节点需要升级到 CANFD 的情况要特别注意,由于帧格式不一致的原因,CANFD 节点可以正常收发传统 CAN 节点报文,但是传统 CAN 节点不能正常收发 CANFD 节点的报文;

感谢阅读 若有错误 欢迎指正 !!!


### 解析CAN FD报文的方法 #### 使用Arxml文件解析CAN FD报文结构 ARXML 文件提供了详细的 CANFD 报文定义,包括信号名称、起始位、长度和其他属性。这些信息对于理解 CANFD 数据至关重要[^1]。 ```python from xml.etree import ElementTree as ET def parse_arxml(arxml_file_path): tree = ET.parse(arxml_file_path) root = tree.getroot() canfd_messages = [] for message in root.findall(".//MESSAGE"): msg_id = message.find('ID').text dlc = int(message.find('DLC').text) signals = {} for signal in message.findall('.//SIGNAL'): sig_name = signal.find('NAME').text start_bit = int(signal.find('START_BIT').text) length = int(signal.find('LENGTH').text) signals[sig_name] = { 'start_bit': start_bit, 'length': length } canfd_messages.append({ "id": msg_id, "dlc": dlc, "signals": signals }) return canfd_messages ``` 此 Python 函数可以读取 ARXML 文件并提取有关 CANFD 报文的信息,如消息 ID 和 DLC (数据链路控制),以及各个信号的具体细节。 #### 利用专用工具测试和验证CAN FD通信质量 为了确保 CAN/CANFD 总线上的通信正常工作,可采用 PicoScope 这样的设备来测量位时间特性,并利用其内置的功能来进行深入分析[^2]。 #### 应用ETAS工具进行实时监控与调试 当需要在 Basic-CAN 模式下接收 CANFD 报文时,可以通过调整 MCAL CAN 配置参数,设置 CANIF 初始化配置项 `CanIfInitCfg` 及其他相关变量以适应特定应用场景的需求[^3]。 #### 通过USB-CANMB分析仪操作实践 借助 USB-CANMB 分析仪及其配套的上位机软件 `canmb_v1.22` ,能够方便快捷地发送和接收 CANFD 报文,从而完成实际项目中的开发与测试任务[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

园长QwQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值