第二章 系统架构设计:整体系统框图设计、模块划分、接口定义、电源树设计

好,咱们进入第二章。系统架构设计,说白了就是给整个项目画骨架。你想想看,一栋楼盖多高、用多少钢筋、水管怎么走,全看设计图。嵌入式系统也一样,架构没想清楚,后面硬件改版、软件重写,那都是家常便饭。

我个人习惯,拿到需求后先不急着画原理图。我会先画一张系统框图,把大模块摆出来。这一步花的时间,往往决定了项目后期改板的次数。

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。每个接口都要考虑电平匹配。
我的经验:模块划分时,把「电源域」也画进去。不同模块可能用不同电压,比如核心1.0V、IO 3.3V、DDR 1.1V。提前分好,后面电源设计才不会乱。

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)       -> 摄像头
注意:上电时序必须严格遵循瑞芯微的要求。一般是:VDD_LOGIC -> VDD_DDR -> VDD_CPU -> VCC_IO。顺序错了,芯片可能锁死。我建议用PMIC的GPIO做使能控制,别用RC延时,那玩意儿不准。

电源树设计还有个关键点:电流估算。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%精度的,问题解决。嗯,电源反馈路径的电阻,别省那几分钱。

好了,系统架构设计这块,核心就是三件事:画框图、分模块、定接口、算电源。每一步都别急,想清楚了再动手。下一章咱们聊硬件原理图设计,到时候我会讲怎么把架构落地到原理图上。