crc校验算法
CRC(循环冗余校验,Cyclic Redundancy Check)是一种常用的数据错误检测算法,通过生成校验码来验证数据传输或存储的完整性。以下是核心原理和步骤:
核心原理
-
多项式除法
- 将数据视为二进制多项式(如
1011= (x^3 + x + 1))。 - 用预定义的生成多项式(如 CRC-16 的
0x8005)对数据进行模2除法(异或操作)。 - 除法后的余数即为 CRC 校验码。
- 将数据视为二进制多项式(如
-
校验码附加
- 计算出的 CRC 校验码附加到原始数据末尾,一起传输或存储。
-
接收方验证
- 接收方用相同生成多项式对完整数据(含 CRC 码)再做一次模2除法。
- 若余数为 0,则数据正确;否则存在错误。
关键步骤(示例)
假设数据:11010011101100,生成多项式:1011(CRC-4)。
-
数据补位
在数据末尾补生成多项式位数-1个0(此处补 3 个0):
11010011101100→11010011101100**000** -
模2除法(异或操作)
11010011101100000 ÷ 1011 - 逐位对齐,按位异或(相同为0,不同为1)。 - 过程示例: 11010011101100000 ^ 1011 → 第一次对齐 --------- 01100011101100000 ^ 1011 → 第二次对齐 --------- 00111011101100000 ^ 1011 → 继续...最终得到余数
010(若不足位数,前面补0)。 -
附加校验码
原始数据 + 余数:11010011101100+010 -
接收方验证
对11010011101100010用1011再次除法:- 若余数为
0,数据正确;否则错误。
- 若余数为
常用生成多项式(标准)
| CRC 类型 | 生成多项式(十六进制) | 应用场景 |
|---|---|---|
| CRC-8 | 0x07 | 简单通信协议 |
| CRC-16 | 0x8005 | Modbus, USB |
| CRC-32 | 0x04C11DB7 | ZIP, Ethernet, PNG |
特点
- 检错能力
- 可检测单比特错、双比特错、奇数个错、突发错误(长度 ≤ 校验码位数)。
- 效率
- 计算速度快(硬件或查表优化)。
- 非加密
- 仅用于错误检测,无加密功能。
代码实现(Python 示例)
def crc16(data: bytes) -> int:
crc = 0xFFFF # CRC-16 初始值
poly = 0x8005 # 生成多项式
for byte in data:
crc ^= byte << 8
for _ in range(8):
if crc & 0x8000:
crc = (crc << 1) ^ poly
else:
crc <<= 1
crc &= 0xFFFF # 保持16位
return crc
# 使用示例
data = b"Hello"
checksum = crc16(data)
print(f"CRC-16 校验码: {checksum:04X}") # 输出十六进制
常见问题
- 为什么余数为0表示正确?
数据附加 CRC 码后形成的多项式可被生成多项式整除,余数为0即验证通过。 - CRC 能纠错吗?
不能,只能检测错误。纠错需用更复杂的算法(如 Reed-Solomon)。 - 如何选择生成多项式?
根据标准协议(如以太网用 CRC-32),或基于错误检测需求定制。
CRC 因其高效性和可靠性,广泛应用于网络通信、存储系统(ZIP/PNG)、工业控制等领域。
fpga报告crc故障是什么意思
方法,通过对发送的数据进行计算并附加到数据末尾,接收方能够使用相同的校验算法来检测传输中的错误。CRC可以检测多种不同类型的错
2024-01-04 11:06:15
CRC校验码并行计算的FPGA实现
用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件
资料下载
姚小熊27
2021-03-28 09:34:24
如何使用51单片机实现CRC校验算法
介绍了CRC(循环冗余码校验)原理及集成混合信号片上系统单片机C8051F的新特性,推导获得以字节为单位的数据序列CRC码递推
资料下载
佚名
2019-12-17 16:09:41
常用的校验算法有哪些?
常用的校验算法有哪些,是不是和通信规约有关。比如MODBUS一般都用CRC16(不确定是不是叫这个)。这些校验算法是之前积累下来的吗。自己也可以
TSMaster中如何自定义CRC校验算法
在通讯过程中,用户需要利用CheckSum信号对传输数据用自己规定的算法逻辑进行校验,来看数据在传输过程中是否被更改或传输错误。本文主要介绍TSMaster如何设置自己的
2023-09-09 08:23:25
CRC校验快速算法的原理及实现改进设计
文献[1]提出了一种针对整字节的CRC快速算法。它的基本思想是预先生成一个余式表,通过查表,利用递推原理进行快速计算。现以 CCITT(国际电话电报咨询委员会)建议的,用于基本型数据传输规程的生成多项式为例,简要介绍
2020-09-14 17:42:48
基于TMS320C64x的CRC校验算法分析
CRC(Cyclic Redundancy Check)循环冗余校验码是数据通信领域中常用的一种差错校验码,在早期的通信中运用广泛。
2020-08-10 16:46:51
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览