当今的工作站,笔记本电脑大量使用PCIe/NVMe SSD,主要接口为M.2 SSD;服务器和存储系统则使用企业级PCIe/NVMe SSD,接口主要为U.2和E3.S。但是很多人开机后看到NVMe SSD,其实并不理解从开机到看到这个SSD到底经历了哪些东西。今天我们就沿着时间轴顺序逐步深入到底层,从一颗典型的 PCIe/NVMe SSD 插在电脑主板上、系统加电那一刻起,逐周期、逐模块地解释它是如何一步一步走向“可读写”的工作状态。这既包括 电源、电路、协议链路初始化,也包括控制器、固件、文件系统可见性 等一整套复杂的协同过程。
- SSD类型:PCIe Gen5 x4 接口,支持 NVMe 1.4 或最新的2.0/2.1协议
- 主控平台:ARM Cortex-R 系列 + NAND 控制器 + DRAM + PMIC
- 主板 BIOS 支持 NVMe 引导
🔌阶段一:硬件加电 + 物理层启动(0–100ms)
1.1 电源路径建立
-
系统加电,主板通过 PCIe 插槽给 SSD 提供:
- 12V 主电(经 SSD 内部降压供 SoC、NAND、DRAM)
- 3.3V 辅助电(供控制器/电源管理上电)
- SSD 内部 PMIC(电源管理 IC) 按顺序拉高电源轨,比如:
- Vcore (1.0V) → 控制器 CPU/PLL
- Vddq (1.2–1.8V) → DRAM
- Vcc (3.3V) → NAND
点击放大上面的SerialTek PCIe 5.0协议分析仪抓取的上电时序,包括12V, 3.3V, PERST#, CLKREQ#以及参考时钟REFCLK在时间上面的先后关系。
1.2 Controller Boot ROM 执行
- SSD 控制器从 内部 BootROM启动,执行 固件加载流程:
-
启动 SPI NOR Flash或 ROM 固化代码
-
初始化 DRAM/NAND 接口(DDR PHY、ONFI/NV-DDR)
-
检查 NAND BBT(坏块表)、FTL 映射结构
1.3 PCIe PHY 链路训练
-
控制器的PCIe PHY 初始化:完成 Link Training and Status State Machine (LTSSM)
-
- Detect → Polling → Configuration → L0(Active)
-
协议链路建立后,PCIe Switch / Root Port 上检测到 新的Endpoint 设备,分配 Bus/Device/Function (BDF)地址
- PCIe构建完整链路(如 Gen5 x4,32GT/s per lane)
🧬阶段二:枚举与 NVMe 初始化(100–500ms)
2.1 BIOS / UEFI 枚举 PCIe 设备
- BIOS 扫描 PCIe 总线,读取 SSD 的 Configuration Space
-
识别设备为ClassCode = 01 08 02 (Mass Storage, Non-volatile Memory)
-
如果支持 NVMe Boot,加载 UEFI NVMe Driver(或 Option ROM)
2.2 NVMe Admin Queue 建立
-
系统向 SSD 下发 Admin Queue 初始化命令:
-
创建 Submission / Completion 队列(SQ/CQ)
-
获取 Controller Identify 信息(如容量、队列数支持、命令集)
- SSD控制器在固件中分配 DRAM 地址,初始化 Admin Queue 元数据
2.3 Namespace 构建与启用
-
系统请求构建 namespace(NVMe 中一个命名空间即一块逻辑盘)
-
-
扫描块元信息、构建 L2P 映射表(Logical-to-Physical)
-
初始化 FTL(Flash Translation Layer)
-
-
确认 ready 后返回 Namespace ID + 可用大小
💽阶段三:OS 加载 + 文件系统挂载(500ms –2s)
3.1 操作系统加载 NVMe 驱动
- Windows/Linux 加载 nvme 驱动模块
-
驱动通过 BAR0(Base Address Register)映射控制器的 MMIO 寄存器空间
3.2 OS 构建 IO 队列
- OS设置多队列 IO(I/O Submission/Completion Queues)
- Linux常见 4/8/16 队列,对应 CPU 核心数
- NVMe控制器分配 DRAM 缓冲区,映射 Host 地址空间
-
支持 MSI-X 中断,每个 Queue 可独立响应中断 → 高并发低延迟
3.3 扫描分区 + 文件系统识别
- OS 读取 NVMe Namespace 的前几个 LBA:
- MBR / GPT → 分区表
- ext4 / NTFS / APFS → 挂载文件系统
-
如果识别成功 → /dev/nvme0n1 或 C:\ 出现,用户可见
🧮阶段四:工作状态下的数据路径(Read/Write)
4.1 写入流程(例:NVMe Write Command)
CPU → nvme_submit_io(): 填写 write 命令 + 数据地址 → SQ Entry → 控制器读 SQ Entry → DMA Host 数据到 DRAM → 写入 NAND(可能走 SLC 缓冲)→ CQ Entry 写入完成状态 → Host Poll CQ 或中断响应
-
- L2P映射查找 → NAND 空块分配
- ECC 编码(LDPC/BCH)→ NAND Page Program
-
元信息更新(Valid Bitmap、Mapping Table)
4.2 读取流程(例:NVMe Read Command)
CPU → nvme_submit_io(): 填写 read 命令 + LBA → 控制器查 L2P → 发起 NAND Read → ECC 解码 → DMA 回 Host → CQ 更新
⚙️补充模块(在 SSD 固件中完成)
|
功能模块
|
作用
|
|
FTL
|
Flash Translation Layer:LBA ↔ PBA 映射,维护元数据、垃圾回收(GC)
|
|
Wear Leveling
|
均衡擦写次数,延长寿命
|
|
Bad Block Management
|
跳过出错的 NAND 块(硬件 ECC + 表)
|
|
Thermal Throttling
|
控制写入速率,防止温度过高
|
|
SLC Cache / pSLC
|
提高写入速度,动态转为 MLC/TLC
|
⌛时间线概览(近似)
|
时间
|
动作
|
|
0–20ms
|
电源建立 → 控制器 PMIC + Reset
|
|
20–100ms
|
Boot ROM 初始化 NAND/DRAM,PCIe PHY 链路训练
|
|
100–300ms
|
BIOS UEFI PCIe 枚举,Option ROM 加载
|
|
300–500ms
|
NVMe Admin Queue 建立,Namespace Ready
|
|
500ms – 2s
|
OS 挂载驱动,构建 IO 队列,挂载文件系统
|
|
2s+
|
可接受读写命令,进入稳定运行状态
|
✅总结
一颗 PCIe/NVMe SSD 从通电到可工作,经历了:
电源初始化 → 控制器BootROM → PCIe 链路训练 → NVMe 枚举 →队列建立 → FTL 映射 → OS 驱动挂载 → 用户可读写
这个流程结合了硬件(PHY、PLL、Flash 电源)、协议(PCIe TLP/ACK, NVMe SQ/CQ)、控制器固件(FTL、Bad Block Table、Queue Manager)以及操作系统(UEFI、驱动、文件系统)多层次协同设计,使得用户最终看到的是“1秒内可读写”的高性能存储设备。
对于上述内容感兴趣的朋友,可以下载并且参考我们4/12最新更新的白皮书12.1版本的Chapter 10章节 - 《PCIe5&6.0, CXL, NVMeNVMoF, SSD, NAND, DDR5, 800GE测试技术和工具白皮书_ver12.1》。
下载链接:
https://pan.baidu.com/s/1Ms4ys0dbt66-2HVhFuHbCQ?pwd=yvwg 提取码: yvwg
如果你有其他任何关于PCIe5&6.0, CXL, NVMe/NVMoF, NAND, DDR5/LPDDR5以及UFS测试方面的问题想咨询,请访问:访问www.saniffer.cn / www.saniffer.com 访问我们的相关测试工具和产品;或者添加saniffer公众号留言,致电021-50807071 / 13127856862,sales@saniffer.com。