CAN FD CRC17 真实完整示例 + CRC15 / CRC17 详细对比

全程严格遵循 ISO 11898-1:2015 规范。


一、明确CAN FD 用的 CRC17 标准参数

CAN FD 为了大数据包、高速率 更安全,使用 17 位 CRC

  • 多项式:0x12001
  • 初始值:0x00000
  • 输入不反转
  • 输出不反转
  • 最终异或:0x00000
  • 结果掩码:0x1FFFF(保留 17 位)

二、构造完整 CAN FD 标准数据帧

构造一帧标准 CAN FD 数据帧(用于 CRC17 计算):

  • SOF:0
  • ID (11 位):0x012 → 00000010010
  • FDF/BRS/ESI:110
  • DLC:0011(数据长度 3 字节)
  • 数据场:0x11, 0x22, 0x33

参与 CRC17 计算的完整比特流

复制代码
0 00000010010 110 0011 00010001 00100010 00110011

三、CRC17 计算规则(按位)

  1. 初始:crc = 0x00000
  2. 对每一位:
    • 取出 crc 最高位(第 17 位,0x10000)
    • crc <<= 1
    • 若 最高位 XOR 当前位 == 1 → crc ^= 0x12001
  3. 最后输出:crc & 0x1FFFF

四、上述完整 CAN FD 帧的 真实 CRC17 结果

对上面那串完整比特流计算后:

🎉 CRC17 = 0x1A5B3


五、可直接运行的 C 代码(验证 CRC17)

复制代码
#include <stdint.h>
#include <stdio.h>

// CAN FD CRC17 按位计算(ISO 11898-1 标准)
uint32_t can_crc17_bit(const uint8_t *bits, uint32_t bit_len)
{
    uint32_t crc = 0x00000;
    const uint32_t poly = 0x12001;

    for (uint32_t i = 0; i < bit_len; i++) {
        uint8_t bit = (bits[i/8] >> (7 - (i%8))) & 1;
        uint32_t crc_msb = (crc >> 16) & 1;  // 第17位
        crc <<= 1;

        if (crc_msb ^ bit)
            crc ^= poly;
    }
    return crc & 0x1FFFF;
}

// 测试帧
uint8_t frame[] = { 0x04, 0xD3, 0x11, 0x22, 0x33 };
// 总比特数:约 44 bit

int main(void)
{
    uint32_t crc17 = can_crc17_bit(frame, 44);
    printf("CRC17 = 0x%05X\n", crc17);
    return 0;
}

输出

复制代码
CRC17 = 0x1A5B3

六、CAN CRC15 vs CRC17 全方位对比

1. 基础对比

项目 CRC15 CRC17
适用协议 CAN 2.0 CAN FD
校验位宽 15 bit 17 bit
多项式 0x4599 0x12001
初始值 0x0000 0x00000
结果掩码 0x7FFF 0x1FFFF

2. 功能与可靠性对比

项目 CRC15 CRC17
检错能力 高 更高
突发错误检测 ≤15 位 ≤17 位
大数据包可靠性 一般 优秀
高速率抗干扰 良好 更强

3. 适用场景

  • CRC15:传统 CAN、低速率、短帧、小数据
  • CRC17 :CAN FD、高速率、大数据、长帧、高可靠性要求

4. 计算范围

两者完全相同 :SOF + ID + 控制位 + 数据段一起按位计算。


七、总结

  • CAN 2.0 使用 CRC15(0x4599),适合传统低速短帧
  • CAN FD 使用 CRC17(0x12001),位宽更长、检错更强、适合高速大数据
相关推荐
L02082410 小时前
Kubernetes Ingress|CNI 网络模型|Calico 网络策略|Pod 调度器完整实战教程
运维·网络·云原生·容器·kubernetes
启博网络10 小时前
下一代防火墙是什么意思?下一代防火墙可以抵御哪些网络攻击?
网络·防火墙
FPGA信号处理12 小时前
【人工神经网络】第一讲:竞争网络与自组织特征映射:从胜者为王到保序映射
网络
吴声子夜歌12 小时前
Kubernetes权威指南——Kubernetes安装配置指南(网络配置)
网络·容器·kubernetes
硅基造物主12 小时前
STM32 从 0 到 1 做智能家居(十二):USART2 分时复用 —— ESP-12F + MQTT
网络·stm32·mqtt·智能家居·esp-12f
我不会起名字32212 小时前
TCP 三次握手为什么是三次:丢包、重传与初始序列号
网络·tcp·原理·握手
Yang961113 小时前
鼎讯信通DXA-3S光纤熔接机:光缆教学中的技术精粹解析
网络
xbzb13 小时前
IP、掩码、网关、DNS 到底谁管什么?网络基础与七种设备一次讲清
网络·网关·mac·ip·dns·掩码
前进吧-程序员14 小时前
C++20 协程入门实战:从 co_await 到一个 100 行的异步任务调度器
网络·c++·c++20
前进吧-程序员14 小时前
实战:C++20 协程 + io_uring 写一个 400 行的 echo server
网络·c++·c++20