[驱动开发篇] Can通信进阶 --- CanFD 的三次采样

发布于:2025-08-07 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、CAN FD的采样次数

CAN数据通信中,采样次数(sample points/number of samples)通常指的是在位时间(bit time)内,CAN收发器对总线上电平取样的次数,以判断该位的值。两类协议之间的主要差异体现在采样机制和位时序的调整能力上。

1.1. 标准规定

  • CAN FD 协议本身并没有强制要求必须支持三次采样。它只是允许三次采样作为一种选项存在于控制器设计中,主要是为了兼容老旧设备或改善某些特殊情况下的噪声容忍度。
  • **ISO 11898-1(CAN FD标准)**规定:
    • 必须支持单次采样
    • 三次采样是可选功能,标准并不要求所有芯片必须支持。

1.2. 传统标准CAN采样

  • 采样次数
    • 标准CAN(ISO 11898-1,也叫Classical CAN)只允许单点采样(single sampling)。
    • 即:在每一个位周期的采样点(sample point),收发器只对总线电平采样一次,用于判断该位是“显性”还是“隐性”。
  • 工作机制
    • 通过**重同步段(Re-Sync Segment)再同步(Resynchronization)**机制去提升通信稳定性。

1.3. CAN FD的采样策略

1.3.1. 基础采样策略
  • 采样次数

    • CAN FD由两类采样模式决定:
      1. 单点采样(Single Sampling):同标准CAN一样,在采样点取一次样。
      2. 三点采样(Triple Sampling):在某些实现(尤其用于抗干扰)或者特定配置下,CAN FD允许配置为三点采样。
  • 三点采样的机制(可选项,一般只在仲裁段低速通信才启用):

    • 在位时内选定的三个时间点各取一次样,然后采用“多数原则”判定该位的最终电平(即有两个以上为某状态则认为该位是该状态)。
    • 在**Data Phase(数据段)**高速部分,通常仍为单点采样,以减少时序复杂度和资源消耗。
  • 实现方式

    • 三点采样在高速阶段一般不用,因为对同步要求更高,只有在某些兼容性或特殊要求下可配置。
    • 当前主流CAN FD控制器大多数只在仲裁段支持三点采样。

传统 CAN/CAN FD 控制器在每个位时间内的特定采样点对总线取样一次。启用三次采样时,控制器会在靠近采样点前后各加一次,再在采样点取一次,也就是:

  • S1(采样点之前)
  • S2(采样点)
  • S3(采样点之后)

最终结果由多数原则决定(即至少两次一致则取该值),用来提升抗干扰能力。

1.4. 配置位置

  • 三次采样仅在仲裁段(Arbitration Phase)有效,数据段(Data Phase)通常不支持。
  • 配置项通常在控制器的相关寄存器中。

1.5. 常见步骤

  1. 进入CAN控制器初始化/休眠/配置模式
  2. 设置三次采样相关的寄存器或位
  3. 配置其他位时序参数(BSP、BRP、SJW、TSEG1、TSEG2等)。
  4. 退出配置模式,进入正常运行。

二、CAN FD与标准CAN在采样机制上的主要区别

  1. 采样次数的灵活性

    • 标准CAN:通常只能选择单点采样
    • CAN FD:可支持三点采样,但通常只有在仲裁段(Arbitration Phase)低速模式、需要兼容老模块时才用。
  2. 为什么有三点采样?

    • 三点采样在噪声较大、信号完整性较差场合(尤其长线、旧线束、物理层匹配不好时)可以提升抗干扰能力。
    • 但在高速数据传输(CAN FD数据段),三点采样会带来更大的时序复杂度,得不偿失,因此高速阶段通常关闭。

三、使用建议

  • 如果是全新设计,多采用单点采样,除非你遇到实际的信号质量问题或需兼容老旧节点,可以尝试三点采样。
  • CAN FD的最大优势体现在“数据段速率提升”而不是采样次数本身,但灵活的采样机制为工程师调试提供了更多选项。

四. 芯片厂商实现

4.1. 实际市面情况

  • 大部分主流CAN FD控制器(如NXP、Microchip、Infineon、TI等)
    • 默认或始终 采用单次采样,尤其是在数据段(Data Phase),几乎都是单采样,以保证高速与精度。
    • 对于仲裁段(Arbitration Phase),部分芯片可通过寄存器配置启用“三次采样”,但并不是所有控制器计数器提供。
    • 有的芯片(如Microchip MCP2517FD,NXP S32K,TI TCAN系列等)三次采样仅作为可选项出现,在默认配置和大多数应用中不开启。

4.2. 例子

  • Microchip MCP2517FD:支持三次采样,但需通过配置寄存器显式打开;且只对仲裁段有效,不支持数据段三次采样。
  • Infineon XMC4000 系列:三次采样支持受限,也只用于兼容特殊要求。
  • NXP S32K 系列:文档明确指出仅在仲裁段、低速情况下可用。
  • 部分国产以及老旧CAN控制器:干脆不实现三次采样功能。
① Microchip MCP2517FD
  • 三次采样开关寄存器位为SAM,位于寄存器CxNBTCFG(Nominal Bit Time Configuration)。
  • 这个位只作用于仲裁时段(Nominal Bit Time)。
// 伪代码示例(以MCP2517FD为例)
// 假定NBTCFG寄存器已定义,位0(SAM)为三次采样使能
CxNBTCFGbits.SAM = 1;      // 启用三采
// 其他时序参数配置同CAN基本位时序
② NXP S32K CAN FD
  • 三次采样由寄存器FDCTRL[SAMP]控制。
  • SAMP = 1 时为三次采样,SAMP = 0 为单次采样。
CAN->FDCTRL |= CAN_FDCTRL_SAMP_MASK;   // 启用三采(SAMP=1)
③ Infineon XMC4000 CAN FD
  • 在Node Control Register(NPCR)的SUSEN(SAM)位控制;
  • 只有仲裁段有效,数据段不支持。
XMC_CAN_NODE->NCR |= XMC_CAN_NCR_SAM_Msk;  // 启用三采

五、总结对比表

标准CAN CAN FD
采样次数 单点采样 默认单点采样,仲裁段可选三点采样
速率 最高1Mbps(典型) 仲裁段1Mbps,数据段最高8Mbps+
异常处理 冗余(重同步机制) 更灵活且可配置采样机制
推荐配置 通用单点 默认单点,特殊需求下三点采样

Q:三次采样(Triple Sampling)是否被所有支持CAN FD帧的芯片普遍支持?

三次采样并不是所有支持CAN FD帧的芯片的“标配”功能。它通常只在一些控制器或在仲裁段作为可选项支持。现实应用中,CAN FD 的高速数据段普遍采用单点采样。



网站公告

今日签到

点亮在社区的每一天
去签到