3. 嵌入式系统硬件组成:CPU、内存、外设接口、总线、电源管理

做嵌入式这么多年,我见过不少工程师一上来就撸代码,结果板子跑起来各种诡异问题。说白了,很多坑都出在对硬件底层的理解不够。今天咱们就把嵌入式系统的五大硬件模块掰开揉碎讲清楚。

3.1 CPU:系统的“大脑”

CPU 选型是项目启动的第一步。我个人习惯先看三点:指令集架构、位宽、功耗。

维度 常见选项 典型场景
指令集 ARM / RISC-V / MIPS / x86 ARM 统治移动与 IoT;RISC-V 开源崛起
位宽 8-bit / 16-bit / 32-bit / 64-bit 8-bit 做传感器节点;32-bit 做网关
功耗 uA 级 / mA 级 / W 级 电池设备必须 uA 级待机

我记得有一次做低功耗门锁,选了某款 32 位 MCU,待机电流标称 2uA。结果量产后发现一批芯片待机跑到 15uA。查到最后是 GPIO 上拉电阻没关。嗯,CPU 的每个引脚在休眠模式下都得仔细配置。

避坑: 我曾经遇到过 CPU 内部 LDO 压差不够导致高频跑飞的情况。选型时一定要看数据手册里的“工作电压 vs 频率”曲线,别只看标称主频。

3.2 内存:SRAM、DRAM 与 Flash

嵌入式内存不像 PC 那样“越大越好”。你得考虑成本、功耗、实时性。

  • SRAM:速度快,但贵。一般做 CPU 内部 Cache 或小容量紧耦合内存。
  • DRAM:容量大,便宜,但要刷新。SDRAM、DDR 都属于这类。
  • Flash:非易失,存代码和配置。NOR Flash 可 XIP(就地执行),NAND Flash 密度高但坏块多。

你想想看,为什么很多 RTOS 系统只用几十 KB 的 SRAM?因为实时任务不需要大缓存,反而要确定性的访存延迟。DRAM 的刷新周期会引入抖动,这在硬实时场景下是致命的。

经验: 我建议在项目初期就画一张“内存映射图”,把 Flash、SRAM、外设寄存器地址范围标清楚。这能帮你提前发现地址冲突和总线对齐问题。

3.3 外设接口:怎么跟世界打交道

嵌入式系统要连传感器、执行器、显示屏、通信模块。接口选错了,后面改板子成本极高。

接口 特点 典型速率
GPIO 最基础,可模拟任何协议 取决于 CPU 翻转速度
UART 异步串行,点对点 115200 bps ~ 几 Mbps
I2C 两线制,多从机,地址寻址 100 kHz / 400 kHz / 1 MHz
SPI 四线制,全双工,速度快 几十 Mbps
CAN 差分信号,抗干扰,多主 125 kbps ~ 1 Mbps
USB 即插即用,支持 OTG 12 Mbps (Full) / 480 Mbps (High)

我在项目中遇到过最头疼的事:I2C 总线挂载了 7 个从设备,结果时钟线被拉成“梯形波”,通信频繁出错。后来加了上拉电阻并调整了 PCB 走线长度才解决。说白了,接口速率越高,对 PCB 布局的要求就越苛刻。

3.4 总线:数据流动的“高速公路”

CPU、内存、外设之间靠总线连接。嵌入式系统里最常见的总线架构有两种:

  • AMBA (ARM 的 Advanced Microcontroller Bus Architecture):包含 AHB(高性能)、APB(低功耗外设)、AXI(高吞吐)等。
  • 私有总线:一些 MCU 厂商自己定义的内部互联,比如 STM32 的 BusMatrix。

为什么总线设计这么重要?因为多个主设备(CPU、DMA、LCD 控制器)同时访问内存时,总线仲裁策略直接决定系统性能。我记得有一次做视频采集,CPU 和 DMA 抢 AHB 总线,导致帧率掉了一半。后来把 DMA 优先级调高,问题就解决了。

核心原则: 总线带宽必须大于所有主设备峰值带宽之和。否则就会出现“堵车”,表现为 CPU 等待、DMA 超时、显示撕裂。

3.5 电源管理:续航与稳定的基石

嵌入式设备很多是电池供电。电源管理做不好,再牛的算法也没用。

常见的电源管理技术:

  1. 动态电压频率调整 (DVFS):负载低时降频降压,省电。
  2. 时钟门控:不用的模块直接关掉时钟。
  3. 电源域划分:把系统分成多个独立供电区域,休眠时只保留唤醒域。
  4. 低功耗模式:Sleep / Deep Sleep / Standby / Shutdown,不同模式功耗差几个数量级。

你想想看,一个 NB-IoT 水表,电池要用 5 年。如果待机电流是 10uA,每天发一次数据(50mA 持续 2 秒),一年下来电池容量消耗多少?我建议你拿到芯片后第一件事就是测各模式的真实功耗,别信数据手册的“典型值”。

警告: 我曾经在量产前发现,某个外设在进入低功耗模式后,GPIO 电平没保持住,导致外部 MOS 管误导通,整机电流飙升到 30mA。排查了三天才找到原因。所以电源管理代码一定要做“全路径回归测试”。

3.6 知识结构总览

下面这张图把五大模块的关系画清楚了。你可以把它当作硬件选型时的检查清单。

嵌入式系统硬件组成 CPU 核心 内存 (SRAM/DRAM/Flash) 外设接口 (UART/I2C/SPI/CAN) 总线 (AMBA/AHB/APB) 电源管理 (DVFS/时钟门控) 说明: • CPU 通过总线访问内存和外设接口 • 电源管理模块控制 CPU 及外设的供电状态 • 外设接口速率与总线带宽必须匹配,否则形成瓶颈

这五个模块不是孤立的。CPU 选型决定了总线架构,总线架构影响外设接口的吞吐,外设接口的功耗又反过来约束电源管理策略。做系统设计时,一定要从全局视角权衡。

我的习惯: 每次开始一个新项目,我都会先画一张类似的硬件框图,把关键参数(主频、内存大小、接口速率、功耗预算)标在旁边。这张图就是后续所有软件架构决策的“宪法”。