`
Tonyguxu
  • 浏览: 279602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CRC循环校验

 
阅读更多

http://www.360doc.com/content/10/0408/22/1102209_22179091.shtml

 

循环校验码(CRC码):

是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

生成CRC码的基本原理:

任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

V(x)=A(x)g(x)=xRm(x)+r(x);

其中:    m(x)为K次信息多项式, r(x)为R-1次校验多项式,

         g(x)称为生成多项式:

g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR

发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。

标准CRC生成多项式如下表:

   名称        生成多项式              简记式*   标准引用 

   CRC-4       x4+x+1                  3         ITU G.704 

   CRC-8       x8+x5+x4+1              0x31                    

   CRC-8       x8+x2+x1+1              0x07                    

   CRC-8       x8+x6+x4+x3+x2+x1       0x5E 

   CRC-12      x12+x11+x3+x+1          80F

   CRC-16      x16+x15+x2+1            8005      IBM SDLC

   CRC16-CCITT x16+x12+x5+1            1021      ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS 

   CRC-32      x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS 

   CRC-32c     x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP

基本算法(人工笔算):

   以CRC16-CCITT为例进行说明,CRC校验码为16位,生成多项式17位。假如数据流为4字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0];

数据流左移16位,相当于扩大256×256倍,再除以生成多项式0x11021,做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。

发送时的数据流为6字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0]、CRC[1]、CRC[0];

举例:

信息字段代码为: m(x)=x6+x4+x3+1    代码为:1011001

生成多项式:    g(x)=x4+x3+1       代码为:11001

m(x)x4=x10+x8+x7+x4 对应的代码记为:10110010000     即 左移4位

m(x)x4 在与 g(x)进行 模2的除法运算,相当于按位异或,计算过程如下:

1 0 1 1 0 0 1 0 0 0 0

1 1 0 0 1

-----------------------------

0 1 1 1 1 0 1 0 0 0 0

1 1 0 0 1

-----------------------------

0 0 0 1 1 1 1 0 0 0 0

      1 1 0 0 1

-----------------------------

      0 0 1 1 1 0 0 0 

          1 1 0 0 1 

-----------------------------

          0 0 1 0 1 0             --------------> 余数     即 校验码



发送数据码为: 10110011010



分享到:
评论

相关推荐

    CRC循环校验码的VHDL程序代码

    本文将深入探讨CRC循环校验码的原理、VHDL实现以及相关知识点。 CRC循环校验码的工作原理是基于多项式除法,其目标是在数据传输或存储过程中检测出错误。在发送数据时,发送方会在原始数据后面附加一个根据特定CRC...

    CRC循环校验码的系统仿真及其应用.rar

    以下是对CRC循环冗余校验码及其MATLAB实现的详细解释: 1. **CRC原理**:CRC的基本思想是通过将数据看作一个二进制多项式,然后与一个预定义的生成多项式进行模2除法。生成多项式的最高位通常为1,且其长度决定了...

    crc循环校验码c的实现

    ### CRC循环校验码在C语言中的实现 CRC(Cyclic Redundancy Check)是一种用于检测数字通信过程中数据错误的方法,常应用于数据传输系统中,如网络通信、磁盘存储等场景。CRC通过生成一个固定长度的校验值来检测...

    CRC循环校验具体算法.rar_CRC-16_CRC校验 c语言_checksum_crc 校验_crc-ccitt

    压缩包内的文件名"CRC循环校验具体算法.txt"可能包含了CRC算法的详细步骤、公式或者C语言的源代码实现。另一文件"www.pudn.com.txt"可能是从网站www.pudn.com下载的相关资料或介绍,可能包含更多关于CRC校验的背景...

    CRC循环校验码详解CRC循环校验码详解

    CRC循环校验码详解

    VC编写的CRC循环校验码

    CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据传输和存储中的错误检测技术。它通过在数据后面附加一个校验码来确保数据的完整性。在VC++环境中,我们可以利用编程实现CRC校验。接下来,我们将...

    CRC循环校验码的C++实现

    总结一下,CRC循环冗余校验是一种有效的错误检测方法,主要应用于数据通信和存储领域。在C++中实现CRC涉及对生成多项式的选择、CRC寄存器的操作以及位级计算。通过测试用例验证CRC计算代码的准确性是必要的。

    C#实现CRC循环冗余校验

    综上所述,CRC循环冗余校验是确保数据完整性的关键手段,在C#中可以通过编程实现。结合ModBus协议,CRC能够帮助我们检测并防止在数据传输过程中可能出现的错误,从而保证了系统的稳定性和可靠性。通过分析和研究提供...

    16位的CRC循环校验

    CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据通信和存储中的错误检测技术。它通过在数据后面附加一个校验码来确保数据的完整性,主要用于检查数据传输或存储过程中可能出现的错误。16位的CRC...

    crc 循环校验 基本内容

    ### CRC循环冗余校验详解 #### 一、CRC循环冗余校验基本概念 CRC(Cyclic Redundancy Check)循环冗余校验是一种广泛应用于数据通信中的差错控制方法,用于检测数字信号在传输过程中的错误。CRC通过在原始数据上附加...

    这是一个计算CRC循环冗余校验码的工具

    CRC校验计算速度快,检错能力强,易于用编码器等硬件电路实现。从检错的正确率与速度、成本等方面,都比奇偶校验等校验方式具有优势。因而,CRC 成为计算机信息通信领域最为普遍的校验方式。常见应用有以太网/USB...

    C#实现CRC16校验

    CRC16(Cyclic Redundancy Check 16)是一种循环冗余校验算法,广泛应用于数据传输和存储中,用于检测数据传输中的错误。 在本文中,我们将使用C#语言实现CRC16校验算法,并将其应用于串口通信中。我们将首先介绍...

    C# crc32校验

    ### C# CRC32校验知识点详解 #### 一、CRC32简介 CRC(Cyclic Redundancy Check)是一种广泛应用于数据传输过程中的错误检测技术。它通过一个多项式来计算一个固定长度的校验码,从而检测数据在传输过程中是否发生...

    CRC16校验计算器

    CRC16校验计算器是一种用于数据完整性检查的工具,它基于CRC(循环冗余校验)算法,广泛应用于通信、存储等领域。CRC16能够检测出传输或存储数据中的单比特或多比特错误,确保数据在传输过程中的准确无误。 在C# ...

    C# CRC 循环冗余校验算法

    C# CRC 循环冗余校验算法,包含8位 16位 32位 三种校验算法。 本例直接简单易懂,通过点击按钮直接 产生字符串“ABCD”的CRC32校验码“DB1720A5”,并将校验码显示在下面的文本框中。

    CRC16校验码计算器

    它的全称为Cyclic Redundancy Check,即循环冗余校验。CRC的基本原理是通过一个预先定义的多项式,对数据进行除法运算,然后将得到的余数作为校验码添加到原始数据后面。在接收端,同样的算法会再次对数据(包括原始...

    循环冗余校验法CRC的C++实现

    循环冗余校验(CRC,Cyclic Redundancy Check)是一种广泛用于数据传输错误检测的校验技术。在计算机网络通信中,为了确保数据的准确传输,通常会使用CRC算法来检验数据的完整性。CRC通过附加一个校验码到原始数据中...

    CRC32校验工具

    CRC,全称是Cyclic Redundancy Check(循环冗余校验),它通过计算数据的校验码来判断数据在传输或存储过程中是否发生错误。CRC32是其中的一种,它使用32位的校验码。 CRC32的工作原理基于多项式除法。在CRC计算中...

    易语言汇编crc16校验

    CRC16(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用于数据通信和存储中的错误检测方法,通过计算数据的校验和来检测数据传输或存储过程中可能发生的错误。 CRC16校验的基本原理是利用多项式除法,通过...

    CRC16校验码计算工具

    CRC16,全称为Cyclic Redundancy Check(循环冗余校验),是一种广泛用于数据传输和存储中的错误检测机制。在串口通讯中,CRC校验码的计算至关重要,因为它能有效地检测出数据在传输过程中可能出现的错误,确保信息...

Global site tag (gtag.js) - Google Analytics