极客秀
搜索

如果让你来发明串口通信!什么?我来发明◝₍ᴑ̑ДO͝₎◞?你该如何解决串口通信这四个问题!

上次我们用USB实现了虚拟串口通信,但是事实上和常规的串口通信有很大的区别。本期我们从串口通信的 数据链路层
介绍串口通信协议。串口通信主要要解决四个问题:

1.单条通讯线上的数据如何同步。

2.接收方如何知道数据的起始。

3.时钟偏移如何解决。

4.数据准确性检验。

1

数据同步

在异步串口通信中,数据是通过一串高低电平的变化(即电平信号)来传输的。由于串口并没有时钟信号(CLK)为发射设备和接收设备进行信号同步的。

无法直接的从一段连续的高低电平中知道到底有多少个0和多少个1,发送端和接收端必须在预定的时间间隔内保持同步,以确保接收到的数据可以被正确地解码。即利用波特率让接收端知道,多少时间间隔后需要进行一次读取电平。

这样子我们就解决了如何实现数据传输同步性的问题 。

2

如何开始

我们解决完数据同步性问题后,下一个需要解决的事情如何让接收端知道哪里是数据传输的开始。

对此,串口协议使用的方式是,让串口在不工作的状态下保持高电平(空闲)。当需要数据传输时,先 拉低通讯线
,持续一个间隔时间(1/波特率)之后再持续发送八位数据,这样子接收端就知道什么时候是数据的开始。

3

时钟不同步

然而,再传输过程中由于时钟的偏差,在少数的数据传输过程中并不会体现,但是经过时间的积累中会导致偏差的积累,可能导致数据读取时候的偏移。

为了解决这个问题,我们可以在通讯协议中添加停止位,串口协议规定,在数据传输结束后可以设置停止位(通常为1位),这样子就可以让接收方在收到停止位之后等待下一个开始位,就不会出现时钟偏移的情况了。

4

数据校准

为了确保数据可靠性,我们可以在数据传输中添加校验位,通常采用的是奇偶校验,即数据中1的个数为奇数,校验位则为1。为偶数,校验位即为0。

恭喜你:发明了串口通信!

下期我们再解释一下为什么虚拟串口可以不用调节波特率

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容