crc校验方法及示例

crc校验简介 crc即循环冗余校验码(cyclic redundancy check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(crc)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
crc应用场合 crc校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,crc是最著名的一种。crc的全称是循环冗余校验,其特点是:检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,crc无处不在:著名的通讯协议x.25的fcs(帧检错序列)采用的是crc-ccitt,winrar、nero、arj、lha等压缩工具软件采用的是crc32,磁盘驱动器的读写采用了crc16,通用的图像存储格式gif、tiff等也都用crc作为检错手段。下面介绍硬件生成与计算crc的过程。
crc16硬件生成过程 下面以最常用的crc-16为例来说明其生成过程。
crc-16码由两个字节构成,在开始时crc寄存器的每一位都预置为1,然后把crc寄存器与8-bit的数据进行异或,之后对crc寄存器从高到低进行移位,在最高位(msb)的位置补零,而最低位(lsb,移位后已经被移出crc寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果lsb为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时crc寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后crc寄存器内的值即为最终的crc值。
crc硬件计算过程 1.设置crc寄存器,并给其赋值ffff(hex)。
2.将数据的第一个8-bit字符与16位crc寄存器的低8位进行异或,并把结果存入crc寄存器。
3.crc寄存器向右移一位,msb补零,移出并检查lsb。
4.如果lsb为0,重复第三步;若lsb为1,crc寄存器与多项式码相异或。
注意:该步检查lsb应该是右移前的lsb,即第3步前的lsb。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终crc寄存器的内容即为crc值。
关于crc-16校验 概要 关于crc-16生成多项式用x3+x2+1那样的x的乘数的表示形式,来代替二进制代码1101的表述。生成多项式若为素多项式就可以,为了使出错检测最优化,可以定义和提出几个标准生成多项式。rtu protocol采用与二进制代码1 1000 0000 0000 0101对应的生成多项式(x16+x15+x2+1)。这时生成的crc为crc-16。
算法 在下页的图3.1中表示了crc-16的计算算法。请结合后面所示的计算例一起进行理解。 该图为在发送侧进行crc数据的计算,最终作为检查代码附加在发送帧中。 接收处理也采用同一算法。但是还包括把在接受侧计算的crc 数据和发送的crc数据进行比较的处理。
计算例 读出的发送数据例
站号1,fc = 3,功能代码p02 (p为03 h,02为02h),读出数据数20个,gp为生成多项式(1010 0000 0000 0001)
通过以上的计算,发送数据为如下所示。
帧长计算 为了计算crc-16,必须知道可变长的消息长度。所有消息类型的长度可以由表3.14应答消息长度来决定。

图个明白|尾纤和跳线的区别-科兰
红外发射器DIY,遥控电视空调!
多功能LTC3830和LTC3832实现降压、升压和反相应用的设计
小米疑似正在研发新型Google Wear OS智能手表
简要分析马勒动力总成的开发布局的设计方案
crc校验方法及示例
SFS全功能气密性测试仪用于汽车底盘气密性测试
介绍3种方法跨时钟域处理方法
诺基亚6,你让我放心买国产机了!
锂电池寿命衰减的原因有哪些
什么是国外动环监控系统
荣耀移动电源2上架 支持18W双向快充售价99元起
贞光科技:车规级芯片的ASIL标准有哪些?
基于数字伺服控制器的吊舱陀螺稳定平台设计
法拉电容和普通电容的储能密度一样吗?
锂电三元材料的制备技术方法解析及最新研究!
RF MEMS关键技术与器件
什么是串行通信和接口
Arm发布新型NPU架构,助力嵌入式机器学习发展
5G频段和信道带宽分布图