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

工业通信--CRC校验分类及实现细节

CRC校验是工业通信(以及存储、网络)领域最核心、最复杂的校验机制之一,需要从理论分类、底层实现、工程应用三个维度把 CRC 理解透。


一、CRC 校验核心分类

CRC(Cyclic Redundancy Check,循环冗余校验)本质是一种基于多项式除法的差错检测码。其分类主要依据生成多项式的不同。

1. 按生成多项式标准分类(最常用)

分类标准 / 多项式应用场景核心特点
CRC-8CRC-8,CRC-8/CDMA2000,CRC-8/DARC短数据包、嵌入式、车载通信8 位校验值,速度快,适合小数据。
CRC-16CRC-16/IBM(CRC-16)、CRC-16/CCITT(XMODEM)串口通信 (UART)、Modbus、早期网络最经典,兼容性极强,16 位结果。
CRC-32CRC-32/ISO(IEEE 802)、CRC-32C(Castagnoli)以太网、ZIP/PNG 文件、存储、网络包32 位结果,检错能力极强,应用最广。
CRC-64/128高级标准海量数据、高端存储、安全领域极高安全性,计算开销大。

2. 按计算方式分类(实现层面)

  • 按位计算 (Bit-wise)
    • 最原始、标准实现。
    • 每次处理 1 位数据,通过移位寄存器和异或运算生成结果。
    • 代码简单,但速度慢。
  • 按字节 / 查表计算 (Byte-wise/Lookup Table)
    • 工程首选
    • 预先计算好 256 个字节的 CRC 值表,计算时直接查表,一次处理 8 位数据。
    • 速度极快,是按位计算的数倍甚至数十倍。
  • 按字 / 硬件计算 (Word/Hardware)
    • 芯片级实现,如STM32CRC外设。
    • 支持 32 位并行计算,速度最快,几乎不消耗 CPU。

二、工程落地-核心实现细节

CRC 的正确性,完全取决于以下4 个关键参数的配置,任何一个错,结果全错。

1. 生成多项式 (Polynomial)

  • 定义:一个代表除法运算的二进制数,决定了校验的 “规则”。
  • 表示:通常用十六进制简写,例如CRC-32的多项式是0x04C11DB7
  • 必须严格匹配:收发双方必须使用完全相同的多项式,否则校验必然失败。

2. 初始值 (Initial Value)

  • 定义:CRC 计算寄存器的起始值
  • 常见值:0x00(全零初始)、0xFF(全一初始)、0xFFFF(CRC-16 常用)。
  • 必须一致:初始值不同,最终结果天差地别。

3. 输入反射 (Input Reflected)

  • 定义:每一个字节在参与计算前,是否需要按位倒序
    • True:倒序(如0x01->0x80)。
    • False:不倒序。
  • 原因:硬件串行传输通常是低位先发(LSB),而 CRC 计算通常高位在先(MSB),为了对齐,需要反射输入。

4. 输出反射 (Output Reflected)

  • 定义:整个计算结果在最终输出前,是否需要按位倒序
  • 与输入反射配合使用,保证数据流的完整性。

5. 结果异或值 (Final XOR Value)

  • 定义:计算出的最终 CRC 值,在输出前需要异或一个固定值。
  • 目的:增加复杂性,防止全零数据导致的 CRC 结果为全零,降低误码率。

三、工程实现代码(以 CRC-16/CCITT 为例)

这是面试和写代码时最直接能用的版本,提供查表法(高效)和按位法(理解)。

1. 查表法(推荐,工程首选)c语言

#include <stdint.h> // CRC-16/CCITT 标准参数 // 多项式: 0x1021, 初始值: 0xFFFF, 输入反射: true, 输出反射: true, 最终异或: 0x0000 static const uint16_t crc16_table[256] = { // 预先计算好的256项表,此处省略完整内容,仅展示结构 0x0000, 0x1021, 0x2042, 0x3063, ... , 0xEFDE, 0xFFFC }; uint16_t crc16_ccitt(uint8_t *data, uint32 len) { uint16_t crc = 0xFFFF; // 初始值 while (len--) { // 输入反射:直接取字节 crc = (crc << 8) ^ crc16_table[(crc >> 8) ^ *data++]; } // 输出反射与最终异或:根据标准,此处为0,直接返回 return crc; }

2. 按位法(纯原理,理解用)c语言

uint16_t crc16_ccitt_bitwise(uint8_t *data, uint32 len) { uint16_t crc = 0xFFFF; while (len--) { crc ^= (uint16_t)(*data++) << 8; // 高8位异或 for (int i = 0; i < 8; i++) { if (crc & 0x8000) { // 最高位为1 crc = (crc << 1) ^ 0x1021; // 左移并异或多项式 } else { crc <<= 1; // 左移 } } } return crc; }

四、常见 CRC 标准对照表(速记)

标准名称多项式 (Hex)初始值输入反射输出反射最终异或应用
CRC-80x070x00FalseFalse0x00医疗、工业
CRC-16/IBM0x80050x0000TrueTrue0x0000Modbus
CRC-16/CCITT0x10210xFFFFTrueTrue0x0000串口、XMODEM
CRC-320x04C11DB70xFFFFFFFFTrueTrue0x00000000以太网、ZIP
CRC-32C0x1EDC6F410xFFFFFFFFTrueTrue0x00000000iSCSI、存储

五、总结

CRC 校验看似复杂,其实就是一套固定的参数 + 一套固定的算法

  • 选型:根据你的数据长度和场景选标准(串口用 CRC-16/CCITT,网络用 CRC-32)。
  • 实现查表法是工业界的绝对主流,代码量小,速度极快。
  • 避坑参数不匹配是 99% CRC 校验失败的原因,一定要和对方确认清楚多项式、初始值、反射位、最终异或这四个值。
http://www.jsqmd.com/news/680188/

相关文章:

  • 告别字库臃肿!ESP32+LVGL项目实战:将中文字库丢进SD卡,轻松实现多字体切换
  • 河北钢格板哪家好?2026年河北安平钢格板选购指南:河北钢格板源头厂家优质盘点 - 栗子测评
  • 三菱FX3SA的ST语言实战:手把手教你实现Modbus CRC校验
  • STM32F103 RTC掉电日期丢失?别慌,用CubeMX和备份寄存器轻松搞定
  • 2026年靠谱的家居PET收纳模具/酒盒包装PET收纳模具优质供应商推荐 - 品牌宣传支持者
  • 测试自动化工程师2026学习路线:从工具精通到质量赋能
  • 零代码文本分析:3步完成专业级内容挖掘的完整指南
  • 手把手教你用GD32E230调试SSD2828:从硬件补晶振到SPI引脚调换的踩坑实录
  • 海思3516a OSD水印实战:用SDL_ttf+FreeType2生成动态文字叠加(附完整代码)
  • 【最后72小时开放】Docker 27 AI调度白皮书核心章节泄露:含17个生产级dockerd.json配置模板(含安全沙箱+量化感知调度)
  • 2026小型跑步机精选:微云跑步机/静音跑步机/小型跑步机/家用跑步机/减震跑步机/跑步机/选择指南 - 优质品牌商家
  • 计算机毕业设计:Python农产品销售智能分析与可视化系统 Flask框架 数据分析 可视化 机器学习 数据挖掘 大数据 大模型(建议收藏)✅
  • ESP32C3驱动ST7735屏玩出新花样:做个桌面电子时钟(代码详解)
  • 成都本地旅行社实测对比:成都正规旅行社/成都靠谱旅行社/成都周边一日游/成都周边两日游/成都周边亲子游/成都周边古镇旅游攻略/选择指南 - 优质品牌商家
  • 用Arduino搞定维特JY61P姿态传感器:从串口数据解析到欧拉角获取(附完整代码)
  • 第二篇:Nacos服务注册与发现原理
  • 柔性振动盘厂家推荐苏州智特斯自动化设备有限公司-苏州振动盘厂家,提供一站式解决方案 - 栗子测评
  • Ansys Comsol 力磁耦合仿真:金属磁记忆检测与压磁检测等多种电磁无损检测技术磁场分析...
  • LinkSwift网盘直链下载助手:掌握高效下载技术实现网盘文件极速获取
  • 专家视角看Java线程线程退出时的资源拆解工程
  • 给DSP新手:用TMS320F28335的PIE中断,从“肚子痛”到“手被割伤”都管起来
  • 2026年进口真空泵维修保养哪家好?进口真空泵维修保养公司推荐:天之华领衔,真空泵维修保养哪家靠谱精选榜单 - 栗子测评
  • 宜选影票API从工具变生态你知道吗 这波趋势真的能挖到大流量!
  • 直流稳压/电源定制厂家哪家好?2026直流稳压/通信电源/直流转换器优质厂家优选 - 栗子测评
  • 告别纯理论!用Wireshark抓包带你透视华为防火墙NAT64的转换全过程
  • 2026年钢格板厂家推荐合集:热镀锌钢格板厂家盘点,不锈钢/压焊/插接/平台钢格板厂家甄选 - 栗子测评
  • Flutter 鸿蒙应用离线模式实战:无网络也能流畅使用
  • 分子泵维修保养哪家好?进口分子泵维修保养哪家好?2026年精选进口分子泵维修保养公司推荐/分子泵维修公司推荐:天之华领衔 - 栗子测评
  • 5个智能功能让英雄联盟游戏体验提升300%:League Akari 终极解决方案
  • 2026北京灭火器干粉回收厂家名录:北京七氟丙烷回收/北京七氟丙烷检测/北京七氟丙烷灭火器回收/北京七氟丙烷灭火器检测/选择指南 - 优质品牌商家