crc校验码计算
更多
CRC(循环冗余校验)是一种数据传输错误检测方法,通过计算校验码附加到数据帧中,接收方可验证数据完整性。以下是计算步骤及示例(使用中文说明):
核心步骤
-
确定生成多项式(Generator Polynomial)
常用标准如:- CRC-8:
x⁸ + x² + x + 1→100000111(二进制) - CRC-16:
x¹⁶ + x¹⁵ + x² + 1→11000000000000101 - CRC-32(以太网):
x³² + x²⁶ + x²³ + ... + 1→100000100110000010001110110110111
- CRC-8:
-
数据填充
原始数据后补0,数量 = 生成多项式位数 - 1(如多项式5位则补4个0)。 -
模2除法(异或运算)
用填充后的数据除以生成多项式,逐位进行 异或(XOR) 操作(不进位):- 每一步取当前被除数的最高位开始计算。
- 若首位为
1,则用生成多项式做异或;若为0,则用全0做异或。 - 重复直到处理完所有位。
-
获取校验码
最终余数即为 CRC 校验码(位数 = 生成多项式位数 - 1)。若不足则补前导0。 -
生成传输帧
原始数据 + CRC 校验码。
计算示例
假设:
- 原始数据:
11010011 - 生成多项式:
x³ + x + 1→1011(4位多项式,需补3个0)
步骤分解
- 数据填充:
11010011+000→11010011000 - 模2除法(用
1011除11010011000):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` - CRC 校验码:
1110 - 传输帧:原始数据
11010011+ CRC1110→110100111110
关键规则
- 模2除法本质:等价于 XOR 运算(无进位加减法)。
- 校验码长度:若多项式为 n 位,校验码长度为 n-1(如
1011对应 3 位 CRC)。 - 初始值/反转:某些标准要求初始值或位反转,需参考具体协议(如 CRC-32 需预置
0xFFFFFFFF)。
编程实现(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)加速计算。
常见误区
- 生成多项式位数 = CRC 码长度 +1(如
0x1021对应 CRC-16)。 - 除法前数据必须补 CRC长度个0。
- 除法运算本质是 XOR,非传统除法。
如有具体多项式或数据样例,可提供进一步计算演示!
如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码
在运行过程中使用MCU内嵌的CRC硬件模块计算对应代码区域的CRC校验码
2023-10-27 11:49:22
CRC校验码并行计算的FPGA实现
用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它
资料下载
姚小熊27
2021-03-28 09:34:24
ModBus CRC16校验码学习笔记(附手稿)精选资料分享
的意思是使用的Modbus CRC16校验的方式得来的。后面需要使用程序来计算,在百度之后了解了Modbus
2021-08-30 06:28:27
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机