1. 课程导论:为什么需要多串口扩展?SPI与I2C总线对比概览
1.1 嵌入式系统中的串口资源困境
在嵌入式开发中,UART(通用异步收发传输器)是最常用的串行通信接口之一,广泛用于传感器数据采集、GPS模块通信、蓝牙/Wi-Fi模组对接、调试日志输出等场景。然而,绝大多数MCU(微控制器)原生提供的UART外设数量非常有限:
- 低端MCU(如STM32F0、GD32E1系列):通常只有1~2个UART。
- 中端MCU(如STM32F4、AT32F4系列):通常提供3~5个UART。
- 高端MCU(如i.MX RT、STM32H7系列):最多可达8~10个UART,但引脚复用冲突严重。
当项目需要同时挂接4个、6个甚至更多串口设备时,原生UART数量往往成为系统瓶颈。此时,通过高速总线(SPI/I²C)扩展UART成为最经济、最灵活的解决方案。
核心痛点: 一个典型的物联网网关可能需要同时连接GPS(UART1)、4G模块(UART2)、LoRa模块(UART3)、蓝牙(UART4)和调试串口(UART5),而多数MCU无法原生提供5个以上独立UART。
1.2 多串口扩展的两种主流方案
业界主流的串口扩展方案分为两大类:SPI转UART 和 I²C转UART。两者均通过专用桥接芯片实现,但总线特性决定了它们在性能、引脚数和系统复杂度上的显著差异。
| 对比维度 | SPI转UART | I²C转UART |
|---|---|---|
| 总线速率 | 典型10~60 Mbps(全双工) | 标准100 kHz~3.4 MHz(半双工) |
| 引脚数量 | 4线(SCLK、MOSI、MISO、CS) | 2线(SCL、SDA) |
| 多设备支持 | 每设备独立CS引脚,N设备需N+3线 | 7位/10位地址,2线可挂最多127个设备 |
| 传输模式 | 全双工,主从同步 | 半双工,主从同步(带时钟拉伸) |
| 典型芯片 | SC16IS752、WK2124、GM8125 | SC16IS740、MAX3107、PCA9665 |
| 适用场景 | 高速串口(≥921600 bps)、大数据量 | 低速串口(≤115200 bps)、引脚受限 |
1.3 总线架构对比:SPI vs I²C
为了更直观地理解两种方案的本质差异,下面通过系统架构图展示SPI和I²C在连接多串口扩展芯片时的拓扑结构。
1.4 如何选择:决策树与场景匹配
在实际项目中,选择SPI还是I²C方案需要综合评估以下因素:
- 波特率需求:如果串口波特率超过 115200 bps(如 921600 bps 或 1.5 Mbps),必须选择SPI方案,因为I²C的时钟速率无法支撑高速连续数据流。
- 引脚预算:如果MCU引脚极度紧张(如TSSOP-20封装),I²C的2线制具有明显优势。
- 设备数量:需要扩展4个以上UART时,I²C的地址复用机制比SPI的独立CS更节省引脚。
- 实时性要求:SPI的全双工特性适合需要同时收发数据的场景(如与4G模块的AT指令交互)。
- 软件复杂度:I²C的协议栈更复杂(需处理ACK/NACK、时钟拉伸、多主机仲裁),而SPI的驱动编写相对简单。
经验法则: 当串口波特率 ≤ 115200 bps 且引脚受限时,优先选择I²C转UART;当波特率 ≥ 460800 bps 或需要全双工高速通信时,必须选择SPI转UART。
1.5 课程路线图
本课程将按照以下结构逐步深入:
| 章节 | 核心内容 | 实践目标 |
|---|---|---|
| 第1章 | 课程导论与总线对比 | 理解多串口扩展的必要性,掌握SPI/I²C选型原则 |
| 第2~5章 | SPI转UART芯片详解(SC16IS752/WK2124) | 完成硬件设计、驱动移植、双工通信测试 |
| 第6~9章 | I²C转UART芯片详解(SC16IS740/MAX3107) | 实现I²C从机配置、中断处理、低功耗设计 |
| 第10章 | 综合实战:8路串口扩展网关 | 完成从原理图到量产固件的全流程 |
前置要求: 本课程假设学员已掌握基础嵌入式C语言编程、MCU GPIO/UART基本操作,并具备阅读芯片数据手册的能力。如对SPI/I²C总线协议尚不熟悉,建议先学习相关基础课程。