Uart_串口通信原理

发布时间 2023-08-05 16:25:24作者: 可乐klelee

什么是UART?Universal Asynchronous Receiver/Transmitter 翻译为:通用异步收发(协议),它实现了将并行信号转换为串行信号。UART协议最典型的实现就是我们常说的串口。

串口

什么是串口?串口是一种串行的数据传输方式,他是UART协议的一种实现。

串行与并行

所谓串行,与并行对比形成一组概念,以车道来形容,有八辆车:

  • 并行就是单向八车道,八辆车同时通过该路段;

    image-20230805152909080

  • 串行就是单向单车道,八辆车需要一次排队通行。

    image-20230805153520573

串口通信原理

设备之间的连接

串口通信通过两根信号线TX和RX完成,两个设备之前还需要共地,所以可以说串口通过三根线进行通信。串口通信没有主从设备之分,两个设备都可以进行发送和接收。

  • TX:发送数据
  • RX:接收数据
  • GND:串口通信一定要保证两设备共地。

image-20230805154201765

为什么要保证两设备共地?串口发送数据是通过在信号线上拉高拉低电平实现的。如果两台设备不共地的话,假设A设备发送一个高电平逻辑“1”,但是B设备此时电势比较高,就有可能不认为信号线上此时是一个高电平,导致数据出错。因此,两设备共地,是两设备电势相同,就能保证设备对高低电平的判断。

image-20230805155144760

如图所示,对A设备来说,发出一个高电平,对于没有共地的B设备来说,就不一定时高电平了哦。

信号协议

空闲位的概念:

UART协议规定,当总线处于空闲状态时(没有进行数据传输),需要将信号线置为高电平,以此来表示当前线路没有数据传输。

起始位: 在空闲位的基础上,将信号线拉低一下,也就是发送一个低电平,表示开始传输数据。

数据位: 起始位之后的电平变化就表示本次传输的信息的数据。一般我们设置为8位,也可以5、6、7、9位等。

奇偶校验位: 有时候为了保证数据完整性,我们会传一个奇偶校验位。数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验位其实是调整个数,串口校验分几种方式:

  1. 无校验(no parity)
  2. 奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,如果“1”的数目是奇数,校验位为“0”;
  3. 偶校验(even parity):如果数据为中“1”的数目是偶数,则校验位为“0”,如果为奇数,校验位为“1”;
  4. mark parity:校验位始终为1(不常用);
  5. parity:校验位始终为0(不常用)。

停止位: 数据结束标志,可以是1位,1.5位,2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。

image-20230805161053512

波特率

波特率是指每秒钟传送的符号(码元)数量,也就是每秒调制状态(码元)变化的次数,等于系统的采样率,每个调制状态对应一个所谓的符号(码元)。 波特率是串口通信的一种参数,用来表示串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。(看最后面这一位就好了)

我们常用的波特率有:9600、19200、38400、115200等

小结

串口的整个通信原理其实是比较简单的,到这里也就大概知道串口到底是怎样发送数据的了。后面将继续研究串口的底层驱动框架。串口的驱动框架可以说是这些通信协议里面最复杂的了吧,加油!