CRC(循环冗余校验)是一种根据数据产生简短固定位数校验码的常用方法,主要用来检查数据传输或者保存后是否有错误。CRC计算单元的工作过程如下:
1. 首先,CRC计算单元会初始化一个寄存器(通常是一个32位或64位的寄存器),初始值是生成多项式(在这个问题中是0x4C11DB7)。
2. 然后,CRC计算单元会逐位处理输入的数据缓冲区。对于每一个数据位,它都会将寄存器的当前值与这一位进行异或操作。
3. 如果结果的最高位(第31位或第63位)是1,那么CRC计算单元就会将寄存器与生成多项式进行模2除法,并将余数保留在寄存器中。
4. 这个过程会持续到所有的数据位都被处理完。最后,寄存器中的值就是CRC码。
注意,这个过程中的关键步骤就是异或操作和模2除法,它们都是计算机科学中的基本操作。
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
31文章
5336浏览量
120244 -
crc
+关注
关注
0文章
199浏览量
29461
发布评论请先 登录
相关推荐
用STM32L05x的CRC模块做modbus CRC16计算,结果不正确是为什么?
根据参考文档,CRC模块可以配置CRC多项式,应该可以做(Modbus)CRC16计算,自己试了一下,发现结果不正确,总是一个
发表于 04-29 06:50
交换机与路由器缓冲区:寻找完美大小
*本文系SDNLAB编译自瞻博网络威廉希尔官方网站
专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中,缓冲区至关重要,可以防止网络拥塞期间的数据丢失。缓冲区到底要多大?这个问题
新版CubeMX CRC校验模块没有Config吗?
使用crc16 怎么办呢,多项式和起始值又是在哪里设置.我在HAL库文件里也没找到这部分的内容。有没有熟悉的朋友帮忙指点下,该怎么用啊。谢谢啦!
发表于 04-03 08:04
交换芯片缓冲区大小是什么
交换芯片缓冲区大小并不一定是固定的。缓冲区的设计和实现会根据芯片的具体型号、规格以及应用场景的不同而有所差异。一些交换芯片可能具有固定大小的缓冲区
使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?
1 TX FIFO 缓冲区中的一个字节从 UART 0 TX FIFO 更改为一个字节(见下图)。
据我所见,问题发生在FIFO硬件的某个地方,因为软件发送的数据是正确的。
UART 设置
发表于 03-06 06:59
PSoC™ 5LP时增加TX缓冲区大小会损坏堆怎么解决?
:0x20007800-0x1fff8db8 = 0xea48 = > 59976 字节。
如果我将 UART_2 (stderr) 的 TX 缓冲区大小增加到 1024 字节,则第一个请求 256 字节
发表于 02-26 06:58
没有办法通过FX3固件检查缓冲区是卡住了还是已满?
使用多通道 DMA 来获得输出 1080p60 所需的 FX3 数据带宽。
在随附的照片中,你可以看到多次写入,然后突然间 WATERMARK 和 READY 同时断言。
有没有办法通过FX3固件检查缓冲区是卡住了还是已满? 发
发表于 02-23 08:01
如何使用内在函数 __crc32 (uint32b、uint32a)?
是 0x4a090e98,这是正确的(我用一些 crc 计算器仔细检查了一下)
但是,一旦我给了 b 任何其他值,我就无法再有预期的 crc 返回值了。
参数 b 到底代表什么?
发表于 01-25 06:50
fpga报告crc故障是什么意思
方法,通过对发送的数据进行计算并附加到数据末尾,接收方能够使用相同的校验算法来检测传输中的错误。CRC可以检测多种不同类型的错
评论