2. 嵌入式系统基础
做嵌入式Linux载板硬件设计,第一步不是画原理图,而是把“系统边界”想清楚:处理器在核心板上如何工作,Linux系统由哪些层次组成,哪些电路属于核心板、哪些必须由载板承担。边界一旦模糊,后期就会出现接口电平不匹配、电源时序冲突、启动失败甚至反复改板。本节从处理器架构、Linux系统组成、核心板与载板关系三个角度,建立载板设计的整体认知框架。
一、嵌入式处理器架构:载板设计面对的“上游约束”
嵌入式Linux常用的处理器架构包括ARM Cortex-A系列、RISC-V以及部分MIPS、x86。载板设计者最需要关注的是处理器对外暴露的接口类型、电平标准、时钟需求和电源域划分,而不是CPU内部流水线细节。以典型的ARM SoC为例,其内部通常集成:
- CPU子系统:多核Cortex-A,负责运行Linux内核与用户态程序;
- 存储控制器:DDR控制器、NAND/eMMC控制器、SD/MMC控制器;
- 外设控制器:USB、Ethernet MAC、UART、I2C、SPI、I2S、CAN、PCIe等;
- 显示与视频:LCD控制器、MIPI DSI/CSI、HDMI;
- 电源与时钟管理:PMIC接口、晶振输入、PLL、复位控制。
这些控制器在SoC内部是“数字逻辑”,但引脚输出到封装外时,会表现为不同的电平域和驱动能力。例如1.8V的MIPI D-PHY、3.3V的GPIO、1.2V的DDR PHY,载板必须按域供电和匹配。处理器架构决定了载板能扩展什么、不能扩展什么,也决定了信号完整性设计的难度等级。
二、Linux系统组成:从BootROM到应用层
嵌入式Linux不是单一程序,而是一条从芯片上电到应用启动的完整链路。理解这条链路,才能判断载板上哪些器件参与启动、哪些接口在启动阶段必须可用。
上电 → BootROM → SPL/Preloader → U-Boot → Linux Kernel → RootFS → 应用程序
(芯片内) (SRAM/DRAM) (DRAM) (DRAM) (eMMC/SD/NFS)
对应到硬件,载板设计需要保证:
- BootROM阶段:启动模式引脚(BOOT_MODE)必须正确上下拉,决定从eMMC、SD还是USB启动;
- SPL/U-Boot阶段:调试串口UART必须引出,否则无法看到启动日志;
- Kernel阶段:DDR、eMMC、PMIC、时钟晶振必须工作正常;
- RootFS阶段:存储介质容量、文件系统类型、SD卡检测引脚要匹配;
- 应用阶段:以太网、USB、显示、音频等外设接口按产品需求扩展。
三、核心板与载板的关系:分工与接口
核心板(Core Board / SOM)通常集成了SoC、DDR、eMMC、PMIC、晶振和必要的去耦电路,对外通过板对板连接器或邮票孔引出信号。载板则承担电源输入、外设扩展、连接器和结构接口。两者的关系可以概括为:核心板保证“最小系统能跑起来”,载板保证“产品功能能落地”。
从图中可以看出,核心板与载板之间通过连接器传递电源、地和各类信号。载板设计者必须严格依据核心板的数据手册和引脚定义,不能随意更改核心板内部已经确定的电源时序、DDR布线和启动配置。载板能做的,是在连接器之外完成电平转换、接口保护、连接器布局和产品化结构设计。
四、设计边界清单与常见误区
| 设计项 | 核心板负责 | 载板负责 | 边界判断依据 |
|---|---|---|---|
| DDR布线 | 是 | 否 | DDR颗粒在核心板上,载板不参与 |
| 启动模式配置 | 提供引脚 | 上下拉电阻 | 载板决定从eMMC/SD/USB启动 |
| 调试串口 | 引出UART | 电平转换与连接器 | 载板必须保留测试点 |
| 电源输入 | PMIC及电压域 | DC输入、保护、滤波 | 载板提供整机电源入口 |
| 以太网PHY | MAC控制器 | PHY、变压器、RJ45 | PHY通常在载板,需匹配RGMII/RMII |
| 显示接口 | 显示控制器 | 背光、连接器、ESD | 载板按屏参设计背光与时序 |
五、案例:从需求到边界划分
假设要设计一款工业网关,需求为:双网口、RS485、4G模块、SD卡、调试串口、DC 12V输入。选用某ARM核心板后,边界划分如下:核心板提供SoC、DDR、eMMC、PMIC和启动配置;载板负责双路以太网PHY及RJ45、RS485收发器、4G模块的USB和电源控制、SD卡座、调试串口电平转换、DC 12V转5V/3.3V电源树。载板设计时重点检查:RGMII信号是否等长、RS485方向控制引脚是否可用、4G模块峰值电流是否满足、SD卡检测引脚是否与核心板GPIO对应。
把这张边界表在项目启动阶段就与硬件、驱动、结构三方确认,可以避免后期“核心板改不了、载板来不及”的被动局面。嵌入式Linux载板设计的核心能力,不是画最多电路,而是准确判断哪些电路必须由载板承担、哪些必须交给核心板保证。