串口UART,IIC,SPI三者的介绍和区别
一、串口UART
1. UART介绍:
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的缩写,是一种用于串行通信的硬件接口协议。它允许设备之间通过简单的两根线(TX发送、RX接收)进行全双工异步数据传输,无需时钟信号同步,广泛应用于微控制器、嵌入式系统、计算机外设等场景
2.工作原理:
1)接线:TX(发送),RX(接收),交叉连接,外加GND(共地),最少2根线
2)同步方式:异步,没有同步时钟线,靠双方约定波特率(常见9600/115200)来对时
3)拓扑:点对点,一收一发,一UART口只能挂一设备
4)全/半双工:全双工(这解释双工(只能单向),半双工(双向都能走,但不能同时),全双工(双向都能走,可以同时进行)),TX、RX 独立走
5)速率:一般9600~3Mbps(115200最常见)
3.特点
1.简单粗暴,最为常见的一种通信协议
2.无地址机制,不支持多设备挂同一条线上
3.长距离,相比IIC和SPI更耐造(RS232/RS485 就是 UART 的电平变种,能跑几十米)
4.通信格式
起始位(1)+数据位(8)+校验位(0/1)+停止位(1/1.5/2)
5.经典应用场景
1.printf重定向,串口调试打印输出
2.蓝牙模块驱动,例如BT07 BT311 M02蓝牙模块,AT指令发送等
二、IIC
1.IIC介绍:
IIC(Inter-Integrated Circuit,集成电路互联总线) 是一种同步、半双工、多主多从、串行通信总线,由飞利浦(现恩智浦)在 1982 年发明,用于在同一块电路板上连接低速外设
2.工作原理
1)接线:SDA(数据线),SCL(时钟线),外加GND(共地),2根线挂所有设备
2)同步方式:同步,有SCL时钟线
3)拓扑:多主多从,每条线上可以挂多个设备,每个设备有7位/10位地址,主机通过发送相应从机地址,来进行通信
4)全/半双工:半双工(SDA一根线分时收发)
5)速率:标准100Kbps,快速400Kbps,高速3.4Mbps
3.特点
1.真正的总线式,省引脚,通过发送不同从机地址,进行主从通信
2.有应答/非应答机制
3.开漏输出+上拉电阻,遵循线与逻辑(任意一个拉低,总线就会变低,只有都将总线释放,靠外部上拉电阻拉高,总线才会呈现高电平)
4.串行,数据按位在单根线上逐个传输
一句话记住它:用两根线(SDA + SCL)挂一堆设备,每次喊地址找人干活,谁喊谁主、被喊的从,说完就放总线给别人用
4.通信格式
起始信号 + 从机地址(7bit)+ 读写位(0=写,1=读)+ ACK(从机应答)+ 数据字节(MSB先行)+ ACK + 停止信号
1)起始信号:SCL 为高电平时,SDA 由高→低产生一个下降沿
2)停止信号:SCL 为高电平时,SDA 由低→高产生一个上升沿
3)地址与读写:7 位从机地址左对齐,最低位为读写位(0 写 / 1 读),组成 8 位发送
4)应答机制:每发送完一个字节后,接收方在第 9 个 SCL 时钟周期拉低 SDA 表示 ACK;若接收方不拉低(保持高电平)则为 NACK,通常表示传输结束或从机忙
5)数据字节:每次传输 1 字节(8 位),MSB(最高位)先发,可连续发送多个字节,每字节后跟一个 ACK
5.经典应用场景
1.OLED屏幕驱动
2.光照传感器(BH1750),温湿度传感器(DHT11)等等
3.EEPROM
三、SPI
1.SPI介绍:
SPI(Serial Peripheral Interface,串行外设接口) 是一种同步、全双工、一主多从、串行通信总线,由摩托罗拉在 1980 年代推出,用于 MCU 与外围芯片之间高速交换数据
2.工作原理
1)接线:CS(片选线),SCK(时钟线),MISO(主收从发),MOSI(主发从收),标准为4根线
若为OLED/LCD屏幕驱动,则只需要三根线:CS(片选线),SCK(时钟线),MOSI(主发从收)
2)同步方式:同步,有SCK时钟线
3)拓扑:一主多从,每个从设备独占一条CS片选线,主设备和那个从设备通信,就先把那个从机的CS线拉低
4)全/半双工:全双工(MOSI/MISO 同时跑),主机在SCK低电平期间,把数据逐位放在MOSI线上,从机在高电平期间进行读取,随着相同的SCK同步时钟信号下,从设备在SCK低电平期间,把数据逐位放在MISO线上,主机在高电平期间进行读取
5)速率:几 Mbps ~ 几十 Mbps(常见 10M/20M/50M,高端能上百 M)
3.特点
1.最快的板级协议,无地址、无应答,纯靠 CS 选人
2.无标准"谁来发"的仲裁,全靠主设备控 CS 和 SCK
3.引脚占用多(N 个从设备要多 N 根 CS)
4.通信格式
SPI 通信以主设备产生的 SCK 时钟为同步基准,数据在 MOSI 和 MISO 线上同时传输。每次传输以 CS 片选信号拉低开始,以 CS 拉高结束。
1)数据帧结构
SPI 没有固定的帧格式,通常以 8 位(1 字节)为基本传输单位,MSB(最高位)先行。主设备在 SCK 的每个时钟周期通过 MOSI 发送 1 位数据,同时从设备通过 MISO 返回 1 位数据,实现全双工传输。连续传输多个字节时,CS 保持低电平,SCK 持续输出时钟脉冲。
2)时钟极性(CPOL)与时钟相位(CPHA)
SPI 通过 CPOL 和 CPHA 两个参数组合出 4 种工作模式,决定数据在 SCK 的哪个边沿被采样和发送:
- CPOL(Clock Polarity):定义 SCK 空闲时的电平。
CPOL = 0:空闲时 SCK 为低电平;
CPOL = 1:空闲时 SCK 为高电平。 - CPHA(Clock Phase):定义数据在 SCK 的哪个边沿被采样。
CPHA = 0:在 SCK 的第一个边沿(上升沿或下降沿,取决于 CPOL)采样数据;
CPHA = 1:在 SCK 的第二个边沿采样数据。
3)四种模式详解(模式 0 ~ 模式 3)
- 模式 0(CPOL=0, CPHA=0):SCK 空闲为低,在 SCK 上升沿采样数据,下降沿发送数据。这是最常用的模式,大多数 SPI 外设默认支持。
- 模式 1(CPOL=0, CPHA=1):SCK 空闲为低,在 SCK 下降沿采样数据,上升沿发送数据。
- 模式 2(CPOL=1, CPHA=0):SCK 空闲为高,在 SCK 下降沿采样数据,上升沿发送数据。
- 模式 3(CPOL=1, CPHA=1):SCK 空闲为高,在 SCK 上升沿采样数据,下降沿发送数据。
4)数据传输时序示例(模式 0)
以模式 0(CPOL=0, CPHA=0)传输 1 字节 0xA5(二进制 1010_0101)为例:
- 主设备将 CS 拉低,选中从设备。
- SCK 空闲为低,主设备在 SCK 下降沿将数据位放到 MOSI 线上(第一位 MSB = 1)。
- SCK 上升沿到来时,从设备在 MOSI 上采样该位;同时从设备在 MISO 上放置自己的数据位,供主设备在下一个上升沿采样。
- 重复步骤 2-3 共 8 个 SCK 周期,完成 1 字节传输。
- 主设备将 CS 拉高,结束本次传输。
主从双方必须工作在相同的 CPOL 和 CPHA 模式下,否则采样边沿错位会导致数据错误。实际开发中,需查阅从设备数据手册确认其支持的 SPI 模式,并在主设备端配置一致。
5.经典应用场景
1.OLED/LCD屏幕驱动
2.Flash(W25Q64)
3.ADC
四、三者区别
下表从多个维度对 UART、IIC 和 SPI 三种常见串行通信协议进行对比,帮助读者快速理解各自的特点与适用场景:
| 对比项 | UART | IIC | SPI |
|---|---|---|---|
| 接线方式 | TX、RX 两根数据线 + GND(共地),交叉连接 | SDA(数据线)、SCL(时钟线)两根线 + GND,所有设备挂在同一总线上 | CS(片选)、SCK(时钟)、MISO、MOSI 四根线(标准);每增加一个从设备需多一根 CS |
| 同步方式 | 异步,无时钟线,靠双方约定波特率同步 | 同步,由 SCL 时钟线提供同步信号 | 同步,由 SCK 时钟线提供同步信号 |
| 拓扑结构 | 点对点,一收一发,一个 UART 口只能挂一个设备 | 多主多从,总线上可挂多个设备,通过地址区分 | 一主多从,每个从设备独占一条 CS 片选线 |
| 双工模式 | 全双工,TX 和 RX 独立同时收发 | 半双工,SDA 一根线分时收发 | 全双工,MOSI 和 MISO 可同时传输 |
| 速率范围 | 一般 9600 ~ 3 Mbps(115200 最常见) | 标准 100 Kbps,快速 400 Kbps,高速 3.4 Mbps | 几 Mbps ~ 几十 Mbps(常见 10M/20M/50M,高端可达上百 Mbps) |
| 有无地址/应答机制 | 无地址机制,不支持多设备挂同一条线;无硬件应答 | 有 7 位/10 位从机地址,每字节后跟 ACK/NACK 应答 | 无地址机制,无硬件应答,纯靠 CS 片选选中从设备 |
| 典型应用场景 | 串口调试打印输出、蓝牙模块驱动(BT07/BT311/M02)、GPS 模块、RS232/RS485 通信 | OLED 屏幕驱动、温湿度传感器(DHT11/BH1750)、EEPROM 存储、RTC 时钟模块 | OLED/LCD 屏幕驱动、Flash 存储(W25Q64)、ADC 采样、高速传感器、SD 卡 |
| 优缺点 | 优点:简单易用、硬件成本低、传输距离远(RS232/RS485 可达几十米); 缺点:速率较低、无多设备挂载能力、无硬件纠错 | 优点:引脚少(仅 2 线)、支持多设备总线、有应答机制保证可靠性; 缺点:速率相对较低、半双工效率受限、传输距离短 | 优点:速率最快、全双工效率高、无地址开销、协议简单灵活; 缺点:引脚占用多(N 个从设备需 N+3 根线)、无应答机制、无多主仲裁 |