在做单片机开发时UART、SPI和I2C都是我们最经常使用到的硬件接口。
参考博客:SPI、I2C和UART_wx5acb22bb13aec的技术博客_51CTO博客、UART、SPI和I2C详解 - 简书
一、UART
UART是一种通用串行数据总线,用于异步通信,通过起始位和停止位及波特率进行数据识别。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
接口
在单片机中UART可以说是一种最基本的配置,很多与电脑进行通信的设备都采用到它,按计算机最常规的说法就是串行通信。
- TX - 数据发送接口
- RX - 数据接受接口
两个设备间将TX与RX相连,RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口。
优缺点
优点
- 只使用两条信号线;
- 不需要时钟信号;
- 有校验位进行错误检测;
缺点
- 传输速率比较低。
二、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表示边沿滞后
- 模式0:CPOL = 0 CPHA = 0 主机从机的数据均是在下降沿改变,上升沿锁存
- 模式1:CPOL = 0 CPHA = 1 主机从机的数据均是在上升沿改变,下降沿锁存
- 模式2:CPOL = 1 CPHA = 0 主机从机的数据均是在上升沿改变,下降沿锁存
- 模式3:CPOL = 0 CPHA = 1 主机从机的数据均是在下降沿改变,上升沿锁存
优缺点
SPI接口具有如下优点:
- 支持全双工操作;
- 操作简单;
- 数据传输速率较高。
同时,它也具有如下缺点:
- 需要占用主机较多的口线(每个从机都需要一根片选线);
- 只支持单个主机。
三、I2C
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
软件框架
1、应用层通过标准的 open 调用进行 IIC 设备的操作;
2、每一个 i2c_client 对应一个实际硬件上的 IIC device(比如 EEPROM)
3、每一个 i2c_driver 描述一种 IIC 设备的驱动
4、i2c_dev 是注册的字符类型的设备
5、i2c_core 是 IIC 核心层,提供了总线、驱动、通信方式等的注册和钩子函数的设置
6、i2c_adapter 用于描述一个 SoC 的一个 IIC 控制器
7、i2c_algorithm 用于底层对接实际的控制器,产生 IIC 硬件波形的函数
8、下面对接的就是实际的 SoC 的 IIC 控制器(寄存器)和硬件
APP访问-->驱动层(iic_client,iic_driver,iic_dev)-->iic核心层(iic_core)-->访问抽象层(i2c_adapter,i2c_algorithm)--> 硬件实现控制层-->soc内部的iic模块-->挂载iic总线上的硬件
接口
- SCL - 串行时钟线
- SDA - 串行数据线接口
I2C接口包括时钟线(SCL)和数据线(SDA)。这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个设备都有自己的地址,主机通过不同地址来选中不同的设备。
优缺点
优点
- 只使用两条信号线;
- 支持多主机多从机;
- 有应答机制。
缺点
- 速率比SPI慢。