#raspberry-pi #pi5 #cm5 #sata #nas #storage #pcie # Overview Every practical way to attach SATA drives to a Raspberry Pi 5 or a CM5 on the official IO Board, with a hard line drawn between products that have been **independently tested** and products that are just vendor listings. The headline finding: **exactly one SATA product for the Pi 5 has real third-party hands-on testing — the Radxa Penta SATA HAT.** Everything else in this category, including the Waveshare 2-CH HAT, has zero independent reviews. Buying those means beta-testing without a safety net. Three routes exist: 1. **Native PCIe SATA HAT** — a board with a JMB58x/ASM11xx bridge on the Pi 5's 16-pin PCIe FFC. Fastest, and where the reviewed product lives. 2. **M.2-to-SATA card** — an ASM1166 or JMB585 M.2 card in a 2280-capable M.2 HAT, or directly in the **CM5 IO Board's M.2 slot**. Same silicon, different packaging. 3. **USB 3 to SATA** — mature and well documented, but hard-capped around 400 MB/s. Related: [[Raspberry Pi CM5 IO Board Rev 2]] · [[Raspberry Pi CM5 Carrier Board Landscape]] · [[CM5 Carrier Boards with NVMe]] # Design ## The bandwidth ceiling is the whole story Pi 5 and CM5 both expose **a single PCIe x1 lane**. Everything downstream shares it. | Link | Real-world ceiling | Source | |---|---|---| | Gen 2 x1 (default, certified) | **~450 MB/s** | Geerling, NVMe measured | | Gen 3 x1 (`dtparam=pciex1_gen=3`, unofficial) | **~900 MB/s** | Same test, same drive | Controller chips are not the limit — JMB582 tops out ~850 MB/s, JMB585 ~1700 MB/s (Gen3 x2), ASM1166 16 Gbps. All of them exceed what the Pi's one lane can deliver. **The Pi is the bottleneck the moment you exceed about two drives.** Practical arithmetic: - **Spinning 3.5" drives** (100–200 MB/s each): Gen 2 saturates at roughly 3 drives running flat out; Gen 3 gets you to ~5–6. - **SATA SSDs** (~550 MB/s each): you hit the ceiling at 2–3 drives regardless of generation. - Geerling measured **~900 MB/s across 4× 8TB SSDs in RAID 0** on the Radxa Penta at Gen 3 — that is the lane saturated, not the drives. ## …but the network is the *actual* bottleneck Same Geerling rig, over Samba on the Pi's built-in gigabit: **~96 MB/s write, ~122 MB/s read.** For a NAS that's the number that matters. The PCIe-vs-USB SATA difference (900 vs 400 MB/s local) mostly disappears behind 1 GbE. It only matters for local work, or if you add 2.5GbE+. Worth weighing before spending on the fast route. ## Power **The Pi cannot power SATA drives.** There is no 12 V rail. Every real build supplies drives separately: - **12 V barrel jack into the HAT**, which typically back-feeds 5 V to the Pi over GPIO — one supply for the whole thing. This is the common arrangement. - **ATX / SFX 4-pin Molex** for heavier multi-drive setups. - Radxa's guidance for 3.5" drives: check the drive's **spin-up inrush current**, not steady-state, and prefer drives under ~1.7 A peak per port. Inrush is what kills these builds. Measured: Pi 5 + Radxa Penta + 4× 2.5" SSDs on a 12 V 3 A (36 W) adapter = **~9 W idle, ~12 W load** (The DIY Life). Add 5–10 W per 3.5" spinner, more at spin-up. # Resources ## The board you asked about **[Waveshare PCIe TO 2-CH SATA HAT+](https://www.pishop.us/product/pcie-to-2-ch-sata-hat-for-raspberry-pi-5-sata-compatible-onboard-eeprom-led-indicators-plug-and-play/)** — Waveshare 31882, PiShop SKU 1655-1, **$24.95**, in stock. - **JMB582** bridge, 2× SATA 3.0 (6 Gbps), PCIe Gen3 x1 - 16-pin PCIe FFC, HAT+ standard with onboard EEPROM for HAT ID, dual activity LEDs - AHCI 1.2, NCQ, L0s/L1 power saving - Power: 4-pin JST XH (12 V / 5 V) **or** barrel jack — supports 2.5" and 3.5" - Ships with 2 SATA adapter cables, the 16-pin PCIe cable, and screws - Waveshare direct is **$17.99**; Amazon ~$26.99 **Independent reviews: none found.** PiShop shows 0 reviews. [CNX Software covered it in July 2025](https://www.cnx-software.com/2025/07/14/waveshare-sata-hat-adds-two-sata-3-0-ports-to-raspberry-pi-5/) but that's a spec rewrite, not a hands-on — and a commenter there asks whether anyone knows a case that fits, suggesting nobody had built one yet. It is **not** in [Jeff Geerling's PCIe database](https://pipci.jeffgeerling.com/hats). No YouTube teardown, no forum build log. It is a sensible-looking design at a fair price with real HAT+ compliance. It is also completely untested in public. > The **other** board you first linked — [PCIe To Gigabit ETH USB3.2 HAT+](https://www.pishop.us/product/pcie-to-gigabit-eth-usb3-2-hat-for-raspberry-pi-5/), Waveshare 27541, $36.95 — is **not SATA at all**. It's a VL805 PCIe→USB 3.2 hub plus an RTL8153B USB→GbE chip. The Ethernet rides USB, so the NIC and all three USB ports share one Gen 2 lane (~4 Gbps). Also zero independent reviews; two real forum threads flag that its USB-C input doesn't back-feed the Pi, and that `eth0` sometimes gets assigned to the HAT's NIC instead of the onboard one. Currently "Notify Me" at PiShop. ## Native PCIe SATA HATs for Pi 5 | Board | Chipset | Ports | Price | Reviewed? | |---|---|---|---|---| | **[Radxa Penta SATA HAT](https://radxa.com/products/accessories/penta-sata-hat/)** | JMB585 | 4 + 1 eSATA | **$45** | **Yes — the only one** | | [Waveshare 2-CH SATA HAT+](https://www.pishop.us/product/pcie-to-2-ch-sata-hat-for-raspberry-pi-5-sata-compatible-onboard-eeprom-led-indicators-plug-and-play/) | JMB582 | 2 | $24.95 | None found | | [Geekworm X1009](https://geekworm.com/products/x1009) | JMB585 | 5 | $60 | None found | | [52Pi / GeeekPi S021](https://wiki.52pi.com/index.php?title=EP-0242) (EP-0242) | ==unconfirmed== | 2 | ==unconfirmed== | None found | | [52Pi / GeeekPi 5-Bay](https://52pi.com/products/52pi-5-bay-sata-storage-expansion-board-for-raspberry-pi-5-with-4-onboard-sata-ports-and-1-external-esata-port-12v-dc-5525-4-pin-molex) | ==unconfirmed== | 4 + 1 eSATA | ==unconfirmed== | None found | ### Radxa Penta SATA HAT — the one with a track record $45, JMB585, 4 SATA plus a 5th via eSATA, 16-pin PCIe FFC, 12 V barrel or ATX Molex, back-feeds 5 V to the Pi over GPIO. Handles 3.5" drives (needs ~12 V / 6 A for four spinners plus eSATA). Measured by Geerling: **6–8 W idle, 10–16 W load, ~800–900 MB/s sequential read across 4 SSDs in RAID 0** at Gen 3. Coverage: - [Jeff Geerling — Radxa's SATA HAT makes compact Pi 5 NAS](https://www.jeffgeerling.com/blog/2024/radxas-sata-hat-makes-compact-pi-5-nas/) + [benchmark log, issue #615](https://github.com/geerlingguy/raspberry-pi-pcie-devices/issues/615) - [pipci database entry](https://pipci.jeffgeerling.com/hats/radxa-penta-sata-hat.html) - [The DIY Life — I Built A 4-Bay Raspberry Pi 5 Based NAS](https://the-diy-life.com/i-built-a-4-bay-raspberry-pi-5-based-nas/) — full BOM, $165 total, OMV setup - [The DIY Life — 4-bay 3.5" version with 3D-printed enclosure](https://the-diy-life.com/building-a-4-bay-3-5-nas-with-a-raspberry-pi-5-and-3d-printed-enclosure/) - [Open Source Is Fun — step-by-step build](https://opensourceisfun.substack.com/p/building-your-own-nas-or-nextcloud) — real `lspci -vvvv` output confirming the 8 GT/s link - [CNX Software announcement](https://www.cnx-software.com/2024/03/21/radxa-penta-sata-hat-adds-up-to-five-sata-drives-to-the-raspberry-pi-5-for-nas-applications/) ## M.2-to-SATA cards Same chips, sold as M.2 M-key cards. Relevant because the **CM5 IO Board has an M.2 M-key slot** that officially takes 2230 / 2242 / 2260 / **2280**. > **Fit trap:** the official [Raspberry Pi M.2 HAT+](https://www.pishop.us/product/raspberry-pi-m-2-hat-for-pi-5/) ($12) only accepts **2230/2242**. Nearly every real SATA M.2 card is a **2280** board, so it physically will not fit. On a Pi 5 you need a 2280-capable third-party HAT (Pimoroni NVMe Base, Geekworm X1004/X1011, 52Pi N04). On the CM5 IO Board it just fits. > **Port-multiplier trap:** some cheap "M.2 to SATA" cards are SATA **port multipliers** that expect a SATA controller already behind the M.2 slot (as on some laptops). The Pi's M.2 slot carries only PCIe, so those will never work. Buy only cards that explicitly name an **ASM1166 / JMB585 / JMB582 / ASM1061 PCIe** controller. From [Jeff Geerling's PCIe database](https://pipci.jeffgeerling.com/) — the authoritative compatibility registry: | Card | CM4 | Pi 5 | Notes | |---|---|---|---| | **[IOCrest M.2 to 5-port SATA, JMB585](https://pipci.jeffgeerling.com/cards_storage/iocrest-jmb585-m2-sata.html)** | **Full** | **Full** | The only unambiguous "works on both" entry | | [IOCrest JMB585 standalone card](https://pipci.jeffgeerling.com/cards_storage/iocrest-sata-5-port-jmb585.html) | Full | Untested | ~395–400 MiB/s RAID5 parity, ~350 MiB/s copy (CM4-era) | | [IOCrest JMB582 2-port](https://pipci.jeffgeerling.com/cards_storage/iocrest-sata-2-port-jmb582.html) | Full | Currently testing | | | [ASM1061 4-port (2 active)](https://pipci.jeffgeerling.com/cards_storage/asm1061-2-port-adapter.html) | Testing | Untested | | | [Syba/IOCrest ASM1064 4-port](https://pipci.jeffgeerling.com/cards_storage/syba-sata-4-port-non-raid-asm1064.html) | Full | Untested | | | **ASM1166 6-port** | — | — | **No entry in the database at all** — see Troubleshooting | ==The database has internal inconsistencies (e.g. "driver required: no" for the M.2 JMB585 but "yes" for the ostensibly identical standalone card). Treat it as a strong signal, not gospel.== ASM1166 cards are sold under IOCrest, RIITOP, 10Gtek, Flylin and a long tail of generic Amazon/eBay rebrands. Six ports for ~$30 is tempting; read Troubleshooting first. ## CM5-specific SATA carriers If the target is a CM5 rather than a Pi 5, these skip the HAT entirely — the module plugs straight into a board with SATA on it. Full detail in [[Raspberry Pi CM5 Carrier Board Landscape]]. | Board | Ports | Price | Reviewed? | |---|---|---|---| | [Radxa Taco v1.61](https://radxa.com/products/io-board/taco/) | 5 SATA + 2 M.2 | $65 | Liliputing, LinuxGizmos | | [Geekworm XNAS1](https://geekworm.com/products/xnas1) | 4 × 3.5" bays | $99 | None found | | [Geekworm X1509](https://geekworm.com/products/x1509) | **8 SATA** | $89.90 | None found | | [Exaviz Cruiser](https://www.exaviz.com/product-page/cruiser-carrier-board-v1-0) | 2 SATA + PoE switch | $99–149 | Hackster | | [Axzez / Exaviz Interceptor v2](https://www.exaviz.com/interceptor) | 5 SATA + 4 GbE | $79–99 | Geerling (CM4), Electronics-Lab | Note: the Geekworm XNAS1 and X1509 both explicitly **cannot boot from SATA** — the OS has to live on eMMC or microSD. ## USB-to-SATA Mature, cheap, well documented, and capped around **400 MB/s** no matter how many drives. Roughly half the native PCIe route. Chipset guidance — note that **ASM1351 and JMS578 are SATA bridges; JMS583 and RTL9210 are NVMe bridges**, a distinction a lot of listings blur: | Chipset | Verdict | |---|---| | ASMedia ASM1153 / ASM1351 | Mature, good Pi compatibility, generally the safe pick | | JMicron JMS578 | Works, but a long history of needing firmware updates and/or quirks | | JMicron JMS583 (NVMe) | Community advice: avoid — runs hot | | Realtek RTL9210B (NVMe) | Preferred over JMS583 | Known-good adapters per [James Chambers' community list](https://jamesachambers.com/fixing-storage-adapters-for-raspberry-pi-via-firmware-updates/): **StarTech USB312SAT3CB** (~$18–21, UASP out of the box) is the usual recommendation. Sabrent and ORICO have the worst track records but are often fixable with JMicron's firmware tool. **Dead ends to avoid:** - **Radxa Quad / Dual SATA HAT** — SATA→USB→PCIe, built for the Pi 4's USB layout. **Does not work on Pi 5.** The Penta is the successor. - **Argon EON** — 4-bay USB 3.0 NAS case, Pi 4 only, **discontinued**, no Pi 5 version ever shipped. Reviewed at ~111 MB/s max. Argon's own forum has a user building a Radxa Penta setup instead. **Naming warning:** *GeeekPi* (a brand of 52Pi Technology) and *Geekworm* are different companies with confusingly similar model numbering. This has caused real buyer confusion — [see this forum thread](https://forums.raspberrypi.com/viewtopic.php?t=311879). # Configuration ## config.txt for a PCIe SATA HAT ```ini # /boot/firmware/config.txt # Enable the PCIe x1 lane dtparam=pciex1 # Optional: force Gen 3 (~900 MB/s). Unofficial, generally stable, verify with a burn-in. dtparam=pciex1_gen=3 # Required for JMB585-based boards (Radxa Penta, Geekworm X1009) on recent kernels dtoverlay=pcie-32bit-dma-pi5 # Listed on pipci for the IOCrest M.2 JMB585 dtoverlay=pciex1-compat-pi5,no-mip ``` Confirm the link came up at the speed you asked for: ```bash lspci -vvvv | grep -i "LnkSta" # want 8GT/s for Gen3, 5GT/s for Gen2 lsblk ``` ## USB-SATA: check for UASP, then quirk if needed UASP is worth **+50% sequential and +35% random read** over plain bulk transport ([Geerling](https://www.jeffgeerling.com/blog/2020/uasp-makes-raspberry-pi-4-disk-io-50-faster/)), and draws 8% less peak power. Externally identical enclosures can differ internally — Geerling found two Inateck cases with the same shell and one letter's difference in the model number. ```bash lsusb -t # driver "uas" = UASP. "usb-storage" = slow bulk-only path. lsusb # get the vendor:product ID, e.g. 174c:55aa ``` If a UAS adapter is flaky — resets, drives dropping — force it back to bulk transport. Append to `/boot/firmware/cmdline.txt`, **on the one existing line, no line breaks**: ``` usb-storage.quirks=174c:55aa:u ``` Verify: ```bash sudo dmesg | grep -i usb # expect "UAS is blacklisted for this device, using usb-storage instead" ``` This trades throughput for reliability. Use it only when UAS is actually misbehaving. # Troubleshooting ## JMB585 — 32-bit DMA errata (affects Radxa Penta and Geekworm X1009) A Linux kernel change (6.12.87+ / 6.18.29+) **forces 32-bit DMA on the JMB585** after observed data corruption with 64-bit DMA. Until you add the overlay, drives simply don't appear. ```ini dtoverlay=pcie-32bit-dma-pi5 ``` Documented in [Radxa's own docs](https://docs.radxa.com/en/accessories/storage/penta-sata-hat/penta-for-rpi5) and an [OpenMediaVault PSA thread](https://forum.openmediavault.org/index.php?thread/59049-psa-rpi5-users-of-the-radxa-sata-hat-now-need-to-use-dtoverlay-pcie-32bit-dma-pi/). Geekworm's own wiki confirms the X1009 uses the same chip and needs the same fix. This is a correctness bug, not a performance tweak — don't skip it. Also reported on the Penta: the controller runs hot (60 °C+), and it's read-optimised rather than balanced. ## ASM1166 — two separate problems **1. Boot hang / controller unavailable on Pi 5.** [raspberrypi/linux#6214](https://github.com/raspberrypi/linux/issues/6214), open since June 2024: `ahci: AHCI controller unavailable!` and repeating `SATA link down (SStatus FFFFFFFF)`, multi-minute boot hangs, abnormally slow `lspci`. Community fix: decompile `/boot/firmware/bcm2712-rpi-5-b.dtb`, and inside the `pcie@110000` node set `msi-parent` to that node's own `phandle`, recompile, reboot. Cross-referenced in [geerlingguy/raspberry-pi-pcie-devices#600](https://github.com/geerlingguy/raspberry-pi-pcie-devices/issues/600). **2. Shipped firmware is often years old.** [Bennett Piater documented](https://bennett.piater.name/blog/linux/2025/06/13/fixing-asm1166-hba-hot-plug/) a card shipping with firmware `221118-0048-00` that broke SATA hot-plug; reflashing to `221118-0000-00` fixed it. Radxa hosts [a flashing tool](https://dl.radxa.com/accessories/m2-to-hexa-sata-adapter/tools/); Silverstone's ECS06 package works too (same chip). Old firmware is also blamed for aggressive ASPM/sleep behaviour and detection failures. ==Version strings above are as reported by others; I have not verified them against a primary ASMedia source.== **Forum consensus:** ASM1062 and JMB585/JMB582 draw materially fewer complaints on Pi than ASM1166. That's anecdote, not a controlled test, but it's consistent across threads. ## Other gotchas - **ASPM** — `pcie_aspm=off` in `cmdline.txt` has fixed kernel panics and quieted link-error spam for some, but it also disables ASPM on the internal x4 link to RP1 and **measurably raises idle power**. Last resort. - **Kernel regressions are real.** [raspberrypi/linux#5659](https://github.com/raspberrypi/linux/issues/5659) — SATA PCIe cards that worked on CM4 broke after a Bookworm kernel update. **Pin kernel versions on anything holding data.** - **Gen 3 is unofficial.** Geerling sees occasional link errors; forum reports of AER/bus errors that vanish when the parameter is removed. Have a Gen 2 fallback and burn-in before trusting it. - **`eth0` renaming** — if a PCIe NIC is also in the build, the HAT's interface can steal `eth0` from the onboard one. Pin names with a udev or systemd-networkd link rule. # Decisions - **If it has to work: Radxa Penta SATA HAT, $45.** It is the only Pi 5 SATA product with published benchmarks, published power figures, a documented errata *and* a documented fix. Everything else is unmapped territory. - **The Waveshare 2-CH at $24.95 is a reasonable gamble, not a safe buy.** Good chip (JMB582 is well regarded), proper HAT+ with EEPROM, flexible power, fair price — and nobody has publicly tested one. For two drives it's half the cost of the Penta. Accept that you'd be the reviewer. - **Skip ASM1166 unless six ports are non-negotiable.** Two open, unresolved problem classes and no entry in the compatibility database. JMB585 has one known errata with a one-line fix. - **On a CM5, use the M.2 slot directly** — it takes 2280, so an IOCrest JMB585 M.2 card (the only "Full/Full" entry in pipci) drops straight in without a HAT. Cleaner than the Pi 5 route. - **Don't buy the official M.2 HAT+ for a SATA card.** 2230/2242 only; SATA cards are 2280. - **Be honest about the bottleneck.** If this ends up serving files over 1 GbE, you'll see ~100–120 MB/s regardless of route. USB-SATA at 400 MB/s is already 3× faster than the network. The PCIe upgrade only pays off for local work or 2.5GbE+. - **Budget a separate 12 V supply** and size it for spin-up inrush, not steady-state draw. # TODO - ==Decide Pi 5 vs CM5 for this build — the CM5 IO Board's 2280-capable M.2 slot is a cleaner SATA path than any Pi 5 HAT, and the Radxa Taco at $65 beats assembling a Pi 5 + Penta + case== - ==If the Waveshare 2-CH gets bought, write up the results — there is genuinely no public data on it and the note should be updated either way== - ==Check current kernel version against the JMB585 32-bit DMA overlay requirement before assuming drives will appear== - ==Decide 2.5" SSD vs 3.5" spinner before picking a PSU — inrush current drives the sizing== - ==Test Gen 3 with a proper burn-in (badblocks or fio for several hours) before trusting it with data; keep a Gen 2 fallback in config.txt== - ==Confirm whether the target is NAS-over-network (in which case 1 GbE caps everything at ~110 MB/s and the cheap route is fine) or local storage== - ==Pin the kernel version once the array holds real data — there is precedent for updates breaking working SATA cards== # References - [Jeff Geerling — Radxa's SATA HAT makes compact Pi 5 NAS](https://www.jeffgeerling.com/blog/2024/radxas-sata-hat-makes-compact-pi-5-nas/) — the single most useful source in this note - [Jeff Geerling — Raspberry Pi PCIe Database](https://pipci.jeffgeerling.com/) — the compatibility registry - [Jeff Geerling — Forcing PCIe Gen 3.0 speeds on Pi 5](https://www.jeffgeerling.com/blog/2023/forcing-pci-express-gen-30-speeds-on-pi-5/) - [Jeff Geerling — UASP makes Pi disk IO 50% faster](https://www.jeffgeerling.com/blog/2020/uasp-makes-raspberry-pi-4-disk-io-50-faster/) - [Radxa Penta SATA HAT docs for Pi 5](https://docs.radxa.com/en/accessories/storage/penta-sata-hat/penta-for-rpi5) - [James Chambers — Fixing storage adapters for Pi via firmware updates](https://jamesachambers.com/fixing-storage-adapters-for-raspberry-pi-via-firmware-updates/) - [Bennett Piater — Fixing ASM1166 HBA hot-plug](https://bennett.piater.name/blog/linux/2025/06/13/fixing-asm1166-hba-hot-plug/) - [raspberrypi/linux#6214 — ASM1166 on Pi 5](https://github.com/raspberrypi/linux/issues/6214) - [The DIY Life — 4-bay Pi 5 NAS build](https://the-diy-life.com/i-built-a-4-bay-raspberry-pi-5-based-nas/) - [Waveshare PCIe TO 2-CH SATA HAT+ wiki](https://www.waveshare.com/wiki/PCIe_TO_2-CH_SATA_HAT+) - [[Raspberry Pi CM5 Carrier Board Landscape]] · [[Raspberry Pi CM5 IO Board Rev 2]] · [[CM5 Carrier Boards with NVMe]] · [[Raspberry Pi CM5 Cooling]]