crc校验 订阅
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。 [1-2] 展开全文
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。 [1-2]
信息
编码规则
前部分是信息码
移    位
原信息码(kbit)左移r位
中文名
循环冗余校验码
外文名
Cyclic Redundancy Check(CRC)
循环冗余校验码简介
循环冗余校验码(cyclie redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。 [3]  循环码是指通过某种数学运算实现有效信息与校验位之间的循环校验(而海明码是一种多重校验)。 [3]  这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。 [3]  这种校验又称多项式校验。 [3]  理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。 [3] 
收起全文
精华内容
下载资源
问答
  • 实现CRC校验码的生成以及码块分割(依据协议3GPP 36.212)
  • CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据。  在现场总线通信和控制的实际应用中,工业应用环境往往是极端的温度以及电磁噪声或是其他的恶劣环境,系统在...
  • 超级好用的Modbus-Rtu-指令CRC校验码计算工具,功能很全,CRC16 CRC8还有多项式可选
  • 实现CRC校验码的生成以及码块分割(依据协议3GPP 36.212)
  • CRC校验计算器.zip

    2020-12-15 14:43:24
    选择[CRC8]则为CRC8校验,否则为CRC16校验。 2、输入方法 最大数据长度为255个数据。 输入前请先选择是否为[十六进制]数据。 输入数据以空格为间隔,最后一个数据同样如空格结束。 范例A(十进制): 12 13...
  • CRC校验工具CRCTool_3.0

    2020-12-14 13:40:54
    一款小巧的CRC校验工具,支持CRC16 CRC32 支持文本导入 支持16进制和ASCII模式 支持MODBUS
  • 自己写的一个CRC校验程序,基于1200环境 ,使用SCL语言编程,为了和不知名的设备进行串口通讯,又无法使用西门子自己的Modbus RTU协议,使用自由口必须要用到的CRC校验,亲测可用,可与CRC校验软件输出一致,附带...
  • CRC校验

    万次阅读 多人点赞 2019-11-11 16:00:31
    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的...

    什么是CRC校验?
    CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

    CRC校验原理:
    其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。
    模2除法:
    模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。
    例:

    CRC校验步骤:
    CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。

    具体步骤:
    1. 选择合适的除数
    2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
    3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。

    CRC校验码计算示例:
    现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:
    ①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
    ②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。

    ③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。
    ④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。

    二、运算规则
    RTU检查码(CRC)计算,运算规则如下:
    步骤1:令16位暂存器(CRC暂存器)= 0xFFFF。
    步骤2:异或第一个8位字节的消息指令与低位元16位CRC暂存器,做异或将结果存入CRC暂存器内。
    步骤3:右移一位CRC暂存器,将0填入高位元处。
    步骤4:检查右移的值,如果是0将步骤3的新值存入CRC暂存器内,否则异或0xA001与CRC暂存器,将结果存入CRC暂存器内。
    步骤5:重复步骤3〜步骤4,将8位全部运算完成。
    步骤6:重复步骤2〜步骤5,取下一个8位的消息指令,直到所有消息指令运算完成。最后,得到的CRC缓存器的值,即CRC的检查码。值得注意的是CRC的检查码必须交换放置于讯息指令的检查码中。

    三、相关代码
    扩展参看:C语言再学习 – 位操作

    int16_t factory_crc16 ( uint8_t *bufData, uint16_t buflen)
    {
        uint16_t TCPCRC = 0xffff;
        uint16_t POLYNOMIAL = 0xa001;
        uint8_t i, j;
       
        for (i = 0; i < buflen; i++)
        {
            TCPCRC ^= bufData[i];
            for (j = 0; j < 8; j++)
            {
                if ((TCPCRC & 0x0001) != 0)
                {
                    TCPCRC >>= 1;
                    TCPCRC ^= POLYNOMIAL;
                }
                else
                {
                    TCPCRC >>= 1;
                }
            }
        }
        return TCPCRC;
    }



    四、CRC校验原理及步骤
    参看:CRC校验原理及步骤

    1、什么是CRC校验?
    CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

    2、CRC校验原理:
    其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为模2除法。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

    模2除法:
    模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。
    例:


    3、CRC校验步骤:
    CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。

    4、具体步骤:
    选择合适的除数
    看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
    将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。
    5、CRC校验码计算示例:
    现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:
    ①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
    ②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。

    ③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。
    ④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错

    展开全文
  • FX1n系列PLC的crc校验

    2021-10-21 19:27:29
    三菱FX1n系列PLC编程的CRC校验程序,可代替FX3U的CRC指令
  • CRC校验码(C#).rar

    2019-09-08 20:59:42
    自己用的CRC校验高低字节计算,低字节在前,高字节在后,用的查表法。很小的工具。文本框内输入16字节数可以直接计算。可以加空格也可以不加。加空格的话要注意,如果报错的话删除其中一组内的空格就可以了。
  • matlab CRC校验代码

    2019-03-28 09:10:09
    matlab CRC校验代码,亲自编写,支持16位校验,参照C代码编写,可用。
  • 串口助手带CRC校验.rar

    2020-03-19 15:39:24
    串口调试助手,有三个发送区,每个区有单独的CRC校验;显示流畅,不容易丢数据.中文显示无乱码;波特率、数据位、校验都可以设置
  • Verilog语言实现CRC校验

    2019-05-04 21:55:52
    功能:输入多个8bit数据,输出16bitCRC值,用的多项式是CRC8005,通过修改例程中的某字节(程序中有注明),可以实现CRC1021
  • [LabVIEW]实现CRC校验

    2019-02-28 06:00:11
    [LabVIEW]实现CRC校验,有些通讯协议需要用到CRC校验,所以很方便。
  • 软件版本博图15. 本程序适用于一维数组长度不超过1000字节 CrcErr=16#0,CrcValue正常,CrcErr=16#8000,数组长度超过1000字节
  • CRC校验C语言实现

    2018-07-28 09:51:28
    基于MODBUS协议的CRC校验。用C语言实现的,这个程序是计算CRC位。鄙人C语言小白水平,你学了C语言就能看懂。嗯,,我指针没学好,,所以我都是用数组写的,你说简单不简单。嗯,没毛病就是那种命令框框显示CRC。输入...
  • 三菱plc的crc校验程序

    2018-04-12 08:51:40
    基于三菱PLC的crc校验梯形图(moudle_bus),CRC即循环冗余校验码(Cyclic Redundancy Check ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一...
  • 1.CRC-16/MODBUS(最通用) 2.CRC-16/CCITT-FALSE 支持以上CRC校验计算方式(分查表法和计算法),原代码可执行,能正确输出结果。需要的朋友可以直接 引用到自己项目中。谢谢支持。
  • CRC校验工具

    2018-12-18 09:50:44
    CRC校验工具,支持CRC4、5、6 、7、8 CRC16、CRC32。
  • 32位CRC校验c语言代码

    2019-03-18 22:27:49
    32位CRC校验c语言代码,参数:内容,长度,种子值,直接调接口即可使用。
  • verilog实现的并行crc校验。公式为1+x^1+x^2+x^4+x^5+x^7+x^8+x^10+x^11+x^12+x^16+x^22+x^23+x^26+x^32
  • CRC 校验算法原理到FPGA实现代码。里面包括CRC检验的实现文档,Verilog HDL的实现代码,MATLAB仿真验证程序等,Testbench完整。可完美运行。
  • CRC校验——C语言代码

    2018-03-04 13:14:12
    CRC16_CCITT、CRC16_XMODEM、CRC16_MODBUS、CRC16_MAXIM、CRC16_USB的C语言代码
  • CRC校验码生成工具

    2018-07-20 16:27:08
    CRC校验码生成工具,CRC校验码生成工具,CRC校验码生成工具
  • labview CRC校验程序

    2019-04-10 21:37:23
    LABVIEW CRC校验程序。在visa通讯中经常需要用到,是一个通用子vi
  • Qt 软件 CRC校验

    2018-08-13 11:29:17
    嵌入式CRC校验封装函数,能通过报文内容准确计算出报文的CRC校验
  • crc校验字节型算法

    2018-04-22 12:02:25
    (1)预设一个 16 位寄存器,所有数位均为 1(即值为0x FFFF);...(7)将待测数据依次设置为 0x00 ~ 0x FF(256 种),按照步骤(2)~(5)各计算一遍,得到的 256 个 CRC-16 校验码组合在一起即为 CRC-16 查询表。
  • CRC校验码计算器

    2017-03-19 20:22:38
    CRC校验码计算工具(8位,16位,32位均可计算)
  • 自动计算Modbus通信报文的两个CRC校验位,不用人手工计算。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 网上的一般都是查表法,这是我按模2除法写的。 里面有2个函数: 1、带入需要计算的数据串与除数(最高位与最低位必须为1),得出CRC校验码,插入尾部 2、验证数据的完整性(验证携带8位CRC校验码数据的完整性)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,307
精华内容 21,722
关键字:

crc校验