CRC(循环冗余校验)是一种根据数据产生简短固定位数校验码的常用方法,主要用来检查数据传输或者保存后是否有错误。CRC计算单元的工作过程如下:
1. 首先,CRC计算单元会初始化一个寄存器(通常是一个32位或64位的寄存器),初始值是生成多项式(在这个问题中是0x4C11DB7)。
2. 然后,CRC计算单元会逐位处理输入的数据缓冲区。对于每一个数据位,它都会将寄存器的当前值与这一位进行异或操作。
3. 如果结果的最高位(第31位或第63位)是1,那么CRC计算单元就会将寄存器与生成多项式进行模2除法,并将余数保留在寄存器中。
4. 这个过程会持续到所有的数据位都被处理完。最后,寄存器中的值就是CRC码。
注意,这个过程中的关键步骤就是异或操作和模2除法,它们都是计算机科学中的基本操作。
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
31文章
5394浏览量
122129 -
crc
+关注
关注
0文章
201浏览量
29762
发布评论请先 登录
相关推荐
FreeRTOS进阶使用之流缓冲区:高效处理字节流的秘密武器
工具,通过合理设置触发阈值和缓冲区大小,可显著提升系统性能。实际开发中需注意多核同步、阻塞策略及数据格式设计,必要时结合消息缓冲区实现更复杂的通信需求。掌握这一机制,将助你在嵌入式开发
发表于 03-24 11:37
单片机中的几种环形缓冲区的分析和实现
单片机中的几种环形缓冲区的分析和实现一、简介环形缓冲区(RingBuffer)是一种高效的使用内存的方法,它将一段固定长度的内存看成一个环形结构,用于存储数据,能够避免使用动态申请内存

ESP8266有双缓冲区吗?
我想实时传输一些信号的测量数据。信号的采样周期为 1 ms。我想每 500 毫秒发送 2048 字节(一个数据包)。ESP8266有双缓冲区(2x 2048字节)吗?其想法是计数填充一
发表于 07-16 07:29
stm32野火开发板上做USB通信,PC端USB的缓冲区和串口缓冲区的大小是多少?
stm32野火开发板上做USB通信,用的CDC虚拟串口。
stm32端将ADC采集的数据通过USB传给电脑,传输速率理论上是12Mbps,上位机是从PC端的串口缓冲区拿数据,用C#编写
发表于 05-17 14:02
用STM32L05x的CRC模块做modbus CRC16计算,结果不正确是为什么?
根据参考文档,CRC模块可以配置CRC多项式,应该可以做(Modbus)CRC16计算,自己试了一下,发现结果不正确,总是一个
发表于 04-29 06:50
STM32F303CB把8K CCMRAM作为FFT运算的输入缓冲区,UART发送固定内容会偶发出现错误的原因?
采用STM32F303CB芯片
把里面的8K CCMRAM作为了FFT运算的输入缓冲区,但是出现了奇怪的现象,UART发送固定内容,但是出现了偶发的内容错误,数据长度正常。比如发送的0x01,
发表于 04-24 07:46
交换机与路由器缓冲区:寻找完美大小
*本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中,缓冲区至关重要,可以防止网络拥塞期间的数据丢失。缓冲区到底要多大?这个问题

新版CubeMX CRC校验模块没有Config吗?
使用crc16 怎么办呢,多项式和起始值又是在哪里设置.我在HAL库文件里也没找到这部分的内容。有没有熟悉的朋友帮忙指点下,该怎么用啊。谢谢啦!
发表于 04-03 08:04
评论