你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

8051单片机串口通信的三种检错方法

[复制链接]
gaosmile 发布时间:2020-8-18 21:37
对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。
1 检错方式
基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。
微信图片_20200818213459.jpg

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,它们可按下面的式子决定:
P(x)=Q(x)·G(x)+R(x)
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所示。

微信图片_20200818213503.jpg
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所列。
微信图片_20200818213506.jpg

表1是根据发送数据的长短和波特率计算出来的理论值,实际测试值则是调用PC端的时间函数来测试的。为了提高汉明码的解码效率,本文在8051上通过汇编语言进行解码。通过对得出的表中数据进行分析可见,CRC校验具有最好的检错效率,且差错率低,耗时适中。
4 结束语
本文通过对串口传输中三种检错方法的大量数据进行比较,分析了它们的检错结果和效率。在奇偶校验中,为了提高检错速度,8051端可采用汇编语言直接读取标志位寄存器中的奇偶标识。而在汉明码中,则可分别采用C语言和汇编语言来进行编程。三种检错方法中,耗时最低的是奇偶校验,其检错的速度最快,CRC8次之,检错最慢的是汉明码。误差率最低的为CRC8,其次为汉明码,奇偶校验发生错误的概率比较大。
由于是串口通信,出错的概率比较小,因此,传输较大文件时,检错一般采用奇偶校验,只有对误差率要求较高的场合,才用到CRC。汉明码一般很少用于检错场合。

收藏 1 评论0 发布时间:2020-8-18 21:37

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版