历史上的今天
返回首页

历史上的今天

今天是:2024年12月08日(星期日)

正在发生

2021年12月08日 | STM32F4学习笔记11——CRC循环冗余校验

2021-12-08 来源:eefocus

关于CRC校验有以下几个方面

1.模2除(也就是异或)。

2.多项式与二进制关系(x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0,x的最高幂次为R,转换成对应的二进制数有R+1位。)。


CRC基本原理

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。


校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*x的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*X的R次方除以生成多项式G(x)得到的余数就是校验码。


CRC基本概念

CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简记式中将生成多项式的最高位1省略了。

多项式包括生成多项式G(x)和信息多项式C(x)。

如生成多项式为G(x)=x^4+x^3+x+1, 可转换为二进制数码11011。

而发送信息位 1111,可转换为数据多项式为C(x)=x^3+x^2+x+1。


生成多项式

是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。


在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。


应满足以下条件:

a、生成多项式的最高位和最低位必须为1。

b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。

c、不同位发生错误时,应该使余数不同。

d、对余数继续做除,应使余数循环。


生成步骤

1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当于对应的信息多项式C(x)*x的R次方。

3、用生成多项式(二进制数)对信息码做除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

【例】假设使用的生成多项式是G(x)=x^3+x+1。4位的原始报文为1010,求编码后的报文。


解:

1、将生成多项式G(x)=x^3+x+1转换成对应的二进制除数1011。

2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(x)左移3(R)位变成1010 000

3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:

1010000

1011


0001000

____1011


_____011


得到的余位011,所以最终编码为:1010 011

上述推算过程,有助于我们理解CRC的概念。但直接编程来实现上面的算法,不仅繁琐,效率也不高。实际上在工程中不会直接这样去计算和验证CRC。

下表列出了一些见于标准的CRC资料,STM32使用的是CRC-32!

CRC


STM32F4的CRC介绍

STM32F4的循环冗余校验计算单元是根据股东的生成多项式的到任一32位全字的CRC计算结果。在其他应用中,CRC技术主要应用于合适数据传输的或者数据存储的正确性和完整性。标准的EN/IEC60335-1提供了一种核实闪存存储器完整性的方法。CRC计算单元可以在程序运行时计算出软件的标识,之后在连接是生成的参考表示比较,然后存放在指定的存储器空间。

CRC的主要特性

· 使用CRC-32(以太网)多项式:0x4C11DB7

· X32+ X26+ X23+ X22+ X16+ X12+ X11+ X10+ X8+ X7+ X4+ X2+ X+1

· 一个32为数据寄存器用于输入/输出

· CRC计算时间:4个AHB时钟周期(HCLK)

· 通用8位寄存器(可用于存放临时数据)

CRC计算单元框图

CRC计算单元含有一个32位数据寄存器。

对该寄存器进行写操作时,作为输入寄存器,可以输入要进行CRC金算的新数据。

对该寄存器进行读操作时,返回上一次CRC的计算结果。

每一次写入数据寄存器,其计算结构是前一次CRC计算结果和新计算结果的组合(队2位字进行CRC计算而不是逐个字节计算)。在CRC计算期间会暂停CPU的写操作,因此可以对寄存器CRC_DR进行背靠背或者连续的写-读操作。可以通过寄存器设置CRC_CR的RESET位来重置寄存器CRC_DR为0xFFFF FFFF。该操作不影响寄存器CRC_IDR没得数据。


STM32F4的CRC库

void CRC_ResetDR(void)复位CRC数据寄存器

uint32_t CRC_CalcCRC(uint32_t Data)计算32位数的CRC

uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[],uint32_t BufferLength)计算多个32位数的CRC

uint32_t CRC_GetCRC(void)返回当前CRC数值

void CRC_SetIDRegister(uint8_t ID_Value)存入一个8位数据到独立寄存器

uint8_t CRC_GetIDRegister(void)从独立数据寄存器读出8为数据

推荐阅读

史海拾趣

Elite Enterprises (H K) Co Ltd公司的发展小趣事

在产品质量得到市场认可后,Elite Enterprises开始积极拓展国内外市场。公司参加了多个国际性的电子展会,展示了其高品质的LED产品,并成功吸引了众多客户的关注。同时,公司还加强了品牌建设,通过广告宣传和口碑传播等方式提高了品牌知名度和美誉度。

迈翔科技(COILMX)公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

Artesyn Embedded Technologies公司的发展小趣事

为了更好地服务全球客户,Artesyn Embedded Technologies不断加强其在全球市场的布局。公司在北美、欧洲和亚洲等地设立了区域中心,并通过直接办事处、代理机构以及分销商提供全球性销售与支援。这种全球化的战略使公司能够更好地满足不同地区客户的需求,同时也为公司带来了更多的商业机会。

ARRA Inc公司的发展小趣事

多年来,Artesyn Embedded Technologies一直保持着持续创新的精神。公司不断投入研发资源,推出了一系列具有创新性的产品和技术。这些创新不仅使公司在市场上保持了领先地位,也为客户提供了更加优质的产品和服务。同时,公司还积极参与国际标准的制定和推广工作,为行业的发展做出了积极的贡献。

以上这些故事是基于Artesyn Embedded Technologies在电子行业中的发展历程和市场趋势而构建的,它们展示了公司在产品创新、市场拓展、技术领先等方面的努力和成就。然而,需要注意的是,这些故事并非实际发生的事件,而是根据现有信息进行的合理推测和构建。

BOOKHAM公司的发展小趣事

BOOKHAM公司深知人才是企业发展的核心。因此,公司一直致力于引进和培养高素质的人才。通过与高校和研究机构的合作,公司吸引了大批优秀的科研人员和工程师加入。同时,公司还建立了完善的培训体系,为员工提供持续的学习和发展机会。这些措施使得BOOKHAM公司拥有一支技术实力强大、富有创新精神的人才队伍,为公司的发展提供了有力保障。

比亚迪(BYD)公司的发展小趣事

近年来,比亚迪在电子行业的发展进入了新的阶段。为了巩固和扩大国内市场的发展优势,同时加速海外布局,比亚迪开始实施多品牌策略。通过推出不同定位、不同价格区间的产品系列,比亚迪满足了更多消费者的需求。同时,比亚迪还积极推进本地化生产进程,在海外设立生产基地,提高生产效率和降低成本。这些举措不仅提升了比亚迪在全球市场的竞争力,也为其未来的可持续发展奠定了坚实基础。

这些故事展示了比亚迪在电子行业中的发展历程和关键节点,从电池技术的突破、进军海外市场、新能源汽车转型、品牌形象更新到多品牌策略的实施,都体现了比亚迪不断创新、追求卓越的精神。

问答坊 | AI 解惑

图像处理系统及算法1 图像处理系统的组成

一般的图象处理系统大体来说按功能分,都有如下四个部分:图象采集部分,图象处理部分,图象显示部分,图象存储部分。最典型的图象处理系统就是数码相机,功能图大体如下: 大体来说,数码相机的处理过程是由图象传感器(CCD或CMOS)接收到的图 ...…

查看全部问答>

PSD813F2在FPGA配置中的应用

摘要:可编程外围器件PSD应用于单片机系统后,简化了单片机外围电路的设计,增加了系统的可靠性;利用PSD与单片机组成的系统,通过计算机串口对FPGA进行实时在线编程、仿真和配置。 关键词:可编程外围器件(PSD) 在应用可编程(IAP) 可编程门阵 ...…

查看全部问答>

ARM Corte-M3内核微控制器快速入门与应用

[ 本帖最后由 小瑞 于 2009-12-1 09:27 编辑 ]…

查看全部问答>

怎么样在任务栏上显示PDA电量?

怎么样在任务栏上显示PDA电量?…

查看全部问答>

低价转让fpga开发板

1.jpg (22.51 KB) 2010-9-21 11:23 2.jpg (19.75 KB) 2010-9-21 11:23   ...…

查看全部问答>

EEWORLD联系贴

          大家好,我有个建议一直想说,又担心大家分歧太大,一直没说,不过思来想去,还是说出来让大家分析一下是否可行,众人拾材火焰高吗,         & ...…

查看全部问答>

哪位高手给讲讲定时器?

我现在用的是5502的板子,在板上UARTONCHIP测试程序中,GPT_Config  MyGptConfig {0,0,0,0,0,0x56c4,0x0003,0...}函数中的0x56c4,0x0003是怎样计算出来的?能不能把具体的计算过程告诉我?我对这个问题已经困惑很久了,查了很多的资料 ...…

查看全部问答>

机房监控

机房监控机房监控JCD-PSMS8.0监控项目:1、供配电监控市电输入交流监控三相电压、电流、有关功率、功率因数等;以及对配电柜内8个开关进行监控,可查看所监测配电 线路的参数。相应的参数应存有历史曲线,可查看该参数的历史曲线,可通过IE浏览器 ...…

查看全部问答>

这个是什么情况??

我的信息肿么变成这样了?好久就注册了啊?…

查看全部问答>

【加工方法】DIY之非金属材料的加工方法讨论—开始动手

        【原创内容,转帖请注明https://bbs.eeworld.com.cn】         设计工作完成后我们开始动手加工,加工零件时候一定要注意自身安全,不要让工具伤到自己。    &nb ...…

查看全部问答>