2. 嵌入式系统硬件架构:处理器架构、存储器与总线
嵌入式系统的硬件,说白了就是一块精心裁剪的“计算拼图”。处理器是大脑,存储器是记事本,总线是神经。这三样东西怎么搭,直接决定了你的系统能跑多快、能省多少电、能扛多大活儿。我这些年调过的板子,十有八九的问题都出在这三者的匹配上。
2.1 处理器架构:ARM 与 RISC-V
处理器架构是嵌入式世界的“方言”。目前最主流的两大门派,就是 ARM 和 RISC-V。ARM 是老牌劲旅,RISC-V 是开源新贵。咱们一个一个说。
2.1.1 ARM 架构:生态的王者
ARM 采用精简指令集(RISC),特点是指令长度固定、寻址方式简单。它不生产芯片,只卖“设计图纸”(IP 核)。你买到的 STM32、NXP i.MX、TI AM335x,里面跑的都是 ARM 内核。
ARM 家族里,你最常见的是这几个系列:
| 系列 | 典型内核 | 应用场景 | 我的经验 |
|---|---|---|---|
| Cortex-M | M0/M3/M4/M7 | 单片机、实时控制 | M3 是万金油,M4 带 DSP 和 FPU,做电机控制很顺手 |
| Cortex-R | R4/R5 | 实时性要求高的场景(汽车、硬盘控制器) | 我做过一个 R5 的刹车控制项目,中断响应确实快 |
| Cortex-A | A7/A53/A72 | 应用处理器(Linux、Android) | A7 做低功耗 Linux 网关很划算 |
ARM 最大的优势是生态。你遇到问题,网上随便一搜就有答案。编译器、调试器、RTOS 支持,全给你配齐了。但代价是授权费不便宜,而且你没法改指令集。
2.1.2 RISC-V:开源的未来
RISC-V 是加州大学伯克利分校搞出来的开源指令集架构。它不收费,你可以随便改、随便加自定义指令。这对很多公司来说,吸引力太大了。
RISC-V 的核心里,目前比较成熟的有:
- RV32I:基础整数指令集,相当于 RISC-V 的“最小公倍数”
- RV32IM:加了乘除法指令
- RV32IMC:再加压缩指令,代码密度更高
- RV32IMF:带单精度浮点
我去年帮一个客户评估过 RISC-V 方案。说实话,工具链和调试器还没 ARM 那么成熟,但胜在灵活。他们自己加了一条硬件加速指令,把 AES 加密速度提了 3 倍。这在 ARM 上基本不可能。
2.2 存储器层次结构:速度与容量的博弈
嵌入式系统里,存储器不是“一块”东西,而是一个金字塔结构。越往上越快、越贵、越小;越往下越慢、越便宜、越大。
这张图你得多看几遍。我见过不少新手,把大数组直接定义在栈上,结果栈溢出。或者把频繁更新的变量放在 Flash 里,导致程序跑飞。说白了,你得知道你的数据该放哪一层。
2.2.1 寄存器与 Cache
寄存器是 CPU 内部最快的存储,一个时钟周期就能读写。但数量极少,一般几十个。Cache 是 SRAM,速度比主存快 5-10 倍。Cortex-M3/M4 通常没有 Cache,但 M7 有 L1 Cache。
2.2.2 主存与 Flash
主存(SDRAM/DDR)是程序运行的地方,掉电丢失。Flash 是存代码和固件的地方,掉电不丢。选型时要注意:
- Flash 容量:至少留 30% 余量,给后续升级用
- RAM 容量:算好堆栈、全局变量、DMA 缓冲区的总和
- 读写速度:Flash 读快写慢,别在 Flash 里频繁写日志
2.3 总线与接口:数据流动的血管
总线就是处理器跟外设之间的“高速公路”。嵌入式系统里,最常用的总线就这几条。
2.3.1 内部总线:AMBA 与 AHB/APB
ARM 芯片内部用的是 AMBA 总线协议。高性能外设(DMA、以太网)挂 AHB,低速外设(UART、GPIO、I2C)挂 APB。这样设计的好处是:高速设备不堵低速设备的车。
我调试过一个音频项目,I2S 接口挂在 APB 上,结果音频数据流一上来,APB 总线就堵死了。后来改挂到 AHB 上,问题解决。所以,总线选错了,性能直接腰斩。
2.3.2 外部接口:UART、I2C、SPI、CAN
| 接口 | 速度 | 线数 | 典型用途 | 我的建议 |
|---|---|---|---|---|
| UART | ~1 Mbps | 2 (TX/RX) | 调试日志、GPS、蓝牙模块 | 调试口一定要留,救命用的 |
| I2C | ~3.4 Mbps | 2 (SCL/SDA) | 传感器、EEPROM、RTC | 注意上拉电阻,别省 |
| SPI | ~50 Mbps | 4 (SCK/MOSI/MISO/CS) | 显示屏、ADC、SD卡 | 全双工,速度快,但线多 |
| CAN | ~1 Mbps | 2 (CANH/CANL) | 汽车、工业控制 | 差分信号,抗干扰强 |
2.3.3 高速接口:USB、Ethernet、SDIO
这些接口速度高,但实现复杂。USB 有主机和设备两种模式,Ethernet 需要 MAC+PHY 两层,SDIO 用来接 SD 卡或 WiFi 模块。做这些接口时,信号完整性是重中之重。差分线要等长,阻抗要匹配,地平面要完整。
我记得调试一个 USB 高速设备时,因为 PCB 走线没做阻抗控制,USB 一直枚举失败。后来在走线上加了 22Ω 的串联电阻,才稳定下来。嗯,高频信号就是这么敏感。