侵权投诉

CRC校验快速算法的原理及实现改进设计

电子设计 2020-09-14 17:42 次阅读

CRC(循环冗余校验码)编码是数字信号传输中用得较普遍的一种差错控制编码。它不但可以用于纠正独立的随机错误,也可以用于纠正突发错误。CRC校验通常是靠专用硬件电路来实现的,但很多系统为了降低成本,常常利用单片机或微处理器编程来完成这一功能。因此,在器件处理能力有限的情况下,如何提高CRC 校验软件计算的速度,是开发者最为关心的问题。

1 整字节序列的CRC校验快速算法

文献[1]提出了一种针对整字节的CRC快速算法。它的基本思想是预先生成一个余式表,通过查表,利用递推原理进行快速计算。现以 CCITT(国际电话电报咨询委员会)建议的,用于基本型数据传输规程的生成多项式为例,简要介绍此先验算法的基本原理。

设M为由i个字节组成的8×i位二进制序列,用字节形式表示为

截取Mi的前个字节构成一个序列,即

这两个序列之间的关系可以表示为

其中是字节的二进制多项式表示形式,是将序列左移一个字节。

对于序列来说,有

其中,是商多项式,为一整数项;为最高次幂小于15的余数项。而对于Mi序列,

其中为整数项,因此对多项式取余即等效于对多项式取余,记做

这样就形成了递推关系。对于序列,已知就可知,已知就可知,最后就变成了求三字节序列的余式项的问题。

不失一般性,设三字节序列 ,那么

我们可以预先做好一个16×16的[a00]形式的余式表,通过查余式表可以很快知道,而是小于等于16位的二字节序列,除以的余式即为本身。(4)式中的加法运算为模2加(异或运算)。运用此算法就可很快求出整字节的CRC校验码。

2 任意长度序列的CRC校验快速算法

上述算法,只适用于信息长度为整字节的情形;但在实际应用中,往往会遇到计算非整字节的CRC校验码。一种解决方法是,在信息数据前补零,即将信息数据右移,使之成为整字节来计算,这对于信息数据序列不长的情况还是奏效的;但遇到长数据序列,若对每一个字节均进行移位操作,则计算量明显增加,这一缺点对于实时性要求高的系统来说尤其明显。下面以生成多项式为例,提出一种改进算法,可实现任意长度序列快速CRC校验运算。

设D为任意长度的二进制序列,记长度为k位,则k总可以表示成的形式。其中s≥0,且0≤p<8。这样,就可以将序列D按降幂形式写成 D(x)=xp[d1d2……ds-1ds]+m(x),dj(1≤j≤s)是位长为8的字节,m为序列D除掉整字节后余下的位,为非整字节。记序列 M(x)=[d1d2……ds-1ds],那么

M(x)为整字节序列,其余式RM(x)可用前面介绍的整字节CRC算法求出。因为生成多项式G(x)=x16+x12+x5+1的最高次幂为 16,所以序列D(x)的余式RD(x)为

其中 ,即形成两个余式的模2加(异或运算),m(x)的长度小于1字节,所以RM(x)是[a00]形式的余式,通过查余式表可以很快得到。

现在来讨论xpRM(x)的计算。RM(x)可以按照上述整字节的快速算法算出结果。因为RM(x)的位长为16,xpRM(x)相当于 RM(x)向左移p位,位长为(16+p)。

因为 0≤p<8

所以 16≤(16+p)<24

xpRM(x)可以看成一个3字节序列,定义

其中是2字节序列,长16位,小于生成多项式17位。它们除以生成多项式的余式即为本身,所以

是为样式的余式,可以由余式表直接获得,所以(1)式又可写为

这就是改进后的非整字节CRC校验快速算法。它不需要进行大量的数据移位对齐,比起整字节的算法,只增加了两次查表和两次异或运算,可见其运算量并没有显著增加。

值得提出的是,在文献[1]提出的整字节CRC校验快速算法中,推导递推公式(3)时,作者并没有考虑到序列用于计算CRC校验码时要先移16 位(生成多项式为时)。若读者按照此法,直接用序列来做运算,显然是不对的,必将导致错误结果。

3 适用于单片机或微处理器的算法流程

为了编程方便,我们将需处理的信息序列做以下变形。重写(4)式,在整字节部分的M(x)后补2字节的“0”,得到新数列

其中,用取代M(x)做编程计算,算法流程如图1所示。

图1 算法流程图

结语

任意长度非整字节的CRC快速算法适用的范围很广,只需预先在内存中生成一个余式表,通过查余式表就可以快速计算。由于算法的每一步递推都是以字节为单位的,这样就比传统的以位为单位的算法要快上十几倍。数据序列的长度越长,其体现的优越性就越高。而且算法不要求用于计算的序列为整字节,任意位长均适用,在实际应用中效果显著。

责任编辑:gt

收藏 人收藏
分享:

评论

相关推荐

STM32单片机的堆栈深入解析

学习STM32单片机的时候,总是能遇到堆栈这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点....
的头像 STM32嵌入式开发 发表于 10-30 17:31 70次 阅读
STM32单片机的堆栈深入解析

使用单片机实现正反转可控的步进电机的程序和工程文件

本文档的主要内容详细介绍的是使用单片机实现正反转可控的步进电机的程序和工程文件免费下载。
发表于 10-30 17:29 11次 阅读
使用单片机实现正反转可控的步进电机的程序和工程文件

单片机的主程序是如何执行的

我们从单片机的工作原理可以看出单片机是执行程序来完成我们所要求的任务的,在单片机中有很多子程序,单片....
的头像 陈翠 发表于 10-30 17:28 69次 阅读
单片机的主程序是如何执行的

Microchip推出解决模拟系统设计难题的单片机

基于传感器的物联网(IoT)应用依赖于模拟功能和数字控制能力的结合,以满足低成本、小尺寸、高性能和低....
的头像 Microchip微芯 发表于 10-30 17:00 54次 阅读
Microchip推出解决模拟系统设计难题的单片机

单片机的复习题和答案免费下载

1、ALE信号的作用是(地址锁存允许输出信号)。 2、所谓中断源即是(能发出中断请求、引起中断的设....
发表于 10-30 15:13 13次 阅读
单片机的复习题和答案免费下载

单片机的程序编写以及单片机的开发技巧

单片机的学习窍门 任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数....
发表于 10-30 15:02 21次 阅读
单片机的程序编写以及单片机的开发技巧

单片机的分类及应用和单片机的功能介绍

单片机的分类及应用 MCU按其存储器类型可分为无片内ROM型和带片内ROM型两种。对于无片内ROM型....
发表于 10-30 14:56 53次 阅读
单片机的分类及应用和单片机的功能介绍

各种单片机常见的延时与中断问题及解决方法

可以设50ms中断一次,定时初值,TH0=0x3c、TL0=0xb0。中断20次为1S,10分钟的话....
的头像 玩转单片机 发表于 10-30 14:15 67次 阅读
各种单片机常见的延时与中断问题及解决方法

如何在CGRAM中自定义字符呢?

RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW....
的头像 玩转单片机 发表于 10-30 11:29 60次 阅读
如何在CGRAM中自定义字符呢?

为何它能对模拟电路进行控制呢?

那为何它能对模拟电路进行控制呢?大家想一想,我们数字电路里,只有 0 和 1 两种状态,比如我们第 ....
的头像 玩转单片机 发表于 10-30 11:26 63次 阅读
为何它能对模拟电路进行控制呢?

89C51单片机结构框图

在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。此时的电流可降到....
的头像 玩转单片机 发表于 10-30 11:21 52次 阅读
89C51单片机结构框图

基于μPSD3234A单片机在μVision2开发环境中的税控器应用方案设计

税控设备是国家税务部门实施税收管理信息化的必然手段之一,税控器作为税控设备之一,它是在计算机等电子设....
的头像 电子设计 发表于 10-30 10:38 218次 阅读
基于μPSD3234A单片机在μVision2开发环境中的税控器应用方案设计

晶体振荡器的种类

有源晶振不需要 DSP 的内部振荡器,信号质量好,比较稳定,而且连接方式相对简单(主要是做好电源滤波....
的头像 EDA365 发表于 10-30 10:36 62次 阅读
晶体振荡器的种类

基于高运算性能FCHIP2芯片的应用设计方案

对于产品的应用,我们认为还有2个重要的因素:1. 对损伤手指指纹的识别率;2. 对历史指纹的识别率。....
的头像 电子设计 发表于 10-30 10:02 205次 阅读
基于高运算性能FCHIP2芯片的应用设计方案

基于78K0系列单片机和铂电阻温度传感器实现测温电路的设计

测温仪的系统硬件结构框图如图1所示。考虑到功耗及整机的精度和价格等问题,测温仪的单片机控制器采用EN....
的头像 电子设计 发表于 10-30 09:58 137次 阅读
基于78K0系列单片机和铂电阻温度传感器实现测温电路的设计

单片机什么时候可以替代PLC ?

        哪些时候单片机可以替代PLC 吗?小编先不揭晓答案,看完此文大家自己就心知肚明可以不...
发表于 10-30 08:45 0次 阅读
单片机什么时候可以替代PLC ?

一文知道单片机发展简史

     你知道吗?不论它是叫MCU,还是微控制器、单片机,其实它们都是一种东西。今天小编特意找出这篇单片...
发表于 10-30 08:34 0次 阅读
一文知道单片机发展简史

如何定义EMC,单片机EMC的检测工作

     如何定义EMC?简单概括,就是设备或系统