8051单片机串口通信中的检错方
0 引言
对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。
1 检错方式
基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。
1.1 奇偶校验
奇偶校验是检错中比较常见的一种方法。它利用数据中的1的个数作为检错的标志位,若1的个数为奇数个,则错误检测的标志位为1,若1的个数为偶数,则错误检测的标志位为0。在发送端和接收端同时检测奇偶位,若得到相同的结果,则说明数据传输过程无错误发生;若得到不同的结果,则说明数据传输过程中有错误发生,此时8051会发送一个错误重传的信号,让pc端再次发送数据。
1.2 循环冗余校验(crc)
crc是利用除法和余数的原理来进行错误检测(error detecting)。如果原始数据为多项式jp(x),则将p(x)对生成的多项式g(x)进行模2除法,再将得到的余式r(x)作为生成的crc校验码,用公式可以表示为:
p(x)=q(x)·g(x)+r(x)
上式中的q(x)为除法得到的商。发送端将原始数据p(x)和生成的crc校验码r(x)发送到接收端。接收端则根据接收到的数据p'(x)算出另外的一个crc校验码r'(x),然后对两个crc校验码进行比较,即可得出在传输过程中是否有错误发生。若发生错误,则用发送端重传。本文中所采用的crc8所生成的多项式g(x)为:x2+x5+x4+1。
1.3 汉明码(hamming)
汉明码是在一组代码中加入一定数量的冗余,以形成一组新的数据。新加入的冗余数据被称为校验位。若某个信息位出错,则将引起几组奇偶校验结果均出错,由此根据奇偶组的检错,便可确定误码的信息位及性质。汉明码具有如下特点:
码长:n=2m-1
信息码位:k=2m-m-1
监督码位:r=n-k=m,其中m≥2正整数
由于本文中的检错对象是串口发送,一次发送8 bits数据,故需要的冗余位为4 bits,本文采用的汉明码为(12,8),其编码由8 bits数据和4bits组成。设数据分别为a0,a1,a2,a3,a4,a5,a6,a7。检验位为a8,a9,a10,a11,它们可按下面的式子决定:
2 测试环境及原理
本文的测试平台分为两部分,即pc串口发送部分和8051串口接收部分。pc通过串口发送数据,每次串口发送的单位为8 bits。8051通过串口接收pc发送的数据。由于硬件的限制,8051中存储数据的buffer最大为512 bytes。所以pc端的数据每次也只发送512 bytes,总共测试的数据大小为8 k bytes,传输完8 k bytes的数据需要16次。串口传输的波特率为57600。8051接收来自pc的数据,每次接收512 bytes数据,并进行错误检测。若检测到错误,则给pc发送一个重传请求,若没有检测到错误,则给pc发送一个继续传输的命令。
为了提高传输效率,在不影响检错的情况下,可分别对奇偶校验、crc校验、汉明码校验采用不同的数据传输结构。
奇偶校验每发送8 bits数据就算出1 bit的奇偶位,在算出8 bits的奇偶位之后,再将校验位一起发送到8051,其中数据d为512 bytes,group为64bytes,data为8 bits数据。其数据结构如图2所示。
crc校验时,每512 bytes数据产生1bytes校验位并发送到8051,其数据结构如图3所示。其中d为512 bytes,data为512 bytes,crc byte为8bit。即每512个bytes得到一个crc校验值。汉明码由于采用了(12,4),每8 bits数据产生4 bits的校验位。故其数据结构如图4所示,图中,d为512 bytes的数据,data为8 bits的数据。
3 测试结果分析
本文通过相同的环境,综合比较了三种错误检测的实际效率,其实验结果如表1所列。
表1是根据发送数据的长短和波特率计算出来的理论值,实际测试值则是调用pc端的时间函数来测试的。为了提高汉明码的解码效率,本文在8051上通过汇编语言进行解码。通过对得出的表中数据进行分析可见,crc校验具有最好的检错效率,且差错率低,耗时适中。
4 结束语
本文通过对串口传输中三种检错方法的大量数据进行比较,分析了它们的检错结果和效率。在奇偶校验中,为了提高检错速度,8051端可采用汇编语言直接读取标志位寄存器中的奇偶标识。而在汉明码中,则可分别采用c语言和汇编语言来进行编程。三种检错方法中,耗时最低的是奇偶校验,其检错的速度最快,crc8次之,检错最慢的是汉明码。误差率最低的为crc8,其次为汉明码,奇偶校验发生错误的概率比较大。
由于是串口通信,出错的概率比较小,因此,传输较大文件时,检错一般采用奇偶校验,只有对误差率要求较高的场合,才用到crc。汉明码一般很少用于检错场合。
从L1到L5:自动驾驶升级,三种关键传感器应该如何选?
LG展示可拉伸的弹性屏 Fitbit Versa Lite发布
一种生物启发设计制备的保温仿生气凝胶
华为与四方伟业联合发布了政务大数据解决方案
智能互联·数领未来|第五届全球人工智能创业者大会圆满举办!
8051单片机串口通信中的检错方法
法国松尼克蓄电池(中国)有限公司【销售总部】
红外雨量计(光学雨量传感器)在流动气象站中的应用
苹果13 真实图片曝光
Intel着急:软银收购之后发力 阿里将大量采用ARM处理器
华为荣耀V9的未来一片大好?买不到有什么用!
常见的嵌入式C语言面试题
RX产品家族介绍手册 [2] RX产品家族解决方案(上)
信号地
美国市场目前超级受欢迎的两款智能音箱均来自亚马逊
车联网技术是否可以应用到有轨电车上?
ipv6可以给安防带来怎样的改变
MOS管的原理是什么?它是如何起作用的?
影界的AI技术——4D自动梯形校正从设想成为现实
什么是变压器的铁损?