了解 M.2 协议

som*_*ega 6 ssd hard-drive sata nvme m2-connector

(我在这个问题中说的有些话是错误的。不要忘记阅读已接受的答案。)

首先我想说的是,SATA没有数据传输的软件协议。SATA CD 驱动器、SATA HDD 和 SATA SSD 使用 SCSI 作为软件协议。

很多人不知道这一点,我什至在 SE 上看到过公认的答案,但他们并不知道这一点。另外,在德语维基百科上,他们将 AHCI 与 NVMe 进行了比较。他们应该将 SCSI 与 NVMe 进行比较。AHCI是SATA用来传输数据的软件协议,这是一个很大的错误。

旧的 IDE 驱动器使用 ATAPI,即 ATA 上的 SCSI。所以即使那些也使用 SCSI。

AHCI 仅由 SATA 控制器用来枚举磁盘。不是通过磁盘来传输数据。

请参阅有关 ATAPI 和 AHCI 的评论

我有一个普通的 SATA SSD 和 SATA DVD 驱动器以及lshw都使用 SCSI 作为软件协议的校样输出。请参阅以“bus info:”开头的行。

*-cdrom
    description: DVD-RAM writer
    product: BD-RE  BH16NS55
    vendor: HL-DT-ST
    physical id: 0
    bus info: scsi@4:0.0.0
    logical name: /dev/cdrom
    logical name: /dev/cdrw
    logical name: /dev/dvd
    logical name: /dev/dvdrw
    logical name: /dev/sr0
    version: 1.01
    capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
    configuration: ansiversion=5 status=nodisc
*-disk
    description: ATA Disk
    product: SanDisk SDSSDH3
    physical id: 1
    bus info: scsi@5:0.0.0
    logical name: /dev/sda
    version: 20RL
    serial: 2140LR450907
    size: 931GiB (1TB)
    capabilities: partitioned partitioned:luks
    configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512
Run Code Online (Sandbox Code Playgroud)

现在有支持 PCIe、SATA 和 USB 卡的 M.2 连接器(参见维基百科)。这3种类型是物理层使用的类型。例如,他们定义了电压。他们没有提及软件协议。

  1. 例如,SATA M.2 磁盘是否支持 AHCI,或者 SCSI 是否足以传输容量?
  2. SATA 使用 AHCI 进行枚举,使用 SCSI 进行数据。PCIe NVMe 磁盘使用 NVMe 存储数据。它使用哪种协议进行枚举?它不可能是 NVMe,因为 PCIe 显卡不支持 NVMe。必须有另一个协议。
  3. 正如维基百科所说,M.2 也支持 USB。哪种软件协议用于枚举,哪种软件协议用于数据?
  4. 为什么没有M.2 USB 盘?(物理层使用USB并连接到主板M.2插槽的磁盘。我不是在谈论USB M.2情况。)
  5. 为什么没有 M.2 SATA NVMe 磁盘?(SATA 位于物理层,NVMe 作为软件协议。)

use*_*686 39

\n

首先我想说的是,SATA没有数据传输的软件协议。

\n
\n

这是部分正确的,因为软件协议被命名为“ ATA ”而不是“SATA”(这只是一个特定的物理层)。

\n

然而,ATA 确实作为一种完全不同于 SCSI 的协议而存在,并且其规范(例如ATA 命令集)可以在不同的地方找到,例如来自 T13 技术委员会。

\n
\n

SATA CD 驱动器、SATA HDD 和 SATA SSD 使用 SCSI 作为软件协议。

\n
\n

他们不这样做。大多数使用ATA作为协议,但 CD/DVD 驱动器除外,它们使用 SCSI-over-ATA(又名 ATAPI)。

\n

(SATA 设备可能连接到 SAS HBA,但它们不会切换到 SCSI 模式,即使 \xe2\x80\x93 是 HBA 与 SAS/SCSI 一起实现 SATA 物理层和 ATA 命令集。)

\n
\n

旧的 IDE 驱动器使用 ATAPI,即 ATA 上的 SCSI。所以即使那些也使用 SCSI。

\n
\n

仅 CD/DVD 驱动器使用 ATAPI;其余的纯粹是 ATA。

\n
\n

我有一个普通的 SATA SSD 和 SATA DVD 驱动器以及 lshwproofes 的输出,它们都使用 SCSI 作为软件协议。请参阅以“bus info:”开头的行。

\n
\n

不,它显示的是 Linux 使用libata驱动程序,该驱动程序将 ATA 设备呈现给内核,就好像它们是 SCSI 设备一样。Libata 被记录为“根据 T10 SAT 规范为 ATA 设备提供 SCSI<->ATA 转换”。

\n

所讨论的规范是“ SCSI to ATA Command Translations ”,这是 T10 技术委员会的一份文档,描述了如何实现此类转换。USB 至 SATA 桥接器也使用相同类型的转换。(T10 还定义了针对 ATA 特定功能发送直通 ATA 命令的能力;这就是通过 USB 转 SATA 桥接器访问 ATA SMART 等功能的方式。)

\n

这是一个“相对较新”的更改 \xe2\x80\x93 从 ~2000 启动 Linux 内核会显示与 IDE 设备“/dev/hda”相同的磁盘。同样,几乎所有非 Linux 操作系统仍会显示 IDE/ATA/SATA 设备,以区别于 SCSI。

\n

(在很短的时间内,Linux 也有类似的 NVMe 到 SCSI 的转换,但很快就被删除,取而代之的是纯粹的 NVMe 接口。看起来 NVMe 和 SCSI 之间的差异比 ATA 和 SCSI 之间的差异要大得多。)

\n
\n

例如,SATA M.2 磁盘是否支持 AHCI,或者 SCSI 是否足以传输容量?

\n
\n

SATA 磁盘通常根本不支持 AHCI;这只是操作系统和 SATA 主机控制器(“HBA”)之间使用的接口。它代表“高级主机控制器接口”。

\n

M.2 规格的 SATA 磁盘可以包含其自己的 AHCI 主机控制器(然后通过 M.2 连接器使用 PCIe),但这种情况相当罕见。大多数时候,M.2 形式的 SATA 设备仅使用 M.2 提供的 SATA 通道连接到主板的现有 AHCI 主控制器。

\n
\n

SATA 使用 AHCI 进行枚举,使用 SCSI 进行数据。

\n
\n

不,如果它是 SCSI 磁盘,则相同的 SCSI 将用于枚举(使用 SCSI“ INQUIRY ”命令或其 ATA 等效命令)数据传输。SATA磁盘不是SCSI磁盘,但同样适用;ATA命令集还包括枚举。

\n

AHCI也参与其中,但位置不同:它用于枚举主机控制器本身,并通过 PCI“总线”与主机控制器交换 ATA 命令和数据。

\n

(换句话说,ATA 命令通过 AHCI 接口从主机发送到控制器,然后通过 SATA 协议从控制器发送到磁盘。)

\n
\n

另外,在德语维基百科上,他们将 AHCI 与 NVMe 进行了比较。他们应该将 SCSI 与 NVMe 进行比较

\n
\n

AHCI 和 NVMe在某种程度上具有可比性,因为两者都在 PCI 总线上提供了特定的编程接口(就像 AHCI 可以与传统 I/O 端口 IDE 编程接口进行比较一样)

\n

换句话说,NVMe同时定义了命令层主机接口,因此它类似于SATA + AHCI的组合,或者类似于SCSI +任何存在的SCSI HBA接口的组合。

\n
\n

PCIe NVMe 磁盘使用 NVMe 存储数据。它使用哪种协议进行枚举?它不能是 NVMe,因为 PCIe 显卡不支持 NVMe。必须有另一个协议。

\n
\n

是的,有两层枚举。

\n

PCI本身确实有自己的总线枚举协议,它向主机操作系统通知设备类别和产品ID(允许连接正确的驱动程序);该协议与设备类型无关。(据我所知,PCI Express 的高级机制与经典 PCI 基本相同,尽管低级细节非常不同。)

\n

之后,每个更高级别的协议驱动程序都会执行自己特定于该协议 \xe2\x80\x93 的枚举,例如,如果设备被检测为 NVMe 控制器,则发出 NVMe 命令来查询其“磁盘特定”参数;如果检测到它是 AMD GPU,则 AMD GPU 驱动程序会执行自己的操作。

\n
\n

为什么没有M.2 USB 盘?(在物理层使用USB并连接到主板的M.2插槽的磁盘。我不是在谈论USB M.2情况。)

\n
\n

很可能不需要它们,因为 SATA(甚至 NVMe 更是如此)已经可以在同一插槽上使用,并且往往提供比 USB 大容量存储更好的性能。

\n

大多数“USB”磁盘(除了少数例外)本来就不是 USB/SCSI,而是实际上内部使用 SATA 至 USB 桥接器的 SATA 磁盘。对于要连接到 M.2 插槽的此类磁盘,如果同一磁盘只能直接使用 M.2 插槽的现有 SATA 通道,那么使用 SATA 转 USB 桥接器将毫无意义。

\n

虽然原生 USB 海量存储磁盘确实存在(甚至可能通过 UASP 提供不错的性能),但只有当 USB 是唯一选择时它们才有意义 \xe2\x80\x93 原生 SATA 对于低性能磁盘仍然更有意义;适用于高性能的原生 NVMe。

\n
\n

为什么没有 M.2 SATA NVMe 磁盘?(SATA 位于物理层,NVMe 作为软件协议。)

\n
\n

再说一次,因为有更好的选择。

\n

请记住,M.2 插槽不是“SATA 或 NVMe”;它们是“SATA 或 PCIe”,允许任何类型的 PCIe 设备连接到它们\xe2\x80\xa6,包括 AHCI 主机控制器。

\n

因此,即使该产品针对仅 PCIe 的 M.2 插槽(即没有任何 SATA 连接),包含标准的 \xe2\x80\x93 仍然会更简单且更便宜 \xe2\x80\x93 SATA AHCI 主机控制器比更昂贵且不太可靠的 SATA 到 NVMe 转换器(无论如何内部必须包含 SATA 主机控制器)。

\n

(如果 M.2 插槽已经提供 SATA 通道,则这两种选择都比直接将同一磁盘连接到主板的 SATA AHCI 控制器更昂贵。)

\n

  • m.2 USB 驱动器确实存在,以“微型 SD 卡到 m.2 适配器”的形式存在。它们基本上是 m.2 外形尺寸的 microSD 读卡器,并通过 m.2 接口上的 USB 引脚与主机通信。从电气角度来说,它们与插入 USB 端口的 USB 读卡器没有什么不同。m.2 连接器上的 USB 引脚更常用于 WiFi + 蓝牙组合卡或蜂窝 (LTE / 5G) 卡上的蓝牙功能。 (7认同)
  • 有一段时间,AHCI M.2 驱动器确实存在:它们是 PCIe,但作为 SATA 控制器提供给系统。它们在 NVMe 驱动程序在操作系统中普遍使用之前就已使用。此外,例如 2010 年代早期/中期的 Macbook Pro 和 Air SSD 都是 AHCI(需要 M.2 的无源适配器)。您获得了 PCIe 带宽的优势,但没有获得 NVMe 延迟的改善。 (5认同)
  • 挑剔:大多数硬盘驱动器和 SSD 确实不使用 ATAPI,但基本上您可能使用 ATA 链接连接到计算机的所有其他设备都使用 ATAPI。这在历史上更为人所知,因为 Iomega 的 Zip 驱动器、磁带驱动器的更广泛使用以及对可移动 ATA 硬盘驱动器系统的大量尝试(几乎所有这些系统都使用 ATAPI 进行盘柜控制,即使它们简单地说) ATA 到驱动器)。 (5认同)