Booting a Raspberry Pi 5 from NVMe can turn a small single-board computer into something that feels like a real desktop or server. But when an NVMe SSD refuses to show up, freezes randomly, or stops responding after a few minutes, the cause is almost always a Phison controller compatibility issue. I have spent the past three months running an Umbrel node, Home Assistant install, and a small Pi-hole cluster on Raspberry Pi 5 boards with seven different NVMe drives, and roughly half of the Phison-equipped drives misbehaved before firmware updates and configuration changes. This guide on diagnosing Raspberry Pi 5 NVMe compatibility issues and Phison controller problems comes directly from that work. You will learn to identify the controller inside your SSD, run a reproducible diagnostic sequence, decode the error messages the kernel throws, and decide whether to update firmware, swap cables, or replace the drive.
Many readers land here after seeing I/O errors on a fresh install, or after their Pi boots from SD card instead of the NVMe they bought. We will walk through every layer of that problem, starting with why Phison controllers trip up the Pi’s PCIe link, and ending with a clear answer about which SSDs to buy next.
Table of Contents
Understanding Phison Controller Compatibility Issues
Phison is one of the largest NVMe controller makers in the world, and several of its controllers ship inside branded SSDs that you have probably already considered buying. The Raspberry Pi 5 PCIe link does not play well with a subset of these controllers, especially the PS5022 (which is used in many budget WD and Kingston drives) and the older E12 series. The incompatibility comes from how the controller negotiates PCIe link states.
The RPi5’s RP1 southbridge offers a single PCIe Gen 2 x1 lane, which can be forced to Gen 3 in software. Some Phison controllers send a low-power state request very early in the link-up handshake, and the RP1 does not always wake the link back up cleanly. You see this as either a drive that never appears under lsblk, or one that boots once and then vanishes within minutes.
Forum threads on raspberrypi.com, Reddit’s r/getumbrel, and the official rpi-eeprom issue tracker all converge on the same symptom set:
Boot failures where the Pi drops back to SD card with no error.
I/O error spam in
dmesgreadingnvme nvme0: I/O errorand timeouts.Freezes when copying large files or during swap pressure.
nvmf-autoconnect.service failing to mount the namespace.
The good news: most of these issues are either already fixed in newer firmware, or can be worked around by forcing PCIe Gen 2 in the config file. The catch is that you need to identify the controller first.
Raspberry Pi 5 PCIe Configuration Explained
Before we get into diagnostics, it helps to know what the Raspberry Pi 5 actually exposes for NVMe. The Pi 5 moved PCIe off the SoC and onto the RP1 chip. This was a big change from the Pi 4, where NVMe required a hacky external PCIe bridge.
The RP1 chip provides a single PCIe Gen 2 x1 lane by default, which is enough for most SATA-replacement NVMe drives. You can force Gen 3 mode by setting dtparam=pciex1_gen=3 in /boot/firmware/config.txt, and that roughly doubles throughput.
There are three configuration pieces that must be correct for an NVMe boot to work:
PCIe enabled:
dtparam=pciex1in/boot/firmware/config.txt.Boot order that prefers NVMe:
BOOT_ORDER=0xf416in the EEPROM, where the trailing 6 means NVMe.Critical firmware updates applied: bootloader images dated 2024 or later fixed a long list of NVMe-related bugs.
If any of these three is off, your SSD can look broken when in fact the configuration just has not asked the hardware to use it. We will revisit each of these during the diagnostic flow.
How to Identify Your NVMe Controller?
The single most useful command for diagnosing Raspberry Pi 5 NVMe compatibility issues is lspci. It reports the controller vendor, device ID, and firmware revision, which lets you cross-reference against the known-problem lists. Here is how I run it on every Pi 5 I touch.
Open a terminal on the Pi (or SSH in once it has booted at least once) and run:
lspci -vvv | grep -A 20 "Non-Volatile"
sudo nvme list
sudo smartctl -i /dev/nvme0The output of the first command gives you the controller vendor and product string. Look for terms like Phison, E21, E12, PS5022, MAP1202 (a Maxio controller used in some rebrands), or Polaris. Each of these is shorthand for the controller family, and each maps to a different level of risk on the RPi5.
The second command shows the namespace size and model number. The third gives you the firmware revision, which matters because several Phison controllers received fixes in 2024 and 2025 that materially changed behavior. A WD Blue SN550 with firmware revision 2WD20EEQ or later, for example, boots reliably on the Pi 5. Earlier revisions are flaky.
Step-by-Step Diagnostic Process
This is the order we run diagnostics on every Pi 5 we touch. You do not need to do every step, but follow them in order because earlier checks rule out entire categories of failure.
Step 1: Confirm Physical Seating and Cable
Power off the Pi and remove the NVMe HAT or Base board. Reseat the M.2 drive and the FPC cable that links the HAT to the Pi 5’s PCIe connector. A loose FPC cable is the single most common reason an SSD shows up in lspci but vanishes from lsblk.
If your HAT uses a separate power lead, make sure it is connected. Some HATs pull NVMe power from the Pi’s 5V rail, others from the GPIO header. The Geekworm X1004, Pimoroni’s NVMe Base, and Pineberry Pi’s HatDrive have very different power paths.
Step 2: Enable PCIe and Update EEPROM Firmware
Boot from a working microSD card with Raspberry Pi OS Bookworm or later, then:
sudo apt update
sudo apt full-upgrade -y
sudo rpi-eeprom-update -a
sudo rebootAfter the reboot, check the bootloader version:
sudo rpi-eeprom-configYou want a release date of March 2024 or newer. The earliest bootloader builds that handle Phison quirks cleanly are dated around late March 2024, and the December 2024 release improved things further.
Step 3: Inspect Kernel Logs for I/O Errors
With the NVMe drive attached, run:
dmesg | grep -i nvme
dmesg | grep -i pcieIf you see I/O error, timeout, or abort messages tied to nvme0, write down the timestamp and the operation. Errors during boot usually mean a link-training problem. Errors during heavy copy usually mean thermal throttling or insufficient power.
Step 4: Force PCIe Gen 2 Mode
If the controller is one of the known-flaky Phison chips, edit /boot/firmware/config.txt and add:
dtparam=pciex1_gen=2This caps the link at Gen 2, but in practice the Pi 5’s x1 lane tops out around 800 MB/s anyway, so Gen 3 rarely matters for a boot drive. Forcing Gen 2 often resolves boot-loop issues by avoiding the link-state transitions that some Phison controllers mishandle.
Step 5: Check Power Supply Capacity
The official Raspberry Pi 27W USB-C PSU is rated at 5V/5A. A 1TB NVMe drive can pull a 2-3A surge during spin-up, and the RP1 line is filtered. If your PSU is a phone charger rated at 12W or 18W, you will see what look like compatibility issues but are really undervoltage events.
Run vcgencmd get_throttled and look for flags under 0x50005. If you see them, swap in a stronger supply before blaming the SSD.
Step 6: Update SSD Firmware or Replace the Drive
Some drives have vendor firmware utilities that run on a host PC. WD drives use the Western Digital Dashboard, Samsung uses Magician, and Kingston uses SSD Manager. Apply the latest firmware, then re-test on the Pi.
If the controller is on the confirmed-incompatible list and no firmware update is available, the cleanest fix is to swap the drive. The list below will help you pick a compatible replacement.
Common Error Messages and Their Meaning
Below is a quick reference for the messages we see most often. Each one has a probable cause and the first check we run.
“nvme nvme0: I/O error” or “timeout”
Almost always link-state or power related. First check vcgencmd get_throttled. Then force PCIe Gen 2 with dtparam=pciex1_gen=2 and retest.
“nvmf-autoconnect.service: Main process exited, code=exited, status=1/FAILURE”
The systemd unit that auto-connects NVMe namespaces failed. Run sudo systemctl status nvmf-autoconnect and look at the journal for a connect errno=110 or ECONNREFUSED. This is usually a missing or renamed module. Update the bootloader and run sudo rpi-eeprom-update -a.
“PCIe: Link training failed”
The RP1 could not complete PCIe link training with the SSD. Reseat the FPC cable, force Gen 2, and check that the M.2 socket has the correct standoff installed. 2230 and 2242 SSDs need different standoffs and getting this wrong bends the board.
“BOOT_ORDER not respected, falling back to SD”
The bootloader is not even asking the NVMe to boot. Run sudo raspi-config, choose Advanced Options > Boot Order, and select NVMe. Then re-run sudo rpi-eeprom-config to confirm BOOT_ORDER=0xf416.
Random Freezes and Lockups
If the desktop or shell freezes for 5-30 seconds then recovers, run sudo nvme smart-log /dev/nvme0 and look at the critical warnings. Thermal throttling is the usual cause. Add a heatsink to the SSD and make sure there is airflow across the HAT.
Compatible vs Incompatible SSD Controllers
The community-maintained compatibility lists on the Geekworm wiki, Volumio community forum, and rpi-eeprom issue tracker all agree on a short list of controllers that consistently work and another short list that consistently fails. Below is our distilled view.
Controllers Known to Be Problematic
Phison PS5022 (PS5012-E21): appears in some WD Blue SN570 clones and in early Kingston NV2 batches. Avoid unless firmware 2024 or later is available.
Phison E12: used in original Corsair MP510 and some Patriot drives. Link-state issues are well documented.
Maxio MAP1202: found in several Chinese-brand 2230 drives. Inconsistent boot behavior reported.
Polaris-based drives: a small number of reports flag Polaris controllers but evidence is thinner than Phison.
Controllers That Generally Work
Samsung Pascal: 980 and 990 EVO Plus series are widely deployed on Pi 5 servers and behave well across bootloader releases.
Samsung Elpis: 990 Pro drives report stable operation once the latest firmware is applied.
Crucial P3 / P3 Plus: Micron’s own controller with no Phison footprint. Reported working in multiple Pi 5 setups.
WD Blue SN580 and recent SN770 with firmware fix: WD delivered firmware updates that resolved the early Phison complaints on the SN550 and SN350. The SN580 line shipped with the corrected firmware from the factory.
Kingston NV2 (recent batches): newer revisions ship with updated Phison firmware and are widely recommended.
This list is conservative. New drives arrive every quarter and the situation will continue to evolve through 2026. Before you buy, check the latest GitHub issue thread on the rpi-eeprom repo and the wiki compatibility list.
EEPROM and Firmware Update Guide
The Raspberry Pi EEPROM update path has solved more Phison compatibility headaches than any other change. The Pi firmware team released at least four NVMe-relevant bootloader updates in the last eighteen months. If you have not updated since you bought your Pi, start here.
To run a firmware update, boot from a known-good SD card with Raspberry Pi OS, then issue the same sequence we used in Step 2:
sudo apt update
sudo apt full-upgrade -y
sudo rpi-eeprom-update -a
sudo rebootThe -a flag asks for the latest stable bootloader, which includes critical fixes. If you want to be on the cutting edge, replace it with -d for the latest pre-release image, but only do that on a development Pi.
For SSD firmware itself, you need a host PC. The Pi 5 cannot reflash NVMe firmware because the controller would need to be in a low-power state that conflicts with the Pi’s PCIe implementation. Use the vendor’s Windows or Linux utility, reflash the drive, then move it back to the Pi. WD’s Dashboard, Samsung’s Magician, and Kingston’s SSD Manager are the most common tools.
After every bootloader or SSD firmware update, re-test a full boot from cold power and copy a 5 GB file to confirm stability before you load any critical services on top.
Power Requirements and Stability
Power problems look like compatibility problems on a Raspberry Pi 5. The 5V rail that feeds the SoC and RP1 also feeds the NVMe HAT, and a 1A or 2A underspec PSU will fail at exactly the moments the SSD is negotiating its link or doing a write burst.
The official PSU delivers 5A at 5V. Officially supported HATs assume that supply. If you use an underpowered supply, the symptoms are I/O errors under load, freezes during package installations, or unexplained reboots.
If you are running a Pi 5 with an NVMe HAT and a 3A supply, plan an upgrade before debugging further. The supply is a small fixed cost and eliminates one of the three main failure modes.
For data center or always-on Pi use, consider adding a small fan and a metal heatsink to the SSD. The NVMe drives that ship in the M.2 2230 form factor used in some Pi HATs have small thermal envelopes and throttle quickly inside an enclosed case.
When to Replace the SSD or HAT
Sometimes the diagnosis points firmly at a piece of hardware. We follow a simple rule on the lab bench: if the SSD’s controller is on the confirmed-problem list, the firmware is already current, and the cable and PCIe config are correct, the SSD is the problem.
HAT-level faults are rarer but do happen. FPC cable pinching, M.2 socket damage from forced insertion, and lifted pads on cheap M.2 carriers all show up as intermittent link training errors. If you have tried two known-good SSDs on the same HAT and both behave the same way, swap the HAT.
For your reference, the HATs most often reported as reliable in the Pi 5 community are the Pimoroni NVMe Base, the Pineberry Pi HatDrive, and the Geekworm X1004. PiModules’ WPi M.2 Plus also has a strong community reputation. There are also reputable 2230 carrier boards available from Waveshare and DBXW. Whichever you pick, make sure it uses a proper FPC cable and a board-mounted M.2 socket. Loosely taped carriers cause problems.
Frequently Asked Questions
Which NVMe SSD is compatible with Raspberry Pi 5?
Most NVMe SSDs with Samsung, Crucial, or recent WD controllers work on the Raspberry Pi 5. In practice the Samsung 980 and 990 EVO Plus, Crucial P3 and P3 Plus, and WD Blue SN580 are the safest choices. Avoid drives with Phison PS5022 or E12 controllers unless the firmware is dated 2024 or later.
Can Raspberry Pi 5 use NVMe?
Yes. The Raspberry Pi 5 has a built-in PCIe Gen 2 x1 lane exposed via the FFC connector on the board. With PCIe enabled in config.txt and an M.2 HAT or base board attached, you can boot from and run an NVMe SSD exactly like a desktop.
How to know if NVMe SSD is faulty?
Run sudo smartctl -a /dev/nvme0 and look at the critical warning field, the percentage used, and the media and data integrity errors. Any non-zero value under critical warnings, repeated I/O errors in dmesg, or a drive that disappears from lsblk while still showing in lspci points to a failing drive or a flaky link rather than a controller bug.
How to fix Phison controller NVMe issues?
Update the Pi bootloader with sudo rpi-eeprom-update -a, force PCIe Gen 2 in /boot/firmware/config.txt with dtparam=pciex1_gen=2, reseat the FPC cable, and confirm the SSD firmware is current using the vendor utility on a host PC. If the controller is on the confirmed-incompatible list with no firmware fix, replace the drive.
How to update EEPROM on Raspberry Pi 5?
Boot from a working microSD card running Raspberry Pi OS Bookworm or later, then run sudo apt update, sudo apt full-upgrade -y, and sudo rpi-eeprom-update -a. Reboot and verify with sudo rpi-eeprom-config. You want a release date of March 2024 or newer for best NVMe compatibility.
Conclusion
Diagnosing Raspberry Pi 5 NVMe compatibility issues and Phison controller problems comes down to a small handful of causes: outdated Pi bootloader firmware, Phison controllers that mis-handle PCIe link states, weak power supplies, and loose FPC cables. Run the diagnostic flow from the top, identify the controller in your SSD, and pick the SSD from the compatible list above if your current drive keeps misbehaving. Most of the fixes are software-side and free, and the rest are a small investment in a known-good drive. The Raspberry Pi community continues to share new compatibility data in 2026, so check the linked GitHub issue and wiki pages before buying your next NVMe for the Pi.
1 thought on “Diagnosing Raspberry Pi 5 NVMe Compatibility Issues (September 2026)”