JMB585 是用于从主机到具有 SATA/AHCI 接口的存储设备的 PCIe 桥接控制器。此桥接控制器也是一个端口倍增器。
如果将此桥接控制器设备插入支持 PCIe 3.0 规格的主板上的 m.2 插槽,它将启用所有连接的 SATA 设备,并且功能可与来自 CPU 或芯片组的本机 SATA 端口相媲美。
通过从支持从 USB 到 SATA 协议转换的 USB 设备连接到 m.2 连接器(例如 RTL9210 USB 到 PCIe/SATA 桥接器),JMB585 不再被识别。
所有必要的协议似乎都处于可比/兼容的级别(对于 PCIe,它是 3.x 标准,SATA 能够进行修订 3(6Gb/s),并且 USB 也兼容标准(3.2-3.0)。
所有研究都无法解释 Linux 内核(6.x 版本)系统的差异,并且 Windows 10 系统上的 JMB585 也无法识别连接到 USB-SATA 桥接 IC。
- 是硬件不兼容还是协议困难?
- 可以通过固件更新解决这个问题吗?
如果您以 USB-to-SATA 模式将 JMB585 的“PCIe”侧连接到 RTL9210 的“SATA”侧,则会出现明显的协议不兼容问题:SATA 不是 PCIe,无论是物理层还是更高层,因此 RTL9210 等 SATA 主机无法与 JMB585 等 PCIe 设备通信。(这就是 JMB585 等桥存在的原因!)
如果您在 USB-to-PCIe 模式下将 JMB585 的“PCIe”侧连接到 RTL9210 的“PCIe”侧,则仍存在协议不兼容问题:RTL9210 只能识别一种特定类型的 PCI 设备 - NVMe 存储控制器 - 但没有识别 SATA AHCI 控制器或其他任意 PCI 设备所需的“驱动程序”。也就是说,它只能充当AHCI主机控制器(在 USB-to-SATA 模式下),但不能作为主机与主机通信(在 PCIe 模式下)。
这是因为无法通过常规 USB(没有 Thunderbolt)提供 PCI 直通,因此 RTL9210 本身必须知道如何处理连接到它的 PCIe 设备。例如,对于 NVMe SSD,它需要充当 NVMe 存储设备的主机,并在 NVMe 命令和 SCSI 命令之间进行转换,这样它就可以在 USB 端假装是标准的 USB 大容量存储 (SCSI) 设备。
虽然理论上这种芯片可以充当 SATA AHCI 控制器的主机(然后在 ATA 和 SCSI 之间进行转换,就像在 USB 到 SATA 模式下一样),但我怀疑 RTL9210 之所以没有实现这一点,是因为几乎没有实际的 M.2 SSD 以这种方式工作:要么它们是纯 SATA 设备,要么它们是 PCIe NVMe 设备,但实际上它们都不是带有自己的 SATA 控制器的 PCIe 设备,因此在 RTL9210 这样的芯片中实现这一点不值得花费成本。