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

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

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

   3.时钟偏移如何解决。

   4.数据准确性检验。

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

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

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

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

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

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

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

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

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

嘉立创PCB

还没有评论,抢个沙发!