Um JMB585 é um controlador de ponte para PCIe do host para dispositivos de armazenamento com interfaces SATA/AHCI. Este controlador de ponte também é um multiplicador de portas.
Se este dispositivo controlador de ponte for inserido em um soquete m.2 em uma placa-mãe compatível com as especificações PCIe 3.0, ele habilitará todos os dispositivos SATA conectados e terá funcionalidade comparável às portas SATA nativas da CPU ou do chipset.
Ao conectar a um conector m.2 de um dispositivo USB que suporta tradução de protocolo de USB para SATA, por exemplo, uma ponte RTL9210 USB para PCIe/SATA, o JMB585 não é mais reconhecido.
Todos os protocolos necessários parecem estar em níveis comparáveis/compatíveis (para PCIe são os padrões 3.x, SATA é compatível com a revisão 3 (6 Gb/s) e USB é compatível entre os padrões (3.2-3.0) também).
Todas as pesquisas feitas não conseguiram explicar as diferenças para um sistema Linux Kernel (versões 6.x) e o JMB585 em um sistema Windows 10 também não foi reconhecido conectado ao CI de ponte USB para SATA.
- É uma incompatibilidade de hardware ou uma dificuldade de protocolo?
- Isso poderia ser resolvido com atualizações de firmware?
Se você estiver conectando o lado 'PCIe' do JMB585 ao lado 'SATA' do RTL9210 no modo USB para SATA, então você tem uma incompatibilidade de protocolo óbvia: SATA não é PCIe, nem na camada física nem em camadas superiores, então um host SATA como o RTL9210 não pode se comunicar com um dispositivo PCIe como o JMB585. (Que é o motivo da existência de pontes como a JMB585!)
Se você estiver conectando o lado 'PCIe' do JMB585 ao lado 'PCIe' do RTL9210 no modo USB para PCIe, então você ainda tem uma incompatibilidade de protocolo: o RTL9210 só pode reconhecer um tipo específico de dispositivo PCI – controlador de armazenamento NVMe – mas não tem os "drivers" necessários para reconhecer controladores SATA AHCI ou outros dispositivos PCI arbitrários. Ou seja, ele só pode atuar como um controlador host AHCI (quando no modo USB para SATA), mas não pode falar com um como um host (quando no modo PCIe).
Isso ocorre porque não é possível fornecer passagem PCI por USB comum (sem Thunderbolt), então o próprio RTL9210 necessariamente precisa saber como lidar com o dispositivo PCIe conectado a ele. Por exemplo, com SSDs NVMe, ele precisa atuar como host para o dispositivo de armazenamento NVMe e traduzir entre comandos NVMe e comandos SCSI para que possa então fingir ser um dispositivo USB Mass Storage (SCSI) padrão no lado USB.
Embora, em teoria, tal chip pudesse atuar como um host para um controlador SATA AHCI (e então converter de ATA para SCSI, assim como acontece no modo USB para SATA), suspeito que isso tenha sido deixado de fora do RTL9210 porque praticamente nenhum SSD M.2 funciona dessa forma: ou são dispositivos SATA puros ou são dispositivos PCIe NVMe, mas praticamente nenhum deles é um dispositivo PCIe com seu próprio controlador SATA, então implementar isso em chips como o RTL9210 não valeria a pena.