CAN FD协议简介

在汽车领域,随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,BOSCH公司2011年推出了CAN FD方案 。
CAN FD(CAN with Flexible Data rate)继承了CAN总线的主要特性。CAN总线采用双线串行通讯协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制使CAN总线有很高的安全性,但CAN总线带宽和数据场长度却受到制约。CAN FD总线弥补了CAN总线带宽和数据场长度的制约,CAN FD总线与CAN总线的区别主要在以下两个方面:

可变速率

CAN FD采用了两种位速率:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率,即仲裁段和数据控制段使用标准的通信波特率,而数据传输段时就会切换到更高的通信波特率,数据传输速率可大于。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同。

新的数据场长度

CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节。

CAN FD 介绍

1. CAN FD数据帧帧格式

CAN FD 数据帧在控制场新添加EDL位、BRS位、ESI位,采用了新的DLC编码方式、新的CRC算法(CRC场扩展到21位)。CAN FD数据帧格式如下图:
在这里插入图片描述

2. 新添加位介绍
EDL(Extended Data Length)位:

原CAN数据帧中的保留位r, 该位功能为隐性,表示 CAN FD报文,采用新的DLC编码和CRC算法;该功能位为显性,表示CAN报文

BRS(Bit Rate Switch)位:

该功能位为隐性,表示转换可变速率;为显性,表示不转换可变速率

ESI(Error State Indicator)位:

该功能位为隐性,表示发送节点处于被动错误状态(Error Passive),为显性,表示发送节点处于主动错误状态(Error Active)

EDL位可以表示CAN报文还是CAN FD报文;BSR位表示位速率转换,该位为隐性时,表示报文操BSR位到CRC界定符之间使用转换速率传输,其余场位使用标准位速率,该位为显性时,表示报文以正常的CAN FD总线速率传输;通过ESI位可以方便地获悉当前节点所处的状态。

3.新的CRC算法

CAN总线由于位填充规则对CRC的干扰,造成错帧漏检率未达到设计意图。CAN FD对CRC算法作了改变,即CRC以含填充位的位流进行计算。在校验和部分为避免再有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。CAN FD的CRC场扩展到了21位。由于数据场长度有很大变化区间,所以要根据DLC大小应用不同的CRC生成多项式,CRC_17,适合于帧长小于210位的帧,CRC_21,适适合于帧长小于1023位的帧。CRC多项式如下图所示:
CRC多项式

4.新的DLC编码

CANFD 数据帧采用了新的新的DLC编码方式,在数据场长度在0-8个字节时,采用线性规则,数据场长度为12-64个字节时,使用非线性编码。如下图:
在这里插入图片描述

总结

CAN FD协议是CAN-BUS协议的最新升级,将CAN的每帧8字节数据提高到64字节,波特率从最高的1Mbps提高到8-15Mpbs,使得通讯效率提高8倍以上,大大提升了车辆的通讯效率。

参考:
http://www.cechina.cn/company/50633_156096/messagedetail.aspx
https://wenku.baidu.com/view/405cac789a6648d7c1c708a1284ac850ad0204f8.html
http://www.360doc.com/content/16/1212/12/30375878_614027257.shtml

CAN 总线自 总线自 19 世纪 80 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 年代诞生以来,在汽车、工业控制等行得到了广泛使用。但随 着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统着汽车电子、工业自动化的 蓬勃发展,总线上设备数量据都大增加而传统CAN 只能支持最高 只能支持最高 只能支持最高 只能支持最高 1M bit/s bit/s传输速率 传输速率 ,这就给 ,这就给 ,这就给 CAN CAN通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高通信带 来的极大挑战。为满足更高宽及数据吞吐量, 宽及数据吞吐量, 宽及数据吞吐量, 宽及数据吞吐量, CAN FD CAN FD CAN FD应运而生。
03-27
<think>嗯,用户想了解CANfd协议或其相关实现。首先,我需要回顾一下自己对CANfd的了解。CANfd是传统CAN的升级版,主要提升了数据传输速率和有效载荷。传统CAN的最大数据长度是8字节,而CANfd可以达到64字节,同时通信速率也更高,比如在数据段可以达到5 Mbps甚至更高。 接下来,用户可能需要知道CANfd的基本原理,比如帧结构的变化。传统CAN的帧结构包括仲裁段、控制段、数据段等,而CANfd在控制段做了扩展,允许更长的数据长度。同时,CANfd的仲裁段速率和传统CAN保持一致,确保兼容性,但数据段使用更高的速率。 然后是关于实现部分。用户可能想知道如何在硬件和软件层面实现CANfd。硬件方面,需要支持CANfd的控制器,比如一些微控制器已经集成了CANfd模块。软件方面,可能需要使用支持CANfd的驱动和协议栈,比如Linux的SocketCAN是否支持CANfd?根据引用[1],SocketCAN支持PF_CAN协议族,但需要确认是否支持CANfd的具体参数设置,比如CAN_RAW是否支持更大的数据帧。 另外,用户提到的引用[1]中提到了socket(PF_CAN, SOCK_RAW, CAN_RAW),可能想知道如何修改参数来支持CANfd。可能需要使用特定的选项或协议类型,比如是否需要选择不同的协议,或者设置CANFD_FRAME标志。例如,在SocketCAN中,可能需要配置CAN接口为CANfd模式,并启用相应的选项。 还有,用户可能关心CANfd的应用场景,比如汽车电子中的高带宽需求,或者工业自动化中的实时数据传输。同时,可能想了解CANfd与经典CAN的兼容性,比如是否可以在同一网络中混合使用,或者需要网关进行转换。 另外,根据引用[2],提到了异步和同步的传输行为,可能CANfd在传输模式上是否有改进,比如是否支持更高效的异步通信,或者如何处理错误帧和重传机制。 最后,用户可能需要一些示例代码,展示如何在SocketCAN中发送和接收CANfd帧,例如设置socket参数、配置帧结构、启用CANfd支持等。可能需要结合引用[1]中的代码示例,扩展为支持CANfd的形式,比如使用CANFD_MTU和相应的数据结构。 总结,回答需要涵盖CANfd的原理、帧结构、性能提升、硬件软件实现方法,特别是基于SocketCAN的实现步骤,并引用提供的参考文献中的相关内容,如socket设置和协议处理机制。同时,生成的相关问题需要覆盖协议比较、应用场景、兼容性、错误处理等方面,帮助用户深入理解。</think>### CAN FD协议概述与实现 CAN FD(Flexible Data-Rate)是传统CAN协议的升级版本,主要提升数据传输速率和有效载荷长度。其核心改进包括: 1. **数据段速率提升**:仲裁段沿用经典CAN的速率(通常≤1 Mbps),数据段可提升至最高5 Mbps(理论可达8 Mbps)[^1]。 2. **数据长度扩展**:单帧最大数据长度从8字节扩展至64字节[^2]。 3. **增强校验机制**:新增CRC校验位以提高长帧传输的可靠性。 #### 帧结构对比 $$经典CAN帧:| 仲裁域 | 控制域 | 数据域(0-8B) | CRC | ACK |$$ $$CAN FD帧:| 仲裁域 | 控制域 | 数据域(0-64B) | CRC(21位) | ACK |$$ --- ### SocketCAN实现示例(Linux) 基于引用[1]中提到的PF_CAN协议族,CAN FD实现需要以下步骤: 1. **硬件要求**:需支持CAN FD的控制器(如NXP S32K3系列) 2. **内核配置**:启用SocketCANCAN FD支持 ```c // 创建CAN FD socket int s = socket(PF_CAN, SOCK_RAW, CAN_RAW); // 设置CAN FD模式 setsockopt(s, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &canfd_on, sizeof(canfd_on)); ``` 3. **帧结构定义**: ```c struct canfd_frame frame = { .can_id = 0x123, .len = 64, // 最大64字节 .flags = CANFD_BRS // 启用速率切换 }; memcpy(frame.data, payload, 64); ``` --- ### 关键优化技术 1. **动态相位调整**:根据网络负载自动调整数据段速率[^2] 2. **混合网络支持**:通过网关实现CAN FD与经典CAN协议转换 3. **错误检测增强**:采用双重CRC校验机制(CRC17 + CRC21) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子开发攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值