当前位置:首页 > 单片机 > 单片机
[导读]1 基本原理串行数据的差错检验是保证数据正确的必要手段,通常采用奇遇校验法和循环冗余校验法。这两种方法都是通过冗余数据来提供必要信息。奇偶校验法适用于以字节为单位数据传输。例如用偶校验传送1个ASCII字符时

1 基本原理

串行数据的差错检验是保证数据正确的必要手段,通常采用奇遇校验法和循环冗余校验法。这两种方法都是通过冗余数据来提供必要信息。奇偶校验法适用于以字节为单位数据传输。例如用偶校验传送1个ASCII字符时,要附加1个校验位,从而使全部9位中“1”的个数为偶数。奇偶校验简单易行,但当数据崩溃或出现多位错误时,往往不能检验出来,因而可靠性不高。

循环冗余码校验法利用了循环和反馈机制,校验码由输入数据与历史数据经过较为复杂的运算而得到。因此,冗余码包含了更为丰富的数据间的信息,可靠性更高。校好的循环冗余码可校验出以下错误:①全部数据位任意奇数个位出错;②全部数据位中任意连续2位出错;③处于一个8位时间窗内的任1~8位数据出错。

使用循环冗余码校验方法通信时,发送方先计算待发数据的校验码,然后将数据与校验码起发出;接收方接收数据的同时进行循环冗余码的计算,并将计算结果与来自发送方的校验码相比较,如不相同表示传输过程中出现了错误,接收方必须通知发送方再次发送该组数据。

假设要传输64位数据(最后8位是校验码),并使用多项式x8+x5+x4+1来产生8位循环冗余校验码(以下简称CRC码)。其逻辑结构可用异或门和移位寄存器表示,如图1所示。寄存器的值即为输入数据的CRC码。首先来输入数据与最低位的异或值,如为“0”,只需将当前CRC码逻辑右移1位(首位补零),即可得到新CRC码;如为“1”,则将当前CRC码与18H异或,再循环右移1位即可。该校验码有以下特点:①当输入的8位数据(低位在前)与当前 CRC码相同时,输出的CRC码将是零。因此,当包含8位CRC码的全部64位数据输入后,输出的CRC码应为零。②只要有非零位即可判决传输错误,而必复杂的校验技术。

2 用汇编语言产生循环冗长余校验码

在8051单片机上,由以下代码可得8位CRC码(存于变量CRC中),8位输入数据暂存于ACC中。
DO_CRC:PUSH ACC ;保存输入数据
PUSH B ;保存B寄存器
PUSH ACC ;再次保存
MOV B,#8 ;共有8位数据
CRC_LOOP:XRL A,CRC
RRC A ;将最低位与输入数据的异或值放入进位标志中
MOV A,CRC
JNC ZERO
XRL A,#18H;当前CRC码与18H异或
ZERO: RRC A ;右移1位
MOV CRC,A ;保存新CRC码
POP ACC
RR A ;取出输入数据的第2位
PUSH ACC
DJNZ B,CRC_LOOP ;循环
POP ACC
POP B
POP ACC ;恢复各寄存器
RET

上述程序对每一位输入数据都要执行一系列操作,运算量很大,但内存占用少,适合于内存紧张的情况。当内存充裕时,可以使用效率更高的查表法。

3 用查表法求CRC码

将输入数据按字节分开,每字节值在0~255之间。令当前CRC码为00H,当分别输入0~255时,得到256个CRC码。将它们顺序排列就构成了循环冗余校验码表。用当前CRC码与输入字节异或后的值作为下标,查表即可求出新CRC码。下例中,crc存放CRC码,ACC存放输入字节, crc_table为循环冗余校验表的入口地址。代码如下:
XRL A,crc ;当前CRC码与输入数据异或
PUSH DPH
PUSH DPL ;保存数据指针
MOV DPTR #crc_table
MOVC A,@A+DPTR;查表
MOV crc,A
POP DPL
POP DPH ;恢复数据指针
RET
crc_table:
DB 00H,5EH,BCH,E2H,61H,3FH,DDH,83H
DB C2H,9CH,7EH,20H,A3H,FDH,1FH,41H
DB 9DH,C3H,21H,7FH,FCH,A2H,40H,1EH
……

4 循环冗余校验码的CPLD实现

用CPLD 作循环冗余校验码的硬件实现,其速度更快,性能更好,而且只占用极少的CPLD内的资源。本人用Xilinx公司的XCV9536芯片,基于以下VHDL 代码,实现了8位CRC码生成电路。代码下VHDL代码,实现了8位CRC码生成电路。代码中,s_in为输入串行数据,q为输出CRC码,d_new为当前CRC码。
Library IEEE;
use IEEE.std_logic_1164.all;
entity crc is
port(clk,s_in,reset:in STD_LOGIC,q:out STD_LOGIC_VECTOR (7 downto 0));
end crc;
architecture crc_arch of crc is
signal t1,t2,t3:std_logic;
signal d_new:std_logic_vector(7 downto 0);
begin
t1<=d_new(0)xor s_in; --t1为最低位与输入异或值
t2<=d_new(4)xor '1';
t3<=d_new(3)xor'1';
process(clk,reset)
begin
if clk event and clk='1'then
if reset='1'then
d_new<=x"0"; --复位时,CRC码置零
elsif t1='1'then
d_new<=t1&d_new(7 downto 5)&t2&t3&td_new(2 downto 1);--t1为"1"时的新CRC码
elsif t1='0'then
d_new<=t1&d_new(7 downto 1); --t1为"0"时的新CRC码
end if;
end if;
end process;
q<=d_new;--输出CRC
end crc_arch;

5 总结

基于以上介绍的8位循环冗余校验码的软件及硬件实现方法,可以设计各种类型的循环冗余校检方法。由上述例程可以看出,循环冗余码校验是一种可靠性高、易于实现的校验方法。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭