UART、SPI和I2C

在做单片机开发时UART、SPI和I2C都是我们最经常使用到的硬件接口。

参考博客:https://blog.51cto.com/13695010/2096153、https://www.jianshu.com/p/df2ed057b4a0

一、UART

UART是一种通用串行数据总线,用于异步通信,通过起始位和停止位及波特率进行数据识别。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。

接口

在单片机中UART可以说是一种最基本的配置,很多与电脑进行通信的设备都采用到它,按计算机最常规的说法就是串行通信。

  • TX - 数据发送接口
  • RX - 数据接受接口

两个设备间将TX与RX相连,RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口。

优缺点

优点

  1. 只使用两条信号线;
  2. 不需要时钟信号;
  3. 有校验位进行错误检测;

缺点

  1. 传输速率比较低。

二、SPI

SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。

接口

SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:

  •  SCLK:串行时钟,用来同步数据传输,由主机输出;
  •  MOSI:主机输出从机输入数据线,通常先传输MSB;
  •  MISO:主机输入从机输出数据线,通常先传输LSB;
  •  CS:片选线,低电平有效,由主机输出。

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。

工作模式

  • CPOL位表示初始时钟极性:

      CPOL = 0表示时钟初始为低电平,所以开始的第一(leading)边缘是上升沿,第二边缘(trailing)是下降沿。 
      CPOL = 1时的时钟启动为高电平,所以第一(leading)的边缘是下降沿。

  • CPHA的指示用于采样数据的时钟相位(注意是采样数据,采样是指的将数据线上的数据所存起来)

      CPHA = 0时表示边沿超前
      CPHA = 1表示边沿滞后

  1. 模式0:CPOL = 0 CPHA = 0 主机从机的数据均是在下降沿改变,上升沿锁存
  2. 模式1:CPOL = 0 CPHA = 1 主机从机的数据均是在上升沿改变,下降沿锁存
  3. 模式2:CPOL = 1 CPHA = 0 主机从机的数据均是在上升沿改变,下降沿锁存
  4. 模式3:CPOL = 0 CPHA = 1 主机从机的数据均是在下降沿改变,上升沿锁存

优缺点

SPI接口具有如下优点:

  1. 支持全双工操作;
  2. 操作简单;
  3. 数据传输速率较高。

同时,它也具有如下缺点:

  1. 需要占用主机较多的口线(每个从机都需要一根片选线);
  2. 只支持单个主机。

三、I2C

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

接口

  • SCL - 串行时钟线
  • SDA - 串行数据线接口

I2C接口包括时钟线(SCL)和数据线(SDA)。这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个设备都有自己的地址,主机通过不同地址来选中不同的设备。

优缺点

优点

  1. 只使用两条信号线;
  2. 支持多主机多从机;
  3. 有应答机制。

缺点

  1. 速率比SPI慢。

你可能感兴趣的:(UART、SPI和I2C)