驱动开发篇] Can通信进阶 --- Can报文的三次采样
一、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由两类采样模式决定:
- 单点采样(Single Sampling):同标准CAN一样,在采样点取一次样。
- 三点采样(Triple Sampling):在某些实现(尤其用于抗干扰)或者特定配置下,CAN FD允许配置为三点采样。
- CAN FD由两类采样模式决定:
三点采样的机制(可选项,一般只在仲裁段低速通信才启用):
- 在位时内选定的三个时间点各取一次样,然后采用“多数原则”判定该位的最终电平(即有两个以上为某状态则认为该位是该状态)。
- 在**Data Phase(数据段)**高速部分,通常仍为单点采样,以减少时序复杂度和资源消耗。
实现方式:
- 三点采样在高速阶段一般不用,因为对同步要求更高,只有在某些兼容性或特殊要求下可配置。
- 当前主流CAN FD控制器大多数只在仲裁段支持三点采样。
传统 CAN/CAN FD 控制器在每个位时间内的特定采样点对总线取样一次。启用三次采样时,控制器会在靠近采样点前后各加一次,再在采样点取一次,也就是:
- S1(采样点之前)
- S2(采样点)
- S3(采样点之后)
最终结果由多数原则决定(即至少两次一致则取该值),用来提升抗干扰能力。
1.4. 配置位置
- 三次采样仅在仲裁段(Arbitration Phase)有效,数据段(Data Phase)通常不支持。
- 配置项通常在控制器的相关寄存器中。
1.5. 常见步骤
- 进入CAN控制器初始化/休眠/配置模式。
- 设置三次采样相关的寄存器或位。
- 配置其他位时序参数(BSP、BRP、SJW、TSEG1、TSEG2等)。
- 退出配置模式,进入正常运行。
二、CAN FD与标准CAN在采样机制上的主要区别
采样次数的灵活性:
- 标准CAN:通常只能选择单点采样。
- CAN FD:可支持三点采样,但通常只有在仲裁段(Arbitration Phase)低速模式、需要兼容老模块时才用。
为什么有三点采样?
- 三点采样在噪声较大、信号完整性较差场合(尤其长线、旧线束、物理层匹配不好时)可以提升抗干扰能力。
- 但在高速数据传输(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 的高速数据段普遍采用单点采样。