一颗PCIe/NVMe SSD从加电开始到正常工作在底层到底发生了哪些事情?
2025-04-23 17:39:52
当今的工作站,笔记本电脑大量使用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 提供:
    • 12主电( SSD 内部降压供 SoCNANDDRAM
    • 3.3辅助电(供控制器/电源管理上电)
  • 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 PHYONFI/NV-DDR
    • 检查 NAND BBT(坏块表)、FTL 映射结构

1.3 PCIe PHY 链路训练

  • 控制器的PCIe PHY 初始化:完成 Link  Training and Status State Machine (LTSSM)
  • 链接状态变更(LTSSM 状态机):
    • Detect → Polling → Configuration → L0(Active
  • 协议链路建立后,PCIe Switch / Root Port 上检测到 新的Endpoint 设备,分配 Bus/Device/Function (BDF)地址
  • PCIe构建完整链路(如 Gen5 x432GT/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 构建与启用

  • 系统请求构建 namespaceNVMe 中一个命名空间即一块逻辑盘)
  • 控制器对 NAND 做如下操作:
    • 扫描块元信息、构建 L2P 映射表(Logical-to-Physical
    • 初始化 FTLFlash Translation Layer
    • 如果使用 SLC Cache,配置好临时区域
  • 确认 ready 后返回 Namespace ID + 可用大小

💽阶段三:OS 加载 + 文件系统挂载(500ms 2s

3.1 操作系统加载 NVMe 驱动

  • Windows/Linux 加载 nvme 驱动模块
  • 驱动通过 BAR0Base Address Register)映射控制器的 MMIO 寄存器空间

3.2 OS 构建 IO 队列

  • OS设置多队列 IOI/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 BitmapMapping Table

4.2 读取流程(例:NVMe Read Command

CPU → nvme_submit_io(): 填写 read 命令 + LBA → 控制器查 L2P → 发起 NAND Read → ECC 解码 → DMA  Host → CQ 更新

⚙️补充模块(在 SSD 固件中完成)

功能模块

作用

FTL

Flash Translation LayerLBA  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/DRAMPCIe 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 驱动挂载 → 用户可读写

这个流程结合了硬件(PHYPLLFlash 电源)、协议(PCIe TLP/ACK, NVMe SQ/CQ)、控制器固件(FTLBad Block TableQueue 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。

图片