https://oss.012700.xyz/butterfly/2024/09/hexo-theme-butteffly-docs-outdate-flat.png

串行和并行

1. 串行通信

  • 位通过单根线——发送,下图显示了二进制(01000011)中字母 “C” 的串行传输。当时时钟线为高电平时,接受数据位,高电平为 1,低电平为 0。

2. 并行通信

  • 数据位在导线中同时传输,下图显示了二进制(01000011)中字母 “C” 的并行传输。当时钟线为高电平时,8 个数据位同时接受数据,高电平位 1,低电平位 0。

1.2

所以 UART、SPI、I2C 都是串口通信,因为它们都是通过一根线作为数据线传输数据。

全双工与半双工

1. 全双工

  • 简单来说,比如我们在打电话时,我们可以在同一时间说话,这就是全双工通信

2. 半双工

  • 相对的,虽然半双工也可以互相通信,但是在同一时间只能单方向传输数据。

UARTSPI 都是全双工通信方式,因为他们的数据线都有两根,即可以在同一时间 A 发数据给 B,B 也可以在这个时间发数据给 A。

I2C 通信只有一根数据线,所以不能同一时间双向传输数据。

同步通信和异步通信

  • 同步是阻塞模式,异步是非阻塞模式

1. 同步通信

  • 发送方发出数据后,等待收方发回响应以后才发下一个数据包的通讯方式。

2. 异步通信

  • 发送方发出数据后,不等接收方发回响应,接着发送下一个数据包的通讯方式。

所以 SPI 和 I2C 都是同步通信,因为他们都有时钟线,UART 是异步通信方式,他只有两个数据线,发送完数据不会确定你是否接收到。

SPI 通信

  • SPI 可以无中断传输数据,可以连续地发送或接收任意数量的位。但是 I2C 和 UART 中,数据以数据包的形式发送,有限定位数。

  • 在 SPI 设备中,设备分为主机控制设备(通常是微控制器)和从机(通常是传感器,显示器和存储芯片)设备,从机从主机那获取指令

  • SPI 信号线有四种:

  1. MOSI-信号线:主机输出,从机输入;
  2. MISO-信号线:主机输入,从机输出;
  3. SCLK-时钟信号;
  4. SS/CS-片选信号;
  • SPI 协议特点: 实际上,从机的数量受系统负载电容的限制,它会降低主机在电压电平之间准确切换的能力。

  • 时钟信号

  1. 每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。时钟信号由于是主机配置生成的,因此 SPI 通信始终由主机启动。
  2. 设备共享时钟信号的任何通信协议都成为同步。SPI 是一种同步通信协议,还有一些异步通信不使用时钟信号。例如在 UART 通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。
  • 片选信号:主机通过拉低从机的 CS/SS 来使能通信。主机可以存在多个 CS/SS 引脚,允许主机与多个从机进行通信。

1. 传输步骤

  1. 主机输出时钟信号

3.1

  1. 主机拉低 SS/CS 引脚,激活从机

3.2

  1. 主机通过 MOSI 将数据发送给从机

3.3

  1. 如果需要相应,则从机通过 MISO 将数据返回给从机

3.4

2. SPI 优缺点

  • 优点:无起始位和停止位,因此数据可以持续传输不会中断;数据传输速度快(比 I2C 快几乎两倍)。独立的 MISO、MOSI 可以同时发送和接收数据。
  • 缺点:使用四根线(I2C 使用两根线),没有信号接收成功的确认(I2C 由此功能),没有任何形式的错误检查(UART 中的奇偶校验位)。

UART 通信

  • 两个 UART 直接相互通信。发送 UART 将控制设备(如 CPU)的并行数据转换位串行形式,以串行的形式将其发送到接收 UART。只需要两条即可在两个 UART 之间传输信息:

4.1

  • UART 属于异步通信,没有时钟信号。它会在数据包中增加开始和停止位。这些位定义了数据包的开始和结束,因此接收 UART 知道何时读取这些数据。
  • 当接收 UART 检测到起始位时,它将以特定的波特率的频率读取(数据传输速度的度量),以每秒比特数(bps)表示。两个 UART 必须以大约相同的波特率工作,发送的接收 UART 之间的波特率只能相差约 10%。

1. 工作原理

  • UART 数据包包含有一个起始位,5 到 9 个数据位(取决于 UART),一个可选择的奇偶检验位以及一个或两个停止位
  • 起始位:UART 数据传输线通常在不传输数据时保持在高电平电平。开始传输时发送 UART 在一个时钟周期内将传输线从高电平拉低到低电平,当接收 UART 检测到高电压转换时,他开始以波特率的频率读取数据帧中的位
  • 数据帧:数据帧内包含正在传输的实际数据。使用奇偶校验位时 5-8 位,不使用最多可以时 9 位
  • 校验位:奇偶校验位是接收 UART 判断传输期间是否有任何数据更改的方式。接收 UART 读取数据帧后,它将对值为 1 的数进行计数,并且检查总数是偶数还是奇数,是否与数据相匹配
  • 停止位:向数据包的结尾发出信号,发送 UART 将数据传输线从低电压驱动到高电压至少两位的时间

2. 传输步骤

  1. 发送 UART 从数据总线并行接收数据

4.1

  1. 发送 UART 将起始位、奇偶校验位和停止位添加到数据帧

4.2

  1. 整个数据包从发送 UART 串行发送到接收 UART。接收 UART 以预先配置的波特率对数据线进行采样

4.3

  1. 接收 UART 丢弃数据帧中的起始位、奇偶校验位和停止位

4.4

  1. 接收 UART 将串行数据转换回并行数据,并将其传输到接收端的数据总线

4.5

参考文章:串口通信————UART、I2C、SPI详解(总结篇)