1 引言
循环冗余校验码,简称CRC码,是常用的检测错误码,它在数据通信中得到了非常广泛的应用。不同CRC码的生成多项式各不相同,CRC码的比特数也不同,且在有的通信协议中要求将余数寄存器先初始化为全0,另外的则须初始化为全1。因此,在程序设计时必须充分利用CRC码的共性及所用DSP的指令特点。
2 用TMS320C5000实现不同CRC计算的设计思想
CRC码的计算及校验都用到模2的多项式除法,而多项式除法可以采用带反馈的移位寄存器来实现,因此,用DSP来实现CRC计算的关键是通过DSP来模拟一个移位寄存器(也就是模拟手写多项式除法)。考虑到TMS320C5000系列DSP的累加器A和B均为40位,因此,可以用一个40位累加器A作为移位寄存器,若CRC码不够40位(设为k位),则仅用到A的最高k位,无用位用0填充。在编码中涉及到码的移位和异或操作,这可以通过C5000的SAFA(算术移位)和XOR(异或)两条指令来实现。C5000还提供了特殊指令bitt和xc,前者利用寄存器T,取出一个16位数据中的第(15-T)位,并送入TC(TC是特殊寄存器中的一位);后者是条件执行语句,它先判断所列条件是否满足,再决定是否执行其后的2条单周期指令或1条双周期指令。
步骤如下:
(1)先将CRC移位寄存器(即余数寄存器)A的每一位有效位均初始化为全0或全1(与协议有关),而无用位清0;
(2)将CRC移位寄存器中的值左移一位,判断移出的第一位与输入序列的最高位异或之后是否为1;
(3)若是1,则将A与生成多项式进行异或再跳到步骤2处理下一位,否则,直接跳到步骤2继续处理下一位。在手写多项式除法的过程中我们可以发现,生成多项式即除式一共为k+1位,而余数寄存器A里仅有k位有效位,这可视为余数寄存器的k+1位永远为0,因此在实际异或运算时,生成多项式的最高位即k+1位不必参与运算。流程图如图1所示。
重复(2)、(3)两步,直到输入信息位全部处理完为止,则A的最高k位为进行多项式除后所得的余数,若余数寄存器先初始化为全0,则此时A的最高k位就是CRC校验码,若余数寄存器先初始化为全1,则须将A取反后最高k位才是CRC码。
3 程序设计思路及设计实例
为了实现上述设计思想,可在程序中用指针AR2指向输入信息(一个字表示16比特),用AR3指向输入信息字的某一位,用AR4表示够一个字的个数(单位为字),AR5表示不够一个字的比特数,即,若参加计算的信息比特数为161,则AR4=10,AR5=1。
为了依次取出一个字中的bit15、bit14、...bit0等16位信息位,在程序中用到了一个全局变量bitpos,共占16个字,并将这16个地址的内容依次赋值为0,1,2,......15,而在程序中这些值不能被改变。为了实现循环长度为16的循环寻址,bitpos的地址必须为32字的整数倍,在汇编语言中用下面的语句实现:
;若B=1,则将余数寄存器与生成多项式相异或(即模2减)
CRC码的校验过程与CRC计算相似,只是参与CRC计算的位须包括信息位及CRC码,若最后余数寄存器的值为全0(当余数寄存器初始化全0时)或某一特定值(当余数寄存器初始化全1时,与CRC码的生成多项式有关),则表示接收正确,否则表示发生错误。
4 结束语
通过反复测试,证明了上述40位以内的CRC码计算及校验的设计思想正确,能正确实现CRC-3、CRC-12、CRC-16、CRC-24、CRC-32等任意40位以内的CRC计算及校验。所附程序具有应用简单、指令精简、运算速度快等优点。该设计思路也可以很方便地在其它DSP或单片机及PC机中实现。
关键字:CRC计算 校验
引用地址:
40位以内任意长度的CRC计算及校验的实现
推荐阅读最新更新时间:2024-03-16 13:58
BCC异或校验法
BCC异或校验法(Block Check Character) 适用范围: 适用于大多数要求不高的数据通讯。 应用例子: IC卡接口通讯、很多单片机系统的串口通讯都使用。 实现方法: 很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。 校验值计算的代码类似于: typedef unsigned char INT8U; static INT8U BCC_CheckSum(INT8U *buf, INT8
[单片机]
高速逻辑分析仪探测
在过去几十年中,数字设计人员一直依赖逻辑分析仪,作为系统检验的主要工具。近年来,时钟速率的加快,已经迫使设计人员考虑系统所有部分的信号完整性,包括测试能力。逻辑分析仪探头不再能够任意连接到系统上,就能够保证成功,而是必须考察探头位置、负荷及与传输线的邻近程度等因素。本文考察了在探测高速数字系统时设计人员遇到的部分常见问题,另外本文还讨论了探头的负荷模型及探测位置的影响。最后,本文讨论了把探头连接到高速系统最常用的技术:短线探测和阻尼电阻器探测。 逻辑分析仪探头的负荷模型 任何类型的探头的目标都是尽可能对系统提供最小的电负荷。如果探头对系统性能的变动太大,那么探头将不能帮助设计人员检验
[测试测量]
s3c2440 K9F2G08 nandflash支持硬件ECC校验
S3c2440的nandflash K9F2G08是支持硬件ECC的,NandFlash的每一页分为main区和spare区,S3C2440的NandFlash控制器支持这两个区的硬件ECC,这里我们实现main区的硬件ECC。在include/configs/fl2440.h文件中,如果我们定义了nandflash的硬件ECC校验,那么我们就可以控制相应的nandflash寄存器,实现硬件ECC。 nandflash的每一页有两区:main区和spare区,main区用于存储正常的数据,spare区用于存储其他附加信息,其中就包括ECC校验码。 当我们在写入数据的时候,我们就计算这一页数据的ECC校验码,然后把校验码
[单片机]
插入式流量计的校验方法
点流型插入式流量传感器的测量头从本质上来说是一流速传感器,它的输出信号实际上与插入点的流速成一定比例关系。所以,点流型插入式流量计的校验方法有流速计法和流量计法两种。 1、 流速计法 所谓流速计法,是仅仅校验点流型插入式流量传感器的测量头,把测量头作为一台流速计来校验的方法。 对于频率输出型测量头(如插入式涡轮和插入式涡街流量计),首先在校验装置上测得测量头的仪表系数,然后再根据应用现场的流体及管道条件确定速度分布系数。 流速计法有许多优点,应该是点流型插入式流量计校验的主要方法,应普遍推广使用。 2、 流速计法校验设备和校验方法 校验方法为:将流量计测量头牢固地固定在测量车上,测量车在水槽两侧的轨道上移动 测量车的
[测试测量]
电磁流量计在线校验参考
电磁流量计一般出厂时精确度已经由厂家实验室标定。由于使用于现场,受环境条件、流体特性以及仪表本身如元器件损坏等原因引起仪表运行故障等情况,对于首次安装投运前或长期使用后的流量计有必要进行一次常规的现场校验。 由于电磁流量计的传感器安装在供水管道中,难以拆下送至实验室进行检查,而目前在流量计量范围内,国家和地方对大口径流量计尚未有现场条件下进行在线检验的规程和其它法规文件。为了保证电磁流量计在首次安装、故障修复以及长期使用后的精度和可靠性,而又不影响日常操作,本公司有以下几点在线校验方法供使用单位参考: 1.对流量计励磁线圈进行安全绝缘测试,应大于20MΩ。 2.对DN 1200mm以上的电磁流量计,应测试推动级NB,电流误差不
[测试测量]
CRC校验---之avrbootloader
先看一下要用到的函数。 #include util/crc16.h 这是计算单个字节的CRC(旧crc与data生成) static __inline__ uint16_t _crc_xmodem_update(uint16_t __crc, uint8_t __data); 多项式Polynomial: x^16 + x^12 + x^5 + 1 (0x1021) crc初始值Initial value: 0x0 专用于XMODEM通讯协议,等效于C写的 uint16_t crc_xmodem_update (uint16_t crc, uint8_t data) { int i; crc = crc ^ ((ui
[单片机]
STM32F4学习笔记11——CRC循环冗余校验
关于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)
[单片机]
汽车中的红外遥控发射器和接收机设计
红外线遥控是目前应用最广泛的一种通信和遥控手段。由于红外线遥控器具有体积小、功耗低、功能强、成本低等特点。因此,彩电、录像机、音响设备、空调、玩具、门铃以及遥控汽车路牌等其它小型装置上也纷纷采用红外线遥控。为改变目前汽车上的车头路牌指示灯(以下简称车号器),无法灵活改变的缺陷,把红外遥控用在其中,使其可以轻松实现远距离、非接触性的一次改变车号的目的,从而改变以前用人工翻牌的旧模式。 一、 汽车车号器的红外遥控系统 汽车上的车号器,原用简单的LED数码管控制,使用起来很不方便,为了能远离的控制它,就采用了红外遥控。通常红外遥控系统由发射和接收两部分组成,应用编/解码电路专用集成电路芯片来进行控制操作,如图1所示
[汽车电子]