跳到主要内容

M.2 Key M 接口

RUBIK Pi 3 提供一个标准 M.2 插槽,用于连接 NVMe 存储,可安装 2280 规格(22*80mm)M.2 SSD 硬盘。M.2 插槽最大支持 PCIe Gen 3 x 2。M.2 接口最大对外输出能力为 3.3V 2A,可单独控制开关。

M.2 Key M 接口使用了 QCS6490 的 PCIe1 总线,设备路径为:/sys/bus/pci/devices/0001:00:00.0

M.2 Key M 接口为下图 18:

M.2 Key M 接口可以接入规格为2280的固态硬盘,如下图所示:

PCIe 总线功能验证

在接入 2280 规格的固态硬盘后,生成的设备节点为 /dev/nvme*

您可以通过类似如下的命令挂载固态硬盘,通过访问 /opt 目录下的内容验证 PCIe 总线接口。

sudo mount /dev/nvme0n1p1 /opt/

PCIe 功耗优化

PCIe 定义了两种功耗管理方法。

  • 功耗管理软件,用于确定每个设备的功耗管理功能并分别对各个设备进行管理

  • 不需要软件干预的系统,例如主动状态功耗管理 (ASPM)

当链路上未传输任何数据包时,设备会将链路置于节能状态。

PCIe L0 链路状态

PCIe 功耗管理定义了以下 L0 链路状态:

  • L0:工作状态

  • L0s:具有低恢复延迟的 ASPM 状态(节能待机状态)

PCIe 设备状态

PCIe 功耗管理定义了以下设备状态:

  • D0(必选): 设备处于完全 ON 状态,此时存在两个子状态

    • D0(uninitialized):当设备退出复位状态后等待枚举和配置时,该功能处于 D0(uninitialized) 状态

    • D0(active)

      • 当完成枚举和配置过程后,该功能处于 D0(active) 状态

      • 当系统软件启用一个或多个(任意组合)功能参数(如内存空间启用、I/O 空间启用、总线主启用(BME)位)时,该功能进入 D0(active) 状态

  • D1(可选):轻度休眠状态

    • 该功能只能发出 PME 消息,无法发出其他 TLP

    • 该功能只能充当配置事务的目标,无法充当其他事务的目标

    • 该功能通过发出设定 PM 控制和状态寄存器的软件命令来进入 D1 状态

  • D2(可选):深度休眠状态

    • 该功能只能发出 PME 消息,无法发出其他 TLP

    • 该功能只能充当配置事务的目标,无法充当其他事务的目标

    • 该功能通过发出设定 PM 控制和状态寄存器的软件命令来进入 D2 状态

  • D3(必选):设备处于最低功耗状态,此时该功能必须支持两种 D3 状态

  • D3(hot)

    • 该功能只能发出 PME 消息,无法发出其他 TLP

    • 该功能只能充当配置事务的目标,无法充当其他事务的目标

    • 该功能通过设定功耗状态位域发出软件命令来进入 D3(hot) 状态

  • D3(cold):设备进入 D3(cold) 状态并断电;当恢复供电时,设备进入 D0(uninitialized) 状态

PCIe 调试

M.2 Key M 接口使用了 QCS6490 的 PCIe1 总线,设备路径为:/sys/bus/pci/devices/0001:00:00.0

lspcisetpci 命令为 Linux 发行版的本机命令。这两条命令提供多种级别的输出,并且还可用于在某个时间点查看 PCI 总线上训练的不同组件的功能和状态。这些功能大多反映的是 PCIe 基本规范所需的配置空间寄存器。更多详细信息,可访问 https://pcisig.com/specifications 如需查看使用说明,可运行以下命令。

lspci --help

以下功能有助于解决 PCIe 问题。

  • 显示设备信息

    lspci

    示例输出

    0000:00:00.0 PCI bridge: Qualcomm Device 010b
    0000:01:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)
    0001:00:00.0 PCI bridge: Qualcomm Device 010b
  • 显示设备控制寄存器中的 PCIe 设备和厂商 ID。

    lspci -nvmm

    示例输出

    Slot:        00:00.0
    Class: 0604
    Vendor: 17cb
    Device: 010b
    IOMMUGroup: 6

    Slot: 01:00.0
    Class: 0c03
    Vendor: 1912
    Device: 0014
    Rev: 03
    ProgIf: 30
    IOMMUGroup: 6

    Slot: 0001:00:00.0
    Class: 0604
    Vendor: 17cb
    Device: 010b
    DTNode: /sys/firmware/devicetree/base/soc@0/pci@1c08000/pcie@1
    IOMMUGroup: 7