当前位置: 首页 > news >正文

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

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

    • 一、CAN FD的采样次数
      • 1.1. 标准规定
      • 1.2. 传统标准CAN采样
      • 1.3. CAN FD的采样策略
        • 1.3.1. 基础采样策略
      • 1.4. 配置位置
      • 1.5. 常见步骤
    • 二、CAN FD与标准CAN在采样机制上的主要区别
    • 三、使用建议
    • 四. 芯片厂商实现
      • 4.1. 实际市面情况
      • 4.2. 例子
        • ① Microchip MCP2517FD
        • ② NXP S32K CAN FD
        • ③ Infineon XMC4000 CAN FD
    • 五、总结对比表

一、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:主要考虑可靠性和简单性,不追求高速率。
    • CAN FD:在数据段(Data Phase)允许更高的速率,因此采样机制也会做对应调整(如通常保持单点采样,但有三点可选)。
  3. 为什么有三点采样?

    • 三点采样在噪声较大、信号完整性较差场合(尤其长线、旧线束、物理层匹配不好时)可以提升抗干扰能力。
    • 但在高速数据传输(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;  // 启用三采

五、总结对比表

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

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

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


http://www.dtcms.com/a/315924.html

相关文章:

  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 深度学习-卷积神经网络CNN-填充与步幅
  • AR文旅新纪元:从黄姚古镇到秦始皇陵,虚实共生的沉浸式体验革命
  • 华为云云产品的发展趋势:技术创新驱动数字化未来
  • 基于Docker的RabbitMQ运行参数设置
  • 基于华为开发者空间的Open WebUI数据分析与可视化实战
  • 光伏清洗机器人是什么?艾利特协作机器人如何重塑新能源运维效率
  • 【18】C实战篇——C语言 文件读写【fputc、fgetc、fputs、fgets】
  • FPGA学习笔记——简易的DDS信号发生器
  • 力扣106:从中序与后序遍历序列构造二叉树
  • Android 之 Kotlin 和 MVVM 架构的 Android 登录示例
  • 宝塔(免费版9.2.0)的docker拉取仓库失败的加速方法
  • 数据挖掘,到底是在挖掘什么?
  • 27-数据仓库与Apache Hive-2
  • 26-数据仓库与Apache Hive
  • LTR-308ALS-01 LiteOn光宝高精度光耦隔离器 5000Vrms持续隔离电压
  • Python-初学openCV——图像预处理(七)——亮度变换、形态学变换
  • 基于Flask的微博话题多标签情感分析系统设计
  • 李宏毅深度学习教程 第12-13章 对抗攻击 + 迁移学习transfer learning
  • NLP——BERT模型全面解析:从基础架构到优化演进
  • Idea无法识别Maven项目处理
  • 机器翻译的局限性:歧义、文化差异、专业术语翻译难题
  • Python-深度学习--1交叉熵损失函数
  • aab文件直接安装到手机
  • 西门子PLC基础指令4:置位指令 S、复位指令 R
  • 超越注意力机制
  • 【基础】第二篇 Java 类的定义、构造器、成员变量与方法详解
  • hyper-v实战系列:显卡虚拟化(GPU分区)--windows篇详解
  • SpringCloud学习-------Eureka详解
  • FPGA设计思想与验证方法学系列学习笔记003