Firmware and tools for RTL9210 and RTL9210B USB to NVMe/SATA bridge controller. They are provided by station-drivers, Realtek, etc.
All procedures described in this Git repository are at your own risk. In case of software issues, you can find some solutions in the Unbrick section.
- configure: All configurations for each device.
- dump: All dumps for each device.
- firmware: All found firmware.
The table below lists all known firmware versions available in this git repository's firmware folder.
Firmware ver. | Build date | RTL9210 | RTL9210B | Links |
---|---|---|---|---|
1.20.12 | ? | ✅ | ❌ | Download |
1.23.5 | 2020.09.03 | ❓ | ❓ | Not found yet |
1.23.9 | 2020.10.05 | ✅ | ❌ | Download |
1.23.15 | ? | ✅ | ❌ | Download |
1.25.7 | ? | ✅ | ❌ | Download |
1.25.14 | ? | ✅ | ❌ | Download |
1.25.18 | ? | ✅ | ❌ | Download |
1.27.24 | ? | ✅ | ❌ | Download |
1.27.25 | ? | ✅ | ❌ | Download |
1.28.17 | ? | ✅ | ❌ | Download |
1.29.8 | ? | ✅ | ❌ | Download |
1.29.12 | ? | ✅ | ❌ | Download |
1.29.12.011122 | ? | ✅ | ✅ | Download |
1.29.391 | ? | ✅ | ❌ | Download |
1.30.17 | ? | ❓ | ✅ | Download |
1.30.21.070622 | ? | ✅ | ✅ | Download |
1.30.24.030822 | ? | ❓ | ✅ | Download |
1.30.28.081022 | ? | ❓ | ✅ | Download |
1.31.17.102022 | ? | ❓ | ✅ | Download |
1.31.17.102022 (2) | ? | ❓ | ✅ | Download |
1.32.16.010923 | ? | ❓ | ✅ | Download |
1.32.45.041323 | ? | ❓ | ✅ | Download |
1.32.49.140423 | ? | ❓ | ✅ | Download |
1.32.49.140423 (Lcd) | ? | ❓ | ✅ | Download |
1.32.68.062623 | 28.06.23 | ❓ | ✅ | Download |
1.32.87.082923 | 29.08.23 | ❓ | ✅ | Download |
1.32.901.120722 | ? | ❓ | ✅ | Download |
1.33.7.191023 | 19.10.2023 | ❌ | ✅ | Download |
1.33.44.011824 | 18-01-2024 | ❓ | ✅ | Download |
There are dozens of devices with the RTL9210B, I have gathered in this git repository some firmware configs found on the www.station-drivers.com forums.
You can check in the configure folder or use values from the dump folder to create your own configuration.
Brand | Model | Controller | config file | dump | Notes |
---|---|---|---|---|---|
Inateck | FE2025 | RTL9210B | config | dump | |
Sabrent | EC-SNVE | RTL9210B | config | ||
Mokin | MOUD0501 | RTL9210B | |||
Ugreen | ? | RTL9210B | config | dump | |
SmallRig | SD-01 | RTL9210B | dump | ||
MKUO | SD-01 | RTL9210(B ?) | |||
Orico | M2PJM-C3 | RTL9210(B ?) | dump | ||
Unionsime | MD202 | RTL9210B | config | dump | |
UniAccessories | ? | RTL9210B | config | dump |
Warning: Flashing the firmware can brick or permanently damage your device. Do it at your own risk. The author of this Git repository is not responsible for any damage to your device. If you brick your device, you can try to unbrick it with the Unbrick section.
Info: The firmware update tool is only available for Windows and does not work well on Linux with Wine or in a virtual machine.
- Download the correct and latest firmware and tools from the
firmware
folder. - Extract the archive.
- Connect the device to the computer.
- Launch the firmware update tool (such as UTHSB_MPtool) provided in the firmware archive.
- Dump your device configuration with the firmware update tool and save it. (Optional but highly recommended)
- Disconnect the enclosure from the computer.
- Remove the NVMe/SATA drive.
- Reconnect the device to the computer.
- Copy the configuration file (
.cfg
) of your device from the configure folder to the configure folder where the firmware update tool is located. - Change the
SERIAL
in the configuration file to match your dump file if it is defined. (Optional but recommended) - Comment out the
DISK_IPS_THRES
with a;
in the configuration file. (Optional but recommended) - Launch the firmware update tool (such as UTHSB_MPtool) provided in the firmware archive.
- Select the configuration file (
.cfg
) of your device. - Click on the flash/update device button and wait until the process is finished.
This section describes how to configure (in cfg files) the firmware for your device, all configurations are in the configure
folder or use values from the dump
folder to create your own configuration.
Each configuration are unique to the device, your enclosure may not work properly if you have not the right configuration.
Variable name | Value example | Description |
---|---|---|
U2PHY | 02 f4 9b e0 e1 | USB 2.0 Physical Layer settings |
U3PHY | 02 d4 09 00 d5 00 80 | USB 3.0 Physical Layer settings |
VID | 0x0bda | Vendor ID |
PID | 0x9210 | Product ID |
MANUFACTURE | "Unionsine" | Manufacturer name |
PRODUCT | "MD202" | Product name |
SERIAL | "012345679545" | Serial number, 12 characters and unique per device |
SCSI_PRODUCT | "Unionsine MD202 " | SCSI Product name |
SCSI_VENDOR | "n/a" | SCSI Vendor name |
CFEXPRESS | 0x0 | Enable CFExpress card reader (Always 0x0) |
USB_SELF_PWR | 0x0 | If the device is self-powered ? |
LED | 0x1 | Set to 0x1 if the device has a LED |
DISK_HOTPLUG | 0x0 | Anable device supports hot-plugging (Very often 0x0) |
PINMUX1 | 0x0 | Pin multiplexing settings (first set) |
PINMUX2 | 0x0 | Pin multiplexing settings (second set) |
U2_MAXPWR | 0xfa | USB 2.0 mode maximum power |
U3_MAXPWR | 0x70 | USB 3.0 mode maximum power |
ASPMDIS | 0x0 | Enable or disable active power management |
PCIE_REFCLK | 0x0 | PCIe reference clock |
PCIE_PWRCUT_THRES | 0x5 | Suspends the PCIe power after 5 minutes of idle time (1 unit = 1 minute),, it recommended to comment this line |
DISK_IPS_THRES | 0x1 | Responsible for powering down the PCI bus after a timeout to conserve energy |
SWR_1_2V | 0x0 | ? |
EN_U1U2 | 0x1 | Set to 0x1 to enable USB 3.0 Link Power Management |
EN_UPS | 0x1 | Enable USB Power Saving ? |
PD | 0x1 | Power Down |
CUSTOMIZED_LED | 02 01 07 | To customize the LED behavior |
SUSPEND_LED_OFF | 0x1 | ? |
FORCE_USB_SPEED | 0x0 | ? |
FORCE_PCIE_SPEED | 0x0 | ? |
FORCE_USB_QUIRK | 0x0 | ? |
FORCE_PCIE_QUIRK | 0x0 | ? |
FAN | 0x0 | Set to 0x1 if the device has a fan |
DIS_SHOW_EMPTY_DISK | 0x1 | Set to 0x1 to show the enclosure when no NVMe/SATA drive is connected |
FORCE_SATA_NORMAL_DMA | 0x0 | Force SATA to use normal DMA |
RM_INTERNAL_RD | 0x0 | ? |
HS_AUTO_SWITCH | 0x0 | ? |
UART_DBG_PIN | 0x0 | UART Debug pin |
UART_BAUD_RATE | 0x0 | UART Baud rate |
FINGER_PRINT_EN | 0x0 | Enable fingerprint authentication |
CUSTOMIZED_DISK_IDENTIFY | 0x0 | ? |
HW_LED_CFG | 0x0 | ? |
CDROM_CFG | 0x0 | ? |
SUPPORT_HID | 0x0 | ? |
LATE_INIT_DISK | 0x0 | ? |
SCSI_WP_PIN | 0x0 | Write Protect SCSI pin ? |
SD_MMC_TYPE | 0x0 | ? |
FORCE_PORT_TYPE | 0x0 | ? |
BCDDEVICE | 0x0 | ? |
SUSPEND_DISK_OFF | 0x7 | ? |
SCSI_WB_PIN | 0x0 | ? |
CUSTOMIZED_FEATURE | 0x0 | ? |
PERIPH_API | 0x0 | ? |
RAID_CFG | 0x0 | ? |
To create your own configuration, you can use the dump
folder to get the values of your device.
- Find the dump file of your device in the
dump
folder or on the internet. - Create a new file in the
configure
folder with the name of your device and the extension.cfg
. - Copy the content of the dump file into the new file.
- Remove the first 3 lines of the dump file. These lines start with a line of
*
, contain the device name on the second line, and have another line of*
on the third line. - Remove variables with a value of
n/a
. (Optional) - Replace
:
with=
for variable definitions. - Comment
DISK_IPS_THRES
by changing it to;DISK_IPS_THRES = 0x1
if you want. (Optional) - Launch the firmware update tool (such as UTHSB_MPtool), select the new configuration file, and flash it.
When you have bricked your device, you can try to unbrick it with the following steps:
- Disconnect the device from the computer and remove the NVMe/SATA drive.
- Disassemble the enclosure and locate the flash chip, which is usually an 8-pin 2x3 mm chip. The chip might be labeled P25Q40SH, FM25Q04A, PUYA P25D40H, or FM25Q04A.
- Find the datasheet for the flash chip, and locate the CS# and VCC pin or CS# and Hardware Reset pin. Generally, VCC is pin 8 and CS# is pin 1.
- Short the CS# and VCC pin, or better, use an SPI programmer like the CH341A. If using an SPI programmer, you can skip the next steps and directly flash the firmware.
- Launch the Realtek firmware update tool (such as UTHSB_MPtool).
- Connect the enclosure to the computer and keep the pins shorted. Keep the pins shorted for 10-15 seconds or until the device is recognized by the computer or the Realtek firmware update tool.
- Launch the Realtek firmware update tool (such as UTHSB_MPtool).
- Click on the flash/update device button and wait until the process is finished.
- Add customized command.
- Fix SATA USB powercut resume issue.
- Fix SATA reset issue if disk is lost.
- Update Kinsea KS10 LED behavior.
- Fix Fulllink macbook disk speed test issue.
- Support USB HID interface.
- Improve the compatibility for RTL9210B.
- Support RTL9210C_PD/RTL9210C_CG.
- Improve the compatibility for cdrom feature.
- Add Orico customized sleep RGB LED behavior.
- Support security api.
- Add Kinsea KS10 LED behavior.
- Add IOmaster M204 LED behavior.
- Add LED SSI_6431_fp LED behavior.
- Improve opal compatibility.
- This firmware update aims to improve stability with Samsung 980 Pro and Western Digital SN550 NVMe SSDs.
- The power LED behavior is also improved on Windows, and Intel based Mac systems: now when safely ejected the power LED should turn off ( it may blink slowly ) indicating the drive may be safely unplugged from the computer.This update is recommended for uses who have experienced connectivity problems with Samsung 980 Pro or Western Digital SN550 NVMe SSDs.
- Fix problem If your HDD/SSD could not be detected or kept disconnected from your Mac
- Fix Compatibility with Samsung M.2 SSDs und Samsung Data Migration Tool
- Fix slow speed issue.
- Has improved random 4K read performance.
- Addresses USB link instability seen in some SSD models when used in conjunction with Linux-based PCs, including the Solidigm P41 Plus. This update includes compatibility fixes in certain scenarios, including use with the Samsung 980 Pro
- Improved Compatibility
Don't hesitate to contribute to this git repository by creating a pull request or by contacting me.