CAN_FD和CAN2.0的不同点——深入浅出理解CAN协议(二)

本系列是在同公司硬件设计、验证的同事1、在完成了CANFD硬件接口IP开发 2、熟悉ISO-11898系列、ISO16845、CAN2.0协议、CANFD协议等以及大量学习资料 3、深入研究其他家CANFD IP(NXP、BOSCH)4、独立开发了对应底层驱动 5、通过CANoe和周立功CAN分析仪完成前述各协议要求的场景 6、以及对autosar底层接口适配后,基本上对CAN协议有了深入的理解。将过程中整理了一些文档分享出来,希望能给新入门和从业多年的相关工程师提供一点点帮助。
主要包含CAN2.0及CANFD协议,后面对CAN2.0及CANFD的不同点做些说明。

  • 可作为入门CAN协议
  • 另外也有深入硬件的理解,从业多年软件工程师也可以学习一二
  • 亦可作为后续查阅使用,常看常新嘛。

CAN(-FD)协议介绍—— 深入浅出理解CAN协议(一)
CAN_FD和CAN2.0的不同点——深入浅出理解CAN协议(二)
CAN error情况及处理机制——深入浅出理解CAN协议(三)
CAN协议一致性测试——深入浅出理解CAN协议(四)

0 简介

直接来看CAN2.0和CANFD,CANFD是在链路层对CAN协议做了升级,物理层并未改变;区别从宏观上来说:帧格式、传输速度和数据长度等上有不同。

  1. 帧类型上CAN2.0支持远程帧,而CANFD不支持(实际使用下来,bosch、nxp家的CANFD是可以支持远程帧收发的,这里应该是应用层做了限制不让发送远程帧);帧格式会在下面第一节详细说明
  2. 传输速度:CAN2.0最大传输速率为1Mbps;CANFD仲裁比特率最高1Mbps,数据比特率最高8Mbps
  3. 传输数据长度:CAN2.0最大DLC=8 bytes;CANFD最大DLC=64 bytes

网上大部分文章都是针对这些的表象和特点在说明,都是软件使用时直接可以看到的,对大部分软件从业人员基本覆盖很全了,我将深入的介绍细节,让软件使用者也有更深的理解;另外对硬件设计也有一点参考。
抛砖引玉,如有更多见解,评论区一起讨论。

1 帧格式Frame structure

在这里插入图片描述

  1. 帧头SOF
  2. 仲裁域
    11bit ID + RTR,canfd不支持remote帧,RTR为reserved
  3. 控制域
    除了IDE、r0和dlc字段,canfd还多了EDL、BRS以及ESI
ABBR英文全拼作用
EDLEXTENDED DATA LENGTHCanfd,区分can和canfd帧
BRSBIT RATE SWITCHCanfd,指示canfd是否变速
ESIERROR STATE INDICATORCanfd,指示发送canfd的错误状态
  1. 数据域
    用户希望发送的数据,经典can支持一次传输0-8bytes的数据,canfd支持一次传输0-64bytes数据
  2. 检查循环冗余序列(CRC)+ DEL
    • 经典can通过15bit的CRC来校验数据,DEL为delimiter,即CRC delimiter
    • canfd的crc算法为crc-17,crc-21,其中dlc>=20时,采用crc-21,dlc<20时,采用crc17
  3. ack域
    包含1bit的ack slot和1bit的ack delimiter。
  4. 帧尾(EOF)
    通过连续7bit的隐性位来表示
  5. IFS
    inter-frame space

Note:
1、对于29bit的扩展帧,标准can和canfd是类似的。

2 CRC 计算

一般软件人员对这块不用深入,只需简单了解即可
在这里插入图片描述

2.1. crc多项式

  • CRC_15,用于经典CAN格式的所有帧。
    在这里插入图片描述

  • CRC_17,用于CANFD帧,数据字段最多16字字节。
    在这里插入图片描述

  • CRC_21,用于CANFD帧且数据字段大于16的CAN帧字节。在这里插入图片描述

2.2. fix stuff bit

  • 在crc多项式发送时,每隔4bit插入1bit的fix stuff bit(该bit和前面bit相反)
  • crc15不会插入fix stuff bit,crc-17和crc-21会按照上面原则插入
  • fix stuff bit不会参与crc计算

2.3. stuff cnt

crc-17和crc-21的crc字段中包含stuff count字段,该字段是sof-data中包含的stuff bit模8后根据规则生成gray-code(格雷码有兴趣可以自行搜索学习下,标准格雷码参考下图)
例如上图crc-21前面stuff bit共14个,14%8 = 6,所以gray-code为101,根据规则末尾补0
在这里插入图片描述

2.4. stuff bit

在crc-15时,sof-data中stuff bit不参与计算;而crc-17和crc-21需要参与计算

2.5. ISO模式和bosch模式

博世在设计协议时做了一个bosch模式;区别在于:

  • bosch模式stuff count是不参与crc计算的(图示逻辑分析仪解码错误,不用在意)
  • crc初始值(0x00000)和ISO模式(0x10000)不一样,
    crc是由硬件来实现,软件不用关心那么细节,只需要收发时配置一致(见到的大部分的CANFD的硬件都支持配置bosch模式)就可以了。(下图是bosch)
    在这里插入图片描述

3 Ack field

Ack filed包括ACK SLOT and the ACK DELIMITER.
在CAN FD格式中,所有节点应接受2 bit的重叠ACK位主导相位作为有效ACK,以补偿接收器之间的相位差;在CAN格式中,所有节点只能接受一个1bit的ack slot。
这也就是说在CAN格式中如果ack delimiter为显性,则控制器会产生form err,而CANFD格式则正常。

4 变速bit timing

canfd是支持变速的,即在数据段支持以更快的速率传输数据;这里就涉及一个问题,就是什么时间变速,以及变速bit的处理。
如下图:

  • 变速阶段从BRS开始到CRC-delimiter结束
  • BRS bit的bit timing :Sync+seg1(N)+seg2(D)
  • CRC-delimiter的bit timing:Sync+seg1(D)+seg2(N)
    在这里插入图片描述
<think>好的,我现在需要帮助用户了解CAN FDCAN2.0的兼容性及实现方法。首先,我得回顾一下CAN FDCAN2.0的基本区别,以及它们之间的兼容性问题。根据用户提供的引用资料,CAN FDCAN2.0协议扩展,主要差异包括数据负载长度比特率的不同。用户提到的引用[1]指出,CAN2.0最多支持8字节数据,而CAN FD支持到64字节,同时在比特率上,CAN FD在仲裁阶段使用低速,数据阶段使用高速。 接下来,我需要理解兼容性的实现方式。根据引用[2],CAN FD帧结构对经典CAN帧的部分位名称进行了修改,但为了向后兼容,可能仍然使用旧名称。这可能涉及到硬件软件的双重支持,例如控制器需要能够处理两种帧格式,或者在协议栈中进行适当的配置。 用户的问题还提到技术细节,所以需要深入探讨具体实现方法。例如,CAN FD节点如何与传统的CAN2.0节点共存于同一网络中。可能的方法包括使用兼容模式,或者网关设备进行帧格式转换。引用[3]提到的视频可能讨论了接口卡的选择,这可能涉及到硬件是否支持两种协议。 另外,需要考虑错误处理帧格式识别。CAN FD帧中的FDF(Flexible Data Rate Format)位是关键,用来区分CAN FD经典CAN帧。当FDF为隐性时,表示是CAN FD帧,显性则为经典帧。这样,传统节点在接收到CAN FD帧时会将其视为错误帧,因此可能需要网络中的全部节点升级或使用网关隔离。 在实现上,控制器可能需要在初始化时配置为混合模式,允许处理两种帧类型。此外,数据长度的动态切换比特率的切换也是技术难点,需要确保在数据阶段正确切换到更高的速率而不影响仲裁阶段的通信。 最后,要确保引用的资料正确应用。例如,引用[1][2]提供了帧结构协议差异,而引用[3]可能涉及硬件选择。需要将这些信息整合,给出清晰的步骤技术细节,帮助用户理解兼容性的实现方式。</think>### CAN FDCAN2.0的兼容性及实现方法 #### 1. **兼容性基础** CAN FDCAN 2.0协议扩展,核心设计目标是**向后兼容**。具体表现为: - **帧格式兼容性**:CAN FD帧保留了经典CAN帧的仲裁段控制段结构,但通过**FDF(Flexible Data Format)位**(原r0位)区分帧类型[^1]。当FDF为隐性(1)时表示CAN FD帧,显性(0)时表示经典CAN帧[^2]。 - **网络共存**:传统CAN 2.0节点会忽略FDF位,但可能因无法解析CAN FD帧的数据段(如高比特率或长数据)而报错。因此,**混合网络需所有节点支持CAN FD或通过网关隔离**。 #### 2. **实现方式与技术细节** ##### (1) **硬件层兼容** - **控制器支持**:需使用支持**混合模式**的CAN FD控制器(如NXP S32K3或Infineon AURIX),可同时处理两种帧类型。 - **比特率切换**: - **仲裁段**:使用与CAN 2.0相同的速率(如500 kbps),确保与经典节点兼容。 - **数据段**:提升至更高速率(如2 Mbps),需硬件支持动态切换,且总线布线需满足高频信号完整性[^1]。 ##### (2) **协议层适配** - **帧格式转换**: ```c // CAN FD帧结构示例(与CAN 2.0对比) CAN2.0帧: | SOF | ID | RTR | IDE | r0 | DLC | Data (0-8B) | CRC | ACK | EOF | CAN FD帧: | SOF | ID | RRS | IDE | FDF | BRS | ESI | DLC | Data (0-64B) | CRC | ACK | EOF | ``` 关键字段: - **BRS(Bit Rate Switch)**:指示数据段是否切换比特率。 - **ESI(Error State Indicator)**:标记节点错误状态[^2]。 - **DLC扩展**:CAN FD的DLC(Data Length Code)支持0-64字节,需控制器自动处理长度映射[^2]。 ##### (3) **网络部署策略** - **网关隔离**:在混合网络中,通过网关将CAN FD域与CAN 2.0域隔离,并转换帧格式(如截断数据至8字节、调整比特率)。 - **错误处理**:传统节点接收到CAN FD帧时可能触发错误帧,需配置CAN FD控制器忽略此类错误或启用**静默模式**。 #### 3. **实际应用案例** - **汽车电子**:ECU升级时,新节点使用CAN FD,旧节点保持CAN 2.0,通过网关(如Vector CAN Gateway)实现协议转换。 - **工业总线**:使用PCIe接口的**CAN FD接口卡**(如Peak PCAN-FD)兼容经典CAN设备,支持动态切换模式[^3]。 #### 4. **验证与测试** - **一致性测试**:需验证FDF位识别、比特率切换时机、CRC校验(CAN FD使用21位CRC,经典CAN为15位)[^1]。 - **工具支持**:使用CANoe/CANalyzer工具模拟混合网络流量,分析错误帧比例实时性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值