登录/注册

crc校验码计算

更多

CRC(循环冗余校验)是一种数据传输错误检测方法,通过计算校验码附加到数据帧中,接收方可验证数据完整性。以下是计算步骤及示例(使用中文说明):


核心步骤

  1. 确定生成多项式(Generator Polynomial)
    常用标准如:

    • CRC-8:x⁸ + x² + x + 1100000111(二进制)
    • CRC-16:x¹⁶ + x¹⁵ + x² + 111000000000000101
    • CRC-32(以太网):x³² + x²⁶ + x²³ + ... + 1100000100110000010001110110110111
  2. 数据填充
    原始数据后补 0,数量 = 生成多项式位数 - 1(如多项式5位则补4个0)。

  3. 模2除法(异或运算)
    用填充后的数据除以生成多项式,逐位进行 异或(XOR) 操作(不进位):

    • 每一步取当前被除数的最高位开始计算。
    • 若首位为 1,则用生成多项式做异或;若为 0,则用全 0 做异或。
    • 重复直到处理完所有位。
  4. 获取校验码
    最终余数即为 CRC 校验码(位数 = 生成多项式位数 - 1)。若不足则补前导0。

  5. 生成传输帧
    原始数据 + CRC 校验码。


计算示例

假设:

步骤分解

  1. 数据填充:11010011 + 00011010011000
  2. 模2除法(用 101111010011000):
     11010011000
    ⊕ 1011       → 首位为1,用1011异或
    ----------
     01100011000
    ⊕  1011      → 移位后首位1,用1011异或
    ----------
     00111011000
    ⊕   1011     → 首位1,用1011异或
    ----------
     00001111000
    ⊕     1011   → 首位1,用1011异或
    ----------
     00000101100
    ⊕      1011  → 首位1,用1011异或
    ----------
     00000010000
    ⊕       1011 → 首位1,用1011异或
    ----------
     00000001110 → 余数(CRC码)= `1110`
  3. CRC 校验码:1110
  4. 传输帧:原始数据 11010011 + CRC 1110110100111110

关键规则


编程实现(Python 伪代码)

def crc(data: bytes, poly: int) -> int:
    crc_value = 0  # 初始化(不同协议可能非0)
    for byte in data:
        crc_value ^= byte << 8  # 与当前字节合并
        for _ in range(8):      # 处理8位
            if crc_value & 0x8000:  # 检查首位是否为1
                crc_value = (crc_value << 1) ^ poly  # 异或多项式
            else:
                crc_value <<= 1
    return crc_value & 0xFFFF       # 返回16位校验码(CRC-16为例)

实际应用中建议使用查表法(Lookup Table)加速计算。


常见误区

  1. 生成多项式位数 = CRC 码长度 +1(如 0x1021 对应 CRC-16)。
  2. 除法前数据必须补 CRC长度个0
  3. 除法运算本质是 XOR,非传统除法。

如有具体多项式或数据样例,可提供进一步计算演示!

基于Verilog语言实现CRC校验

CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验

2025-03-24 10:36:56

如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码

在运行过程中使用MCU内嵌的CRC硬件模块计算对应代码区域的CRC校验码

2023-10-27 11:49:22

CRC校验码的多种Verilog实现方式

CRC循环冗余校验码(Cyclic Redundancy Check),检错码。

2023-06-21 15:03:47

02、单片机C语言之CRC32校验码

CRC32校验码主要用来检验数据在传输过程中的完整性一、发送方1、计算要发送数据的CR

资料下载 佚名 2022-01-13 12:59:16

CRC校验码并行计算的FPGA实现

用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它

资料下载 姚小熊27 2021-03-28 09:34:24

CRC校验码的C语言程序免费下载

本文档的主要内容详细介绍的是CRC校验码的C语言程序免费下载。

资料下载 吴必发 2020-04-22 08:00:00

CRC16校验码计算器v1.2版应用程序免费下载

用于计算校验CRC16校验结果,软件很好用,单片机485通讯验证的好工具

资料下载 ah此生不换 2019-10-21 08:00:00

CRC计算工具CRC校验码计算器应用程序免费下载

本文档的主要内容详细介绍的是CRC计算工具CRC校验码

资料下载 莫俊 2019-07-01 08:00:00

工控常用LRC XOR累加和CRC校验工具校验码自动生成软件多计算方式

CRC校验工具 校验码自动生成软件支持十几种CRC

2022-11-25 14:27:40

CRC32校验码主要用来做什么的

CRC32校验码主要用来检验数据在传输过程中的完整性一、发送方1、计算要发送数据的CR

2022-02-25 06:29:27

求基于LABVIEW编程的CRC16/X25校验码校验程序

求基于LABVIEW编程的CRC16/X25校验码校验程序

2022-02-24 11:07:23

CRC16的计算校验码的方式有哪几种?

CRC16的计算校验码的方式有哪几种?如何使用Delphi编写Modbus RTU C

2021-11-03 07:20:27

怎样使用Delphi去编写Modbus RTU CRC16的校验码

如何使用Delphi编写Modbus RTU CRC16的校验码

2021-09-09 07:07:13

ModBus CRC16校验码学习笔记(附手稿)精选资料分享

的意思是使用的Modbus CRC16校验的方式得来的。后面需要使用程序来计算,在百度之后了解了Modbus

2021-08-30 06:28:27

labview CRC16位校验码生成程序

输入任意长度的16进制字符串,输出CRC校验码高字节和低字节。参考了“mao525159“这位用户的程序

2020-05-23 11:00:40
7天热门专题 换一换
相关标签