一、串口通信概述
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。
串行接口简称为串口,串行接口 (Serial Interface)是指数据一位一位地顺序传送。实现双向通信就需要一对传输线,即TX与RX线。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
1. 串口如何连接
电路连接方式:
串口如果要实现双向传输,则设备1与设备2,TX与RX要交叉相连。
起始位: 数据线TX由高电平变为低电平。
停止位: 数据线TX由低电平变为高电平。
起始位和停止位作用:
如果接收设备检测到数据线由高电平变为低电平,就是接收到了来自发送设备的起始信号,表示开始数据的传输。如果接收设备检测到数据线由低电平变为高电平,就是接收到了来自发送设备的停止信号,表示一帧数据的结束,通过以上特点接收设备就可以将中间的8bit有效数据解析出来,这样就完成了一帧数据的传输。
2. 如何计算波特率
串口传输格式:我们通常用的串口传输格式为:1bit起始位+8bit数据位+1bit停止位(无奇偶校验位),如下图所示
所以传输1Byte数据串口需要传输10bit数据。上面计算得传输1Bit需要的时间为8.68us,则传输1Byte需要时间为8.68*10=86.8us。
波特率
由基础知识知50M系统时钟—波特率为115200条件下传输1bit需要计数个数为434。那么1Byte(串口传输格式为:1bit起始位+8bit数据位+1bit停止位)是不是循环计数10次434就可以传输完毕。
要注意的是,串口通信的两台主机之间,波特率要一致,下面两图演示了波特率一致与不一致的情况
收发波特率一致:
收发波特率不一致:
计算公式
以波特率115200为例
波特率115200 = 115200 (位/秒)。
如果没有校验位,就应该除以 10,得到的是每秒字节数:波特率115200 = 115200 (位/秒) = 11520 (字节/秒)。
再除以 1024,就是每秒 KB 数:波特率115200 = 115200 (位/秒) = 11.25 (KB/秒)。如果有一位奇偶校验位,就应该除以 11,得到的是每秒字节数。
最后得出:波特率115200 = 115200 (位/秒) = 10.27 (KB/秒)。
二、实验演示
1. 实验设备
- 两个USB TO TTL
- 两台PC机
- 杜邦线若干
- 串口助手软件
2. 实际电路连接
连接方法与之前的理论一致,解法见下表,电源可以不接,可以通过电脑供电。
USB TO TTL 1 | USB TO TTL 2 |
---|---|
TX | RX |
RX | TX |
GND | GND |
3V3 | 3V3 |
实际接线如下图
3. 通过串口传输数据
按照上示连接好了之后,连接两台电脑,打开各自电脑的串口助手,并打开串口
1. 选择一个文件进行传输
这里我选择传输一张2.11Mb的jpg文件
2. 计算理论传输时间
在串口助手打开了文件之后,显示文件大小为2220595字节
根据之前给出的计算公式,理论传输时间为216秒
3. 实际传输对比
开始传输后,发送端与接收端分别显示如下
传输完成后
传输时,使用手机同步计时,实际的传输时间为4*60+31=271秒,比理论计算的216秒与系统给出的理论实践200秒都要长,说明实际上通过串口传输的速率没办法达到理论峰值。
三、总结
本次实验通过两个usb to ttl在两台pc机之间进行了大文件的传输,并对文件大小进行预算,根据大小估算了理论计算时间,再将理论与实际时间进行对比,实验结果表明,串口的实际传输速率是要低于理论速率的。本次实验的过程总体来说还是比较顺利,接线也比较简单,但是其实背后的一些底层原理还没有那么清晰,所以以后还需要继续接着学习、动手实践。