Sunday 9 May 2021

RTL9210 NVMe USB3.1 vs SATA SSD

Quite a while back I bought a "USB3.1 Type-C Enclosure" for use with my Corsair Force MP510 512GB NVMe drive. After I purchased it, I found that it was only going at / below USB 3.0 speeds, but with a different NVMe drive installed, it would work at 3.1 speed (or at least above 3.0 speeds). I'd not managed to find any fix for this, so I've just been using it since then at the USB 3.0 speeds.

I've been working lately with my web development site files on my home PC's internal SSD, which isn't great as it means I can't take them to work (or anywhere else) with me. Previously I had been using a Sandisk Extreme USB 3.0 memory stick, but I'd been having quite a few issues with that (it's quite a few years old now), hence why I had moved them to the internal SSD. This weekend I was trying to tidy up my web development files, so I thought I would move them to the MP510 NVMe drive in the USB 3.1 caddy, which I currently just use for various VM VHDs. It wouldn't be as fast as the internal SSD, but at least it would be portable and faster / more reliable than the USB stick.

I thought I would take a look again at seeing if I could fix the issue with the speed, and another problem it has, which is dropping connection when on a USB 3.1 socket. First thing I tried was updating the ASMedia USB drivers for my motherboard to the latest version. Unfortunately that made no difference.

The board for the NVMe to USB caddy uses a Realtek RTL9210 chipset. I managed to find a firmware update to 1.23.15.111620 for the chip. (Finding the firmware update for this and the latest USB drivers for my motherboard was a pain - it seems you have to find them on third party sites and the manufacturers don't release them directly. Yes, motherboard manufacturers do have driver updates on their sites, but these tend to be old ones.) The update went fine, after doing this I ran CrystalDisk Mark on the drive, then unplugged the drive to move it from the USB 3.0 socket it was curently plugged into, to a USB 3.1 socket.

But the disk didn't show up, and when I went into Disk Management it said the disk needed initialising. I tried rebooting, unplugging and re-plugging a few times, tried it in a different PC, but no luck. So I took the drive out of the caddy, in order to try it bare. Unfortunately my PC only has one M.2 slot, and this is used for the boot drive. So I couldn't test it in there.

I looked through all my adapters, hoping for an NVMe riser cable or PCI-e to NVMe riser cable, but the closest I had was a "NFHK N-M201 Ver. 2.0" PCI-e to NVMe M.2 card. I plugged this into a x4 speed slot on the motherboard and thankfully the drive did show up okay.

MP510 NVMe drive via PCI-e to NVMe adapter card

I then tried a PCIe x1 - PCIe x16 riser, with the cable and x16 slot board outside the case (to allow for easy plugging / unplugging of the drive without opening the case up). Then plugged the PCIe to NVMe board into this. This worked, but speeds weren't great.

MP510 NVMe drive via PCI-e 1x to 16x riser and PCI-e to NVMe adapter card

I had issues with my PC refusing to boot, but eventually tracked it down to my use of a USB 2.0 extension cable that only had a single 4 pin USB connected into it, leaving 4 bare pins. As I had been messing about inside my PC I think I must've moved this cable so the pins were touching something metal and shorting out. I couldn't find any electrical tape that wasn't rubbish so I just covered up the bare pins with some selotape to resolve the issue.

Next I tried a simple PCIe x1 - x1 riser. For some reason they had made it with the end of the slot blocked off (so you could only physically fit a x1 card into it). So I had to dremel out the end of it to let the x4 size PCIe to NVMe adapter fit. But this gave the same results as on the x1 - x16 riser.

MP510 NVMe drive via PCI-e 1x to 1x riser and PCI-e to NVMe adapter card

I then tried a Crucial MX500 1TB SATA SSD I'd purchased recently and not used, with a SATA to USB 3.0 adapter. But this just crashed Crystal Disk Mark. So then I tried it connected via SATA, and the speeds were actually better (at least for sequential reads and writes) than the NVMe drive.

MX500 SATA drive via SATA

After that I tried again with the NVME to USB caddy in a USB 3.1 port, and it now worked. But results weren't any better.

MP510 NVMe drive via RTL9210 NVMe to USB in USB 3.1 socket
MP510 NVMe drive via RTL9210 NVMe to USB in USB 3.0 socket

So it looks like my way forward is just using the SATA SSD connected via SATA. I'm not sure why the NVMe drive in the PCI-e adapter is so slow, particularly on the x1 risers. The only thing I can think of is if the N-M201 PCIe to NVMe adapter card was actually PCIe 2.0 speed rather than 3.0 - but I'm not sure how that would be possible when it's nothing more than traces from the PCI-e slot to the M.2 slot and an LED.

The MP510 drive attached to a PCIe - NVMe adapter, inserted into a PCIe 1x - 1x riser, the empty PCIe 1x - 16x riser, and MX500 connected via SATA.