干货分享|SoC上电四大阶段,软件分别对DDR做了什么?专栏说明:DDR是嵌入式SOC开发高频基础知识点,涵盖控制器、PHY、时序、启动调试等海量内容,一篇无法讲透。本系列采用分点总结、分批分享模式,不做大而全堆砌,本篇为DDR系列第一篇,总结【SoC上电全流程DDR操作差异】。
前言:
很多嵌入式工程师默认:SoC上电后,DDR全程由软件统一配置、统一管控。但真实开发、Uboot调试、内核适配、平台移植过程中会发现:✅ 主Uboot、Linux内核绝不会重复做全套DDR初始化总结前置:SoC冷启动分为四大固定阶段,每个阶段软件对DDR的操作、权限完全不同,混淆逻辑极易出现DDR训练失败、开机黑屏、内核内存异常等问题。
一、上电瞬间DDR是什么状态?
DDR颗粒 + DDR控制器 + DDR PHY 全部处于硬件复位冻结态👉 无法读写、无法存储数据、时序未配置、时钟未锁定👉 上电初期所有启动代码,只能运行在芯片内置小容量片上SRAM(TCM/OCM/IRAM),DDR全程不可用,必须软件分层唤醒、初始化。SoC内存分区简易示意图
二、拆解SoC四大启动阶段|DDR软件操作全对比
标准嵌入式Linux/Android SoC启动链路固定:BootROM → SPL一级引导 → 主Uboot → Linux内核,下文逐阶段拆解DDR动作,区分「做什么、不做什么、核心目的」。阶段1:BootROM 芯片内置固化阶段
(最底层)
代码运行位置:芯片内置Mask ROM,只读不可修改仅释放DDR控制器、PHY、DDR颗粒硬件复位信号,解除硬冻结绝不执行:MRS寄存器配置、ZQ阻抗校准、读写Leveling训练、时序配置、开启刷新阶段核心总结:
ROM本身不使用DDR,仅做好硬件预备工作,只负责把SPL固件加载到片内SRAM即可。四大启动阶段DDR/LPDDR操作对比总图阶段2:SPL次级引导阶段
(DDR生命周期最重要阶段)
核心定位:全启动流程唯一可以完整初始化DDR的阶段,没有之一。软件会执行DDR全套底层初始化流程,也是DDR移植调试的核心工作:联动PMIC配置DDR供电电压(VDD/VDDIO),匹配DDR4/DDR5规格PHY基础配置:驱动强度、差分时钟、ODT阻抗参数下发MRS模式寄存器配置CL/CWL/BL8/自刷新等颗粒参数写入全套时序参数:tRCD、tRP、tREFI等控制器时序执行读写Leveling训练,对齐DQ/DQS采样窗口(高速DDR必做)阶段收尾动作:将主Uboot从Flash搬运至DDR,跳转至DDR运行代码。阶段核心总结:
从零初始化、校准、配置,把DDR从不可用变为可用。后续所有启动阶段,都不会再重做全套初始化。阶段3:主Uboot阶段
(代码已跑在DDR内)
关键原则:复用SPL初始化好的DDR硬件配置,跳过PLL、MRS、PHY训练、ZQ校准全套底层操作。可选memtest内存压力检测,校验DDR颗粒稳定性划分DDR物理地址空间:预留设备树、内核、帧缓存、CMA专用内存区搬运Linux内核、设备树、根文件系统至DDR指定地址阶段核心总结:
阶段4:Linux/Android内核运行阶段
(系统常驻阶段)
关键原则:底层硬件配置永久沿用SPL参数,完全不触碰PHY、时序、MRS寄存器。分配CMA连续物理内存,供给GPU/NPU/ISP多媒体外设使用DDR DVFS动态调频调压:高负载升频、待机降频降耗系统休眠:下发指令让DDR进入自刷新保数据;唤醒直接退出自刷新,无需重初始化控制器QoS优先级调度,保障视频、AI业务内存带宽优先阶段核心总结:
三、极简汇总表|四大阶段DDR行为
【四大阶段DDR行为汇总表格】
启动阶段 | 是否初始化DDR | 核心DDR操作 | 代码运行位置 |
|---|
BootROM | 否 | 硬件复位、基础时钟使能 | 片内ROM |
SPL一级引导 | 是(唯一全套初始化) | 供电/时钟/MRS/训练/时序全配置 | 片内SRAM |
主Uboot | 否 | 内存分区、镜像加载、稳定性测试 | 外部DDR |
Linux内核 | 否 | 内存管理、DVFS调频、休眠唤醒调度 | 外部DDR |
四、开发常见疑问|日常调试汇总
Q1:系统休眠唤醒后,需要重新初始化DDR吗?
不需要。内核仅退出/切换DDR至自刷新模式,PHY、时序、MRS全部保留,唤醒秒恢复读写,不走SPL初始化流程。Q2:软件热重启(reboot不掉电),会重跑DDR全套初始化吗?
不会。DDR颗粒不掉电留存状态,SPL会自动跳过耗时的PHY读写训练,仅校验硬件状态,大幅缩短重启时间;仅冷上电必须完整初始化。Q3:SPL阶段DDR初始化代码,默认运行在M核吗?
1、主流ARM架构SoC:绝大多数厂商SPL DDR初始化,固定跑在 M核(Cortex-M)✅ 原因:M核极简、上电唤醒最快、功耗极低、上电默认自动启动,无需开启A核集群、无需开启MMU,适配底层硬件初始化,几乎所有车载、工控、手机SoC(瑞芯微、全志、高通、NXP),DDR初始化代码均托管M核执行。2、特殊小众场景:极简MCU类SoC无独立M核,会复用A核小核运行SPL代码,属于特例。M核只负责跑完DDR硬件初始化、PHY训练、跳转Uboot;DDR可用后,直接把运行权限移交高性能A核,后续Uboot、内核全部由A核接管,M核休眠待机/做其他事情。
系列后续分享预告
DDR知识点零散且关联性强,后续持续整理干货总结,按需更新专题:✅ 第二篇:DDR控制器基础架构、核心工作模块总结✅ 专项篇:对比DDR与LPDDR架构、初始化、功耗、控制器差异纯嵌入式干货复盘、知识点总结分享,循序渐进补齐DDR相关基础知识。