UART / I2C / SPI / 1-Wire 五大总线怎么选
买回来一个新模块,规格书上一会儿写 I2C、一会儿写 SPI,还有的标 1-Wire;出了板子又冒出来 RS485、CAN、LoRa。同样是"接根线传数据",凭什么分这么多种?这篇把它们摆到一张表里,先按"出不出板、有多远"分场地,再按"接几个、要不要快、剩几根脚"对号入座。选型不是背参数,是回答几个问题。
四种板级总线一句话定位
板子内部基本是这四种的天下:
- UART:点对点串口,两根线(TX/RX)一收一发,最朴素。接 GPS、部分蓝牙模块、串口屏、另一块单片机都用它。一对一,挂不了一串。详见 UART 原理。
- I2C:两根线(SCL/SDA)挂一串设备,靠7 位地址区分谁是谁。速度慢(标准 100kHz、快速 400kHz),但省线,小传感器和 OLED 小屏的首选。详见 I2C 原理。
- SPI:四根线(SCLK/MOSI/MISO/CS)全双工,快(几 MHz 到几十 MHz 很常见)。彩屏、SD 卡、RC522 读卡器这类要吞吐量的都走它。详见 SPI 原理。
- 1-Wire:一根数据线就能挂多颗,每颗自带 64 位唯一 ID。慢,但布线极省,多点测温(DS18B20)几乎是它的代名词。详见 1-Wire 原理。
板级总线对比表
| 总线 | 信号线数 | 典型速度 | 能挂几个 | 典型器件 | 主从 / 寻址 |
|---|---|---|---|---|---|
| UART | 2(TX/RX)+GND | 9600~115200bps,特殊场景更高 | 1 个(点对点) | GPS、蓝牙模块、串口屏、单片机互连 | 对等,无地址,靠交叉接线 |
| I2C | 2(SCL/SDA)+GND | 100k / 400kHz | 理论上百个,受地址和负载限制 | 温湿度/气压传感器、OLED 小屏、EEPROM | 一主多从,7 位地址寻址 |
| SPI | 4(SCLK/MOSI/MISO/CS)+GND | 几 MHz~几十 MHz | 每多挂一个就多一根 CS | TFT 彩屏、SD 卡、RC522、Flash | 一主多从,CS 片选 |
| 1-Wire | 1(DQ)+GND | ~16.3kbps | 一根线挂多颗 | DS18B20 测温、iButton | 一主多从,64 位 ROM ID |
表里 UART 单独占一类:它没有"地址"概念,天生只能两个设备面对面。其余三种都是一主多从,区别在"靠什么认出每个从设备"——I2C 靠地址,SPI 靠多拉一根 CS,1-Wire 靠器件出厂烧死的 ID。卡在 I2C 和 SPI 之间时,标准就一条:带宽。读个温湿度、刷个文字 OLED,I2C 绰绰有余;一旦要每秒重画整块彩屏或连续读写大文件,400kHz 立刻不够,必须上 SPI。
出了板子:加上"距离"这一维
上面四种有个共同前提——信号是单端电平,抗不了长线上的干扰,也跑不远。一旦要跨机箱、跨房间、上工业现场,就得换赛道。评判维度也从"线数/速度"扩到"板内 vs 板间 vs 远距/无线":
| 场景 | 距离量级 | 代表协议 | 为什么用它 |
|---|---|---|---|
| 板内芯片互连 | 厘米级 | I2C / SPI / 1-Wire | 省线、够快,同一块板信号干净 |
| 板间短距 | 几十厘米~数米 | UART | 两块板一收一发,约定波特率即可 |
| 工业/车载远距 | 十几米~上千米 | RS485 / CAN | 差分信号抗干扰、可组网、跑得远 |
| 无线跨房间/户外 | 百米~数公里 | LoRa 等 LPWAN | 无需布线,超低功耗换超远距离 |
差分是这里的分水岭:RS485 和 CAN 都用两根线的电压差表示 0/1,共模干扰同时打在两根线上会被抵消,所以能在电机、变频器一堆噪声里跑几百米。RS485 是"半双工总线,一主多从轮询",常配 Modbus 协议,接一排传感器/仪表;CAN 多了"多主 + 优先级仲裁 + 报文自带校验重传",是汽车和可靠性要求高的场合的标配。要彻底摆脱线、又不追求高带宽,就上 LoRa 这类 LPWAN——牺牲速率换几公里的距离和几年的电池寿命,适合抄表、农业、环境监测这种"偶尔发几个字节"的场景。
决策树:先问距离,再问细节
不用记全部参数,从"这条线要走多远"往下走:
- 同一块板、芯片对芯片 → 板级四选一。省线优先选 I2C;要快、刷大屏、读 SD 卡选 SPI;只是多点测温、布线又长又散选 1-Wire。
- 两块板短距点对点(几十厘米到几米) → 用 UART。两根线、约定波特率就通。
- 十几米以上、现场有干扰、还要挂一串设备 → 上差分总线。一主多从、配 Modbus 用 RS485;车载或要报文级可靠性用 CAN。
- 不想布线、要跨房间甚至几公里、数据量又小 → 走 LoRa / LPWAN 无线。
- 定完赛道再抠细节:板级看带宽(分 I2C/SPI)和引脚预算;远距看距离 + 节点数 + 是否要仲裁(分 RS485/CAN)。
拿一个真实项目走一遍
嘴上说决策树容易,拿个例子过一遍才踏实。假设你做一个"阳台种菜监测":要测土壤温度(探头埋在花盆里,离主板半米)、空气温湿度、还想把数据显示在一块小屏上,主控是引脚不宽裕的 ESP32-C3。
- 土壤温度:埋得远、就一个点、精度要求不高 → 用 DS18B20 走 1-Wire,一根信号线拉半米最省事,慢点无所谓。
- 空气温湿度:SHT30 这类芯片自带 I2C,且以后可能再加个气压计 BMP280 → 走 I2C,两根线挂一串,地址各不相同,加设备不加线,正好省 C3 那点脚。
- 小屏:如果是 0.96 寸 OLED,字少刷得慢,直接挂到上面那条 I2C 总线上;如果换成 1.8 寸彩屏要刷图 → 单独走 SPI,多占几根脚换刷新速度。
你看,一个小项目里三种总线各司其职:远又慢的用 1-Wire,多又省线的用 I2C,快又要吞吐的用 SPI。选型从来不是"全站统一一种",而是每条链路各按需求挑。 这就是决策树落到实处的样子。
这里还藏着一个隐含前提:上面几个器件都是 3.3V 的,正好和 C3 同电平,省了转换芯片;万一混进一个 5V 模块,就得回头补上 电平转换 那一步,别直接对接。
别忘了引脚和电平
引脚预算——线越多越占 GPIO。I2C 全程只吃 2 根,挂再多设备也不增加;SPI 起步 4 根,之后每多一个从设备就再占一根 CS。脚紧张的小封装单片机上,这是 I2C 压过 SPI 的常见理由。哪些脚能用、怎么复用,回顾 GPIO 基础。
电平要一致——总线两端的高电平必须对齐。常见的坑是 3.3V 的单片机去接 5V 模块(或反过来),轻则读数飘、重则烧端口。跨电平时中间得加电平转换,看 电平转换。I2C 因为是开漏结构,上拉电阻接到哪个电源直接决定总线电平,别想当然。RS485/CAN 则要额外一颗收发器芯片把 MCU 的单端 TTL 转成差分,还要注意总线两端的终端电阻——这些出了板就绕不开。
小结
选总线是个漏斗:先问距离——同板选 I2C/SPI/1-Wire,板间短距选 UART,工业远距选 RS485/CAN,无线跨房间选 LPWAN;再抠细节——板级比带宽和引脚,远距比节点数和是否要仲裁。定完赛道,具体协议基本就浮出来了。
一句口诀:先问多远,再问几个、多快、几根脚。板内 I2C/SPI,板间短距 UART,工业远距 RS485/CAN,无线走 LPWAN。距离定赛道,细节定协议。