在嵌入式系统中,单片机与外部设备之间的数据交换离不开串行通信。UART、SPI、I2C 和 1-Wire是最常见的四种串行通信方式,它们各自在引脚数、速率、拓扑结构、协议复杂度等方面有着显著差异,适用于不同的应用场景。本文将对这四种协议进行系统、丰富的介绍,并给出对比与选型建议。
一、UART(通用异步收发器)
1. 基本概念
UART(Universal Asynchronous Receiver/Transmitter)是一种异步、全双工、点对点的串行通信协议。它不需要时钟线,通信双方通过约定的波特率(baud rate)来同步数据采样。UART 是计算机串口、蓝牙模块、GPS 模块、调试控制台等最常用的接口之一。
2. 电气特性与信号线
TX(发送):主机发送数据到对方。
RX(接收):主机接收对方的数据。
GND:共地参考。
逻辑电平常见有:
TTL/CMOS 电平:0~3.3V 或 0~5V,直接连接单片机引脚。
RS-232 电平:±3V~±15V,需要电平转换芯片(如 MAX232)。
RS-485 电平:差分信号,抗干扰强,适合长距离多机通信。
3. 数据帧格式
UART 以帧为单位传输数据,每帧包含:
[起始位][数据位(5~9位)][校验位(可选)][停止位(1/1.5/2位)]
起始位:1 位低电平,表示帧开始。
数据位:通常 8 位,LSB 在前或 MSB 在前可配置(通常 LSB 先)。
校验位:奇校验、偶校验或无校验。
停止位:1 位高电平(或 1.5/2 位),表示帧结束。
空闲时总线保持高电平。接收方在检测到下降沿(起始位)后,延时 1.5 个位周期采样数据位,以提高抗干扰能力。
4. 波特率与误差
波特率是每秒传输的码元数,常见值:9600、19200、38400、57600、115200 等。由于异步通信没有时钟线,双方晶振误差会导致采样偏移。通常要求波特率误差 < 3%,否则会出现数据错误。
5. 优缺点
优点:
仅需两根数据线(TX、RX),简单方便。
全双工,可同时收发。
协议简单,几乎所有单片机都有硬件 UART 外设。
适合中等距离(RS-232 约 15m,RS-485 可达 1.2km)。
缺点:
点对点通信为主,多机通信需要额外协议(如 RS-485 地址码)。
异步无时钟,对波特率精度要求高。
速率较低,通常不超过几 Mbps(高速 UART 可达 4 Mbps)。
6. 典型应用
调试串口(printf 输出)
GPS、蓝牙、WiFi 模块
工业 RS-485 总线
与 PC 通信
二、SPI(串行外设接口)
1. 基本概念
SPI(Serial Peripheral Interface)是由 Motorola 提出的同步、全双工、高速串行通信协议。它采用主从架构,由一个主机控制时钟,一个或多个从机通过片选信号被选中通信。SPI 常用于 Flash 存储器、ADC/DAC、显示屏、传感器等高速外设。
2. 信号线
SCLK(Serial Clock):主机产生的时钟信号。
MOSI(Master Out Slave In):主机发送、从机接收的数据线。
MISO(Master In Slave Out):从机发送、主机接收的数据线。
CS/SS(Chip Select / Slave Select):低电平有效的片选信号,用于选择从机。
有些变体使用三线制(共用数据线,半双工)或四线制标准全双工。
3. 工作原理与模式
SPI 通信基于移位寄存器。主机和从机各自有一个移位寄存器,在时钟边沿同时移出和移入数据,实现全双工交换。
时钟极性与相位(CPOL、CPHA):
CPOL=0:空闲时 SCLK 为低电平。
CPOL=1:空闲时 SCLK 为高电平。
CPHA=0:第一个时钟边沿采样数据。
CPHA=1:第二个时钟边沿采样数据。
四种组合模式(模式 0、1、2、3)需主机与从机配置一致。
4. 拓扑结构
一主一从:最简单,直接连接。
一主多从:主机为每个从机分配独立的 CS 引脚,或使用菊花链(daisy chain)方式。
5. 优缺点
优点:
高速:时钟可达数十 MHz,甚至 100 MHz 以上。
全双工:同时收发数据。
协议简单:无寻址、无应答,硬件实现容易。
推挽驱动:信号质量好,无需上拉电阻。
缺点:
所需引脚较多(至少 4 根,多从机时需更多 CS)。
无标准协议层,不同器件配置差异大。
无应答机制,无法确认从机是否收到数据。
传输距离短,通常用于板级通信(< 几十厘米)。
6. 典型应用
SPI Flash(W25Q128)
高速 ADC/DAC
TFT 显示屏
SD 卡(SPI 模式)
无线模块(nRF24L01、LoRa)
三、I2C(Inter-Integrated Circuit,又称 IIC)
1. 基本概念
I2C 是 Philips(现 NXP)开发的同步、半双工、多主多从串行总线。它仅用两根线(SDA、SCL)即可连接多个设备,通过地址进行寻址。I2C 广泛应用于板级低速外设,如 EEPROM、传感器、RTC、PMIC 等。
2. 信号线
SDA(Serial Data):串行数据线。
SCL(Serial Clock):串行时钟线,由主机产生。
GND:共地。
两根线均通过上拉电阻连接到电源(通常 3.3V 或 5V),采用开漏输出,实现“线与”逻辑。
3. 电气特性与地址
上拉电阻:典型值 4.7kΩ,根据总线电容和速率调整。
逻辑电平:低电平由设备拉低,高电平由上拉电阻拉高。
地址:每个从机有 7 位或 10 位地址。7 位地址模式下,总线上最多可挂 112 个设备(部分地址保留)。常见地址如 0x50(EEPROM)、0x68(MPU6050)、0x48(ADS1115)。
4. 通信协议
I2C 通信以字节为单位,每字节 8 位,MSB 在前。每次传输由主机发起,以起始条件开始,停止条件结束。
起始条件(START):SCL 高电平时,SDA 从高到低跳变。
停止条件(STOP):SCL 高电平时,SDA 从低到高跳变。
数据位:SDA 在 SCL 低电平时改变,在 SCL 高电平时保持稳定。
应答位(ACK/NACK):每传输完 8 位数据后,接收方在第 9 个时钟脉冲拉低 SDA 表示 ACK,保持高电平表示 NACK。
传输格式:
[START][从机地址(7位)+R/W位][ACK][数据字节][ACK]...[STOP]
5. 时钟拉伸(Clock Stretching)
当从机需要更多时间处理数据时,可以将 SCL 拉低,使主机等待,直到从机释放 SCL。这是一种流控机制。
6. 多主机与仲裁
I2C 支持多主机。当多个主机同时发送时,通过“线与”机制进行仲裁:发送低电平的主机优先,竞争失败的主机自动退出,不破坏总线数据。
7. 速率模式
标准模式:100 kbps
快速模式:400 kbps
快速模式+:1 Mbps
高速模式:3.4 Mbps
超快速模式:5 Mbps(单向)
8. 优缺点
优点:
仅需两根线,节省引脚。
支持多主多从,地址寻址灵活。
有应答机制,可靠性较高。
可挂载大量设备,适合板级传感器网络。
缺点:
速率较低(通常 400 kbps)。
开漏结构导致上升沿较慢,影响高速通信。
协议相对复杂,需要处理起始/停止/应答/仲裁等。
半双工,同一时刻只能单向传输。
9. 典型应用
EEPROM(AT24C02)
传感器(温度、湿度、加速度计、陀螺仪)
RTC 时钟芯片
电源管理 IC
OLED 显示屏(部分)
四、1-Wire(单总线)
1. 基本概念
1-Wire 是 Dallas Semiconductor(现 Maxim Integrated / ADI)开发的单线、异步、半双工串行通信协议。它仅用一根数据线(DQ)加地线即可实现主机与多个从机之间的通信,甚至可以通过数据线为从机寄生供电。最典型的器件是 DS18B20 数字温度传感器。
2. 电气特性
数据线 DQ:开漏结构,外接上拉电阻(典型 4.7kΩ)。
空闲状态:高电平(由上拉电阻维持)。
驱动方式:任何设备都可以拉低 DQ,释放后由上拉电阻拉高,实现“线与”。
3. 供电方式
外部供电:从机有独立 VDD 引脚,提供稳定电源。
寄生供电:从机无外部电源,利用数据线高电平期间向内部电容充电。在需要大电流操作(如温度转换)时,主机需在数据线上提供强上拉(用 MOSFET 直接拉高)。
4. 通信协议
1-Wire 通信以时隙(time slot)为基本单位,每个时隙传输一位。通信总是由主机发起。
初始化(复位/存在脉冲):
主机拉低 DQ 至少 480 µs,然后释放。
从机检测到上升沿后,拉低 DQ 60~240 µs 作为存在脉冲应答。
主机检测到低电平表示有从机存在。
写时隙:
写 0:主机拉低 DQ 至少 60 µs。
写 1:主机拉低 DQ 1~15 µs 后释放,由上拉电阻拉高。
从机在拉低后 15~60 µs 窗口内采样。
读时隙:
主机拉低 DQ 1 µs 以上,然后释放。
从机若发送 0 则继续拉低,发送 1 则释放。
主机在拉低后 15 µs 内采样 DQ 电平。
数据字节:LSB 在前,每字节 8 位。标准速率约 16.3 kbps,过驱动模式约 142 kbps。
5. 设备寻址
每个 1-Wire 器件都有全球唯一的 64 位 ROM 地址,包括:
8 位家族码(如 DS18B20 为 0x28)
48 位序列号
8 位 CRC 校验
ROM 命令用于设备选择与管理:
Skip ROM(0xCC):跳过寻址,广播命令。
Match ROM(0x55):指定 64 位地址,只有匹配设备响应。
Search ROM(0xF0):枚举总线上的所有设备地址。
Read ROM(0x33):读取单个设备的地址。
6. 优缺点
优点:
仅需一根数据线,布线极简。
支持多设备并联,唯一地址寻址。
可寄生供电,省去电源线。
适合长距离低速传输(可达 100 米以上)。
缺点:
速率极低(标准 16.3 kbps)。
时序要求严格,软件模拟易受中断影响。
抗干扰能力一般,不如差分总线。
多设备枚举算法较复杂。
7. 典型应用
多点温度采集(DS18B20)
身份识别(iButton)
小容量 EEPROM(DS2431)
传感器网络
五、四种协议对比
| 特性 | UART | SPI | I2C | 1-Wire |
|---|---|---|---|---|
| 信号线数 | 2(TX/RX)+GND | 4(SCLK/MOSI/MISO/CS)+GND | 2(SDA/SCL)+GND | 1(DQ)+GND |
| 时钟方式 | 异步,双方约定波特率 | 同步,主机提供时钟 | 同步,主机提供时钟 | 异步,时隙定时 |
| 双工性 | 全双工 | 全双工 | 半双工 | 半双工 |
| 典型速率 | 9600~4 Mbps | 1~100+ Mbps | 100 kbps~3.4 Mbps | 16.3 kbps(标准) |
| 多设备支持 | 通常点对点,或 RS-485 多机 | 一主多从,需片选 | 多主多从,地址寻址 | 多设备,唯一 64 位地址 |
| 寻址方式 | 无(或地址位) | 片选 CS | 7/10 位地址 | 64 位 ROM 地址 |
| 应答机制 | 无 | 无 | ACK/NACK | 存在脉冲 |
| 电平类型 | TTL/RS-232/RS-485 | 推挽(通常) | 开漏+上拉 | 开漏+上拉 |
| 传输距离 | RS-232 15m,RS-485 1.2km | 板级(<30cm) | 板级(<1m) | 可达 100m+ |
| 复杂度 | 低 | 低(硬件简单) | 中等(协议较复杂) | 高(时序严格) |
| 典型应用 | 调试、GPS、蓝牙 | Flash、ADC、显示屏 | EEPROM、传感器、RTC | 温度传感器、iButton |
六、选型指南
需要最少引脚、长距离、多传感器节点→ 选择1-Wire(如 DS18B20 温度网络)。
需要高速、全双工、板级传输→ 选择SPI(如 SPI Flash、TFT 屏)。
需要节省引脚、多设备共享总线、中低速→ 选择I2C(如传感器、EEPROM)。
需要与 PC 通信、调试输出、简单点对点→ 选择UART(如串口调试、蓝牙模块)。
实际项目中,单片机通常同时集成多种外设,可以根据需求灵活组合。例如:用 I2C 读取传感器,用 SPI 驱动显示屏,用 UART 打印日志,用 1-Wire 采集多点温度。
七、总结
UART、SPI、I2C 和 1-Wire 是嵌入式系统中最基础也最重要的四种串行通信协议。它们各有特色:
UART异步全双工,简单通用,适合点对点和调试。
SPI同步全双工,高速高效,适合高速外设。
I2C两线多设备,地址寻址,适合板上传感器网络。
1-Wire单线低速,可寄生供电,适合分布式传感器。
理解它们的电气特性、协议时序、拓扑结构和应用场景,是嵌入式工程师的基本功。选型时需综合考虑引脚资源、速率要求、通信距离、设备数量、功耗和开发复杂度,才能设计出稳定可靠的系统。