【每日小知识】I2C、UART、SPI 三大通信总线快速分清
刚入门硬件时,最容易被各种通信总线绕晕:I2C、UART、SPI,看起来都是“芯片之间说话”,但它们的性格完全不同。
一、UART 和 USART
UART全称:Universal Asynchronous Receiver/Transmitter
中文常叫:通用异步收发器
关键词是:异步
UART 通信时一般没有单独的时钟线,双方靠约定好的波特率来“对拍”。
A 和 B 只是提前约好:
“我们都用 115200 的语速说话。”
A 的 TX 接 B 的 RX,A 的 RX 接 B 的 TX。
然后A 开始说,B 按照这个速度去听。
所以 UART 常见引脚是:
- TX:发送
- RX:接收
- GND:共地

USART全称:Universal Synchronous/Asynchronous Receiver/Transmitter
中文常叫:通用同步/异步收发器
关键词是:同步/异步
USART 比 UART 多了一种能力:同步通信。
同步模式下,它可能会额外使用一根时钟线,比如:
- TX
- RX
- CLK
这就像有人在旁边打拍子:
“一、二、三、四,按这个节奏收发数据。”
有时钟线参与后,收发双方对时序的依赖更明确。
但我们平时说“串口 UART”,通常也是在说它的异步模式。
也就是说:芯片外设叫 USART,不代表你一定在用同步通信。
大多数情况下,你只是把 USART 当 UART 用。
这也是新人最容易困惑的地方。
所以你可以这样理解:
USART 是增强版 UART,UART 是 USART 的一种常用工作方式。
二、I2C
I2C 可以理解为一个老师管理一个班级。
总线上通常只有两根线:
- SCL:时钟线,像老师敲黑板控制节奏
- SDA:数据线,像学生回答问题的通道
I2C 最典型的特点是:
一条总线上可以挂很多设备。
每个 I2C 设备都有自己的地址,像每个学生都有学号。MCU 想找谁,就先喊地址:
“学号 0x68 的同学在吗?我要读你的数据。”
如果设备地址匹配,它就回应;其他设备保持安静。
两根线,多个设备,靠地址区分谁说话。
但你想想通讯每次都要先喊人,速率肯定上不来,这也是I2C的缺点。

但 I2C 有一个非常容易被忽略的点:I2C 的 SDA 和 SCL 通常需要上拉电阻。
为什么?
因为 I2C 很多时候不是主动输出高电平,而是大家一起“松手”,让上拉电阻把线拉高;需要输出低电平时,再由设备把线拉低。
这就像一根绳子挂在弹簧上,大家可以往下拉,但没人拉的时候,弹簧会把它拉回去。
所以如果没有上拉电阻,或者上拉阻值不合适,就可能出现:
- 波形上升沿很慢
- 通信不稳定
- 扫不到设备地址
- 低速能跑,高速就挂
- 板子 A 能用,板子 B 不能用
常见上拉电阻可以从 4.7kΩ 附近开始考虑,但不是固定答案。
比如总线速度越高、线越长、挂载设备越多,可以取1K或2.2K电阻,但是要电流上升也会导致器件发热。需要综合考虑。
上拉电阻只需要一组,总线共用,不用每个 I2C 器件单独配。
三、SPI
SPI 可以理解为老板给每个重要员工拉专线开高速会议。
常见 SPI 有四类信号:
- SCLK:时钟线,控制节奏
- MOSI:主机发给从机
- MISO:从机发给主机
- CS / SS:片选线,决定当前叫谁出来工作
SPI 的关键在于片选线。
MCU 想跟哪个设备通信,就把对应设备的 CS 拉低,相当于老板点名:
“现在 3 号员工进入会议,其他人先别说话。”
SPI 的特点是:
- 速度快
- 通信效率高
- 常用于 Flash、屏幕、ADC、DAC、高速传感器等
- 适合数据量较大的场景
但代价是:设备越多,通常需要越多片选线。它不像 I2C 那样天然靠地址管理多个设备。

四、对比总览
| UART | TX、RX(2 根,GND 共地) | 点对点,只能一对一 | 低~中速 | 串口调试、蓝牙模块、GPS |
| I2C | SDA、SCL(2 根 + GND) | 一对多,一条总线挂多个设备 | 低速 | 温湿度传感器、OLED 屏幕、EEPROM |
| SPI | SCK、MOSI、MISO、CS(4 根起) | 一对多,每个设备单独片选 | 高速 | Flash、LCD、ADC、高速外设 |
硬件新人可以先记住:
少设备、简单通信看 UART;
多设备、省引脚看 I2C;
高速度、大数据看 SPI。

