第四章 硬件架构设计:主控芯片选型与外设接口

硬件架构设计,说白了就是给嵌入式系统选一个「大脑」,再搭好它的「手脚」和「感官」。我做了十几年项目,见过太多因为芯片选型失误导致返工的情况。这一章咱们就聊聊主控芯片怎么选、外设接口怎么配、电源怎么管。

4.1 主控芯片选型:MCU vs MPU vs FPGA

选芯片之前,先搞清楚三者的本质区别。我习惯用一个比喻:

  • MCU(微控制器)——像一把瑞士军刀,功能集成度高,功耗低,适合控制类任务。
  • MPU(微处理器)——像一台笔记本电脑,算力强,能跑操作系统,适合复杂数据处理。
  • FPGA(现场可编程门阵列)——像一堆积木,硬件逻辑可以重配,适合高速并行处理。

你可能会问:「那我到底该用哪个?」嗯,这里有个判断标准:

维度 MCU MPU FPGA
典型频率 8 MHz ~ 200 MHz 400 MHz ~ 2 GHz 50 MHz ~ 500 MHz(逻辑)
功耗 mW 级 W 级 W 级(视规模)
实时性 硬实时(中断响应 us 级) 软实时(依赖 OS) 硬实时(硬件级)
开发难度 低 中 高
典型场景 传感器采集、电机控制 网关、HMI、边缘计算 高速信号处理、协议桥接

我的经验法则:如果项目只需要跑裸机或 RTOS,且外设数量少于 20 个,优先选 MCU。需要跑 Linux 或复杂协议栈,上 MPU。需要处理 100 MHz 以上的数据流,考虑 FPGA。

我记得有一次做工业相机项目,团队一开始选了 MPU 跑 Linux,结果发现图像预处理延迟太大。后来换成 FPGA + MCU 的组合,FPGA 做像素级处理,MCU 做控制,问题就解决了。说白了,没有最好的芯片,只有最合适的组合。

4.2 外设接口设计:I2C、SPI、UART、USB

接口选型这件事,我踩过不少坑。先看一张对比表:

接口 通信方式 最大速率 线数 典型用途
I2C 同步、半双工 3.4 MHz(高速模式) 2(SCL + SDA) 传感器、EEPROM、RTC
SPI 同步、全双工 50 MHz+ 4(SCK + MOSI + MISO + CS) ADC/DAC、显示屏、SD卡
UART 异步、全双工 ~1 Mbps(典型) 2(TX + RX) 调试日志、GPS、蓝牙模块
USB 异步、主从 480 Mbps(USB 2.0) 4(D+ + D- + VBUS + GND) 数据存储、固件升级、人机交互

4.2.1 I2C 选型要点

I2C 的优势是线少,但速度慢、抗干扰差。我曾经在一个电机驱动板上用 I2C 接温度传感器,结果电机一启动,I2C 总线就卡死。后来查出来是长线引入的噪声导致时钟拉伸失败。

避坑指南:I2C 总线长度不要超过 30 cm,超过的话加电平转换或改用差分 I2C。上拉电阻选 4.7 kΩ ~ 10 kΩ,总线电容控制在 400 pF 以内。

4.2.2 SPI 选型要点

SPI 速度快,但片选信号多。如果外设超过 3 个,我建议用 SPI 总线扩展器或改用 QSPI。另外,SPI 的时钟极性和相位(CPOL/CPHA)一定要和外设匹配,不然数据全是乱的。

4.2.3 UART 选型要点

UART 最简单,但波特率误差不能超过 ±2%。我习惯用 115200 bps 作为默认调试口,因为大部分 MCU 在这个速率下误差最小。如果接蓝牙模块,注意流控(RTS/CTS)要不要开。

4.2.4 USB 选型要点

USB 设计最麻烦。如果你用 MCU 内置的 USB 外设,注意要加 ESD 保护芯片(比如 USBLC6-2)。另外,USB 的差分走线要等长,阻抗控制在 90 Ω ± 15%。

小技巧:调试阶段,我习惯在 UART 口上留一个 0 Ω 电阻位。万一 USB 不通,还能用 UART 看打印信息。这个习惯救过我好几次。

4.3 电源管理与功耗估算

电源设计是硬件架构里最容易出问题的地方。我见过一个项目,所有功能都调通了,结果整机功耗超标 30%,不得不重新改板。

4.3.1 电源架构设计

典型的嵌入式系统电源树如下:

外部电源(5V / 12V)
  ├── LDO(3.3V)→ MCU、传感器
  ├── DCDC(1.8V)→ DDR、FPGA 内核
  └── DCDC(1.2V)→ FPGA 逻辑、高速 SerDes

选 LDO 还是 DCDC?我的原则是:

  • 压差小(< 1V)、电流小(< 200 mA)→ LDO,噪声低、成本低
  • 压差大、电流大 → DCDC,效率高(85% ~ 95%)

4.3.2 功耗估算方法

功耗估算分三步走:

  1. 静态功耗:芯片数据手册里的典型功耗值,加上 20% 余量
  2. 动态功耗:P = C × V² × f,每个外设单独算
  3. 峰值功耗:所有外设同时工作时的最大电流

举个例子,一个 STM32F4 项目:

模块 典型电流 峰值电流
MCU(168 MHz) 80 mA 120 mA
WiFi 模块 150 mA 350 mA(发射时)
传感器 × 3 15 mA 20 mA
LED 指示灯 × 4 20 mA 20 mA
总计 265 mA 510 mA

注意:电源芯片的额定电流要按峰值电流的 1.5 倍选。上面这个例子,至少选 800 mA 的 DCDC。我曾经因为只按典型值选,结果 WiFi 一发射就掉电重启。

4.3.3 低功耗设计技巧

  • 时钟门控:不用的外设模块关掉时钟,MCU 进入睡眠模式
  • 动态调压:负载轻时降低 DCDC 输出电压
  • 电源域分割:用 MOSFET 开关独立控制传感器供电

嗯,这里要注意:低功耗设计不是最后才考虑的。我建议在原理图阶段就把功耗预算表做出来,每个模块标清楚工作模式、休眠模式下的电流。这样板子回来一测,心里就有底。

硬件架构设计核心流程 硬件架构设计核心流程 需求分析 主控芯片选型(MCU / MPU / FPGA) 外设接口设计(I2C / SPI / UART / USB) 电源管理与功耗估算 硬件架构方案输出 关键原则: 先定需求 → 再选芯片 → 配接口 → 算功耗。每一步都要留余量,别等板子回来再改。

这张图概括了硬件架构设计的四个核心步骤。我每次做新项目,都会先画这么一张流程图,贴在白板上。团队开会时对着图聊,不容易漏项。