第二章 系统架构设计:整体系统框图设计、模块划分、接口定义、电源树设计
好,咱们进入第二章。系统架构设计,说白了就是给整个项目画骨架。你想想看,一栋楼盖多高、用多少钢筋、水管怎么走,全看设计图。嵌入式系统也一样,架构没想清楚,后面硬件改版、软件重写,那都是家常便饭。
我个人习惯,拿到需求后先不急着画原理图。我会先画一张系统框图,把大模块摆出来。这一步花的时间,往往决定了项目后期改板的次数。
2.1 整体系统框图设计
以瑞芯微RK3588为例,一个典型的AIoT设备,系统框图大概长这样:
+------------------+ +------------------+
| Camera Sensor | | HDMI IN/OUT |
| (MIPI CSI) | | (HDMI 2.1) |
+--------+---------+ +--------+---------+
| |
v v
+--------+---------+ +--------+---------+
| ISP (图像处理) | | HDMI RX/TX |
+--------+---------+ +--------+---------+
| |
+----------+-------------+
|
v
+------------+------------+
| RK3588 SoC Core |
| (4xA76 + 4xA55) |
| Mali-G610 GPU |
| NPU 6 TOPS |
+------------+------------+
|
+-----------+-----------+
| |
v v
+-------+--------+ +--------+-------+
| LPDDR4X | | eMMC 5.1 |
| 8GB/16GB | | 64GB/128GB |
+----------------+ +----------------+
|
+------------------+
| |
v v
+-------+--------+ +-----+-------+
| Ethernet | | Wi-Fi/BT |
| (RGMII) | | (SDIO) |
+----------------+ +-------------+
|
v
+-------+--------+
| USB 3.0 |
| Type-C/Type-A|
+----------------+
这张图,我建议你贴在工位前面。每次改方案,先看它一眼。我在项目中遇到过,有人把MIPI CSI的走线画到了HDMI的差分对旁边,结果摄像头图像全是雪花。嗯,这就是框图没画清楚的后果。
2.2 模块划分
模块划分,说白了就是「谁负责什么」。瑞芯微平台一般分成这几块:
- 计算模块:CPU、GPU、NPU。CPU跑系统,GPU做显示,NPU做AI推理。我建议CPU留30%余量,别跑满。
- 存储模块:DDR和eMMC。DDR容量看应用,跑Linux至少2GB起步。eMMC选pSLC模式,寿命长。
- 显示模块:HDMI、DP、MIPI DSI。RK3588支持四屏异显,但功耗也高,注意散热。
- 网络模块:以太网、Wi-Fi、4G/5G。工业场景我推荐有线+无线双备份。
- 外设接口:USB、UART、I2C、SPI、GPIO。每个接口都要考虑电平匹配。
2.3 接口定义
接口定义,就是给每个引脚「起名字、定功能」。我见过最坑的事,是硬件工程师把UART的TX和RX接反了,软件调了三天才发现。
以RK3588的MIPI CSI接口为例:
| 信号名 | 方向 | 电平 | 说明 |
|---|---|---|---|
| MIPI_CLK_P/N | 输入 | 1.2V | 差分时钟,100Ω匹配 |
| MIPI_DATA0_P/N | 输入 | 1.2V | 数据通道0 |
| MIPI_DATA1_P/N | 输入 | 1.2V | 数据通道1 |
| I2C_SCL | 双向 | 3.3V | 摄像头配置时钟 |
| I2C_SDA | 双向 | 3.3V | 摄像头配置数据 |
| MCLK | 输出 | 1.8V | 主时钟,24MHz |
| GPIO_RESET | 输出 | 3.3V | 复位,低有效 |
| GPIO_PWDN | 输出 | 3.3V | 掉电,高有效 |
为什么要写这么细?因为瑞芯微的IO电压域是分组的。VCCIO1可能是1.8V,VCCIO2可能是3.3V。接错了,芯片不工作,甚至烧坏。我曾经因为没看datasheet,把1.8V的IO接到了3.3V上,结果芯片冒烟了...嗯,从那以后我每根信号都核对三遍。
2.4 电源树设计
电源树,是整个系统的「血管」。瑞芯微平台对电源要求很高,上电时序错了,系统起不来。
一个典型的RK3588电源树:
+12V DC_IN
|
+-- PMIC RK806-1
| |-- VDD_CPU_BIG (0.7V~1.0V) -> A76核心
| |-- VDD_CPU_LIT (0.7V~1.0V) -> A55核心
| |-- VDD_GPU (0.7V~1.0V) -> Mali GPU
| |-- VDD_NPU (0.7V~1.0V) -> NPU
| |-- VDD_LOGIC (0.8V) -> 逻辑单元
| +-- VDD_DDR (1.1V) -> LPDDR4X
|
+-- PMIC RK806-2
| |-- VCC_3V3_SYS (3.3V) -> 系统IO
| |-- VCC_1V8_SYS (1.8V) -> 模拟IO
| |-- VCC_1V2_SYS (1.2V) -> MIPI/HDMI
| +-- VCC_5V_USB (5.0V) -> USB VBUS
|
+-- LDO (外部)
|-- VCC_3V3_SD (3.3V) -> SD卡
+-- VCC_1V8_CAM (1.8V) -> 摄像头
电源树设计还有个关键点:电流估算。RK3588的A76核心满载可能到5A,你得算好PMIC的电流能力。我一般留20%余量,比如A76需要5A,我就选能输出6A的PMIC通道。
另外,电源纹波也很重要。核心电压纹波超过50mV,系统就可能死机。我建议在PMIC输出端加足够的MLCC电容,至少10μF+0.1μF组合。高频噪声用0.1μF滤,低频用10μF扛。
避坑指南:我曾经在一个项目里,为了省成本,把PMIC的反馈电阻用了1%精度的。结果输出电压偏了0.05V,系统在高负载下频繁重启。后来换成0.1%精度的,问题解决。嗯,电源反馈路径的电阻,别省那几分钱。
好了,系统架构设计这块,核心就是三件事:画框图、分模块、定接口、算电源。每一步都别急,想清楚了再动手。下一章咱们聊硬件原理图设计,到时候我会讲怎么把架构落地到原理图上。