Testing Cytron MAKERDISK M.2 NVMe SSDs on Raspberry Pi 5 with GEEKWORM X1001 and Waveshare M.2 PCIe HAT+

Cytron has sent us a few of their MAKERDISK NVMe SSDs preloaded with Raspberry Pi OS so that we can test them on a Raspberry Pi 5 SBC, either with a GEEKWORM X1001 or Waveshare M.2 PCIe HAT+ add-on boards both of which were also provided by the company.

Ever since the first M.2 PCIe HATs for the Raspberry Pi 5 were released, we knew Raspberry Pi Limited was working on its own model, and based on some Twitter/X “rumors” (with photos) the launch of the official M.2 HAT+ should be just around the corner. So it’s the perfect timing to test some SSDs on the Raspberry Pi 5 even though I’ve yet to get the official HAT+

MAKERDISK M.2 NVMe SSD Raspberry Pi 5 review

Cytron “MAKERDISK” package unboxing

The Malaysian company sent me a kit with everything I needed to get started, minus the Raspberry Pi 5 I already owned.

Cytron MakerDisk M.2 NVMe SSD GEEKWORM X1001 Waveshare HAT PCIE 2242 unboxing

This includes 128GB or 256GB NVMe 2242 M-Key SSDs, 128GB, 256GB, and 512GB 2280 M-Key SSDs, the GEEKWORM X1001 HAT kit, and the Waveshare M.2 PCIe HAT+ kit.

Cytron MAKERDISK M.2 2242 NVMe SSD

The 128 GB  2240 M.2 SSD is rated 1700MB/s (read) and 600 MB/s (write), while the 256 GB can achieve up to 2250MB/s read and 1040MB/s write speeds.

Cytron MAKERDISK M.2 2280 NVMe SSD

The read and write speeds for the M.2 2280 SSDs are as follows:

  • 128GB – 1,800 MB/s, 560 MB/s
  • 256GB – 2,050 MB/s, 1,000 MB/s
  • 512GB – 2,050 MB/s, 1,700MB/s

Since we’ll be connecting those to the PCIe Gen2 x1 or PCIe Gen3 x1 interface of the Raspberry Pi 5, those speeds won’t matter that much as the PCIe interface will be the bottleneck

Waveshare PCIe to M.2 HAT+
Waveshare’s PCIe to M.2 HAT+ board comes with a 40mm 16-pin PCIe FPC cable, a 40-pin female to male header, and some screws and standoffs, plus bits for people wanting to use a shorter 2230 SSD.  You’ll find the hardware and software documentation in the Wiki.

GEEKWORM X1001 unboxing

The more compact GEEKWORM X1001 board is more versatile as it can support 2230, 2242, 2260, and 2280 SSDs. The included PCIe FPC does not quite seem up to specs (but it does the job), and the package also comes with assembly instructions and a small bag with standoffs and screws. Again you’ll find the documentation on the company’s website.

HAT and SSD assembly with Raspberry Pi 5

I started with the assembly of the Waveshare PCIe to M.2 HAT+ without reading the documentation. It turns out it was not such a good idea.

Waveshare PCIe M.2 HAT+ assembly

I initially installed the female-to-male header to the Raspberry Pi 5 which makes it really difficult to install the HAT especially since the pins on the header were not perfectly aligned. So I had to remove it, and instead insert it to the HAT before connecting it to the Pi. Installing the M.2 SSD was straightforward.

Waveshare PCIe M.2 HAT+ female header

When installing the flat cable we must make sure that the black ends are oriented properly, and after assembly was complete it looks as shown below.

Cytron MAKERDISK 128GB M.2 2240 NVMe SSD Raspberry Pi 5
The cable is connected wrongly above as the white arrow should be close to the PWR LED

But that’s actually wrong, as users also have to make sure the white arrow is installed close to the PWR LED as shown below.

Waveshare M.2 PCIe HAT FPC cable connection
PCIe FPC cable connected correctly with the white arrow on the cable close to the PWR LED

So I had to flip the cable as shown above and the SSD could be detected.

The GEEKWORM X1001 is much easier to install. Insert the SSD and the flat cable as shown below.

GEEKWORM X1001 NVMe SSD installation

Finally install the three standoffs (note they are slightly higher than the ones provided for the Waveshare HAT),  secure the board with three screws, and insert the other end of the cable to the PCIe connector on the Raspberry Pi 5.

GEEKWORM X1001 MAKERDISK M.2 2280 NVMe SSD

GEEKWORM X1001 Raspberry Pi 5 FPC cable installation

It’s also much easier to remove than the Waveshare HAT+…

Booting Raspberry Pi OS from MAKERDISK SSD

One advantage of MAKERDISK M.2 NVMe SSD is that they are preloaded with Raspberry Pi OS, so you can just connect the drive, and Raspberry Pi OS will automatically boot without having to configure anything. That’s the theory at least, as it did not work once it met CNX Software’s test environment…

MAKERDISK NVMe SSD Raspberry Pi 5 boot fail

That board was sent to us by Raspberry Pi Limited right after the Pi 5 was announced, and it had been a while since I had not used it, let alone upgraded it. So I thought the firmware might have been too old.

So I booted the board with a microSD card, and checked the firmware version.


then upgraded the system and firmware with a full upgrade:


The firmware should now be the latest:


I took the opportunity to check the 128GB M.2 NVMe SSD was detected, and it was:


But after shutting down the Raspberry Pi 5, and removing the microSD card, the boot would still not complete with the system unable to find any bootable device. So I contacted Cytron, and they told me they already had tested it with several Raspberry Pi 5 boards and it worked out of the box without having to set up anything.

The Raspberry Pi documentation is pretty much garbage since it’s unnecessarily made complicated, but I found a solution in the aforelinked Waveshare wiki that clearly explains we can enable SSD Boot mode by changing the BOOT_ORDER value to 0xf416 (it was set to 0xf41):


I could finally boot the system from the SSD, and go through the setup wizard to configure the language, set up a username and password, and let the system automatically update itself to the latest version. The command below shows the rootfs is in an NVMe device:


I guess that means if you have recently purchased a Raspberry Pi 5 SBC, it should work just fine without doing anything, but if you’ve got an older board, you may need to update the EEPROM config like I did above.

MAKERDISK NVMe SSD performance testing

We’ll need to compile iozone from source since iozone3 is not available as a package:


I started testing the 2280 SSDs using SupTronics/GEEKWORK X1001 HAT.

M.2 2280 SSD 128GB:


That’s 434 MB/s read speed and 395 MB/s write speed in PCIe Gen2 mode.

Let’s switch to the “not-certified-to-work” PCIe Gen3 mode by adding the following line to /boot/firmware/config.txt before the [cm4] section:


and reboot the system.

It’s indeed faster than before


855 MB/s and 761 MB/s sequential read/write speeds respectively. It’s quite far from the theoretical performance of the SSD itself, but that’s the best the Raspberry Pi 5 can do.

We can check the link speed with the command lspci:


We can also double-check the PCIe link speed by looking at the kernel log:


If I revert to PCIe Gen2, the log looks like this:


Here are the results for the 256 GB M.2 2280 SSD

PCIe Gen2:


PCIe Gen3:


… and for the 512 GB M.2 2280 SSD

PCIe Gen2:


PCIe Gen3:


Since the Raspberry Pi 5 is the bottleneck here, I also installed the 512GB M.2 2280 NVMe SSD in the Rockchip RK3588-powered Radxa Rock 5B with a faster PCIe Gen 3 x4 interface.

MAKERDISK 512GB SSD Radxa Rock 5B

It’s properly detected along with the eMMC flash that boots the OS:


iozone3 results:


The read performance is much better (1.74GB/s), but something is odd about the write performance (213 MB/s), and running iozone3 twice yields the same results. Random I/Os are also a bit slower. Maybe some settings need to be adjusted to extract more performance.

The table below summarizes the results for the M.2 2280 SSDs.

ReadWriteRandom Read (4K)Random Write (4K)
128GB (Pi 5 - PCIe Gen2)434707 KB/s395667 KB/s53712 KB/s194819 KB/s
128GB (Pi 5 - PCIe Gen3)855845 KB/s761527 KB/s58080 KB/s290993 KB/s
256GB (Pi 5 - PCIe Gen2)433655 KB/s399095 KB/s54679 KB/s191177 KB/s
256GB (Pi 5 - PCIe Gen3)846389 KB/s759437 KB/s58135 KB/s276242 KB/s
512GB (Pi 5 - PCIe Gen2)436125 KB/s400709 KB/s55116 KB/s196694 KB/s
512GB (Pi 5 - PCIe Gen3)843413 KB/s771841 KB/s58657 KB/s291082 KB/s
512GB (Rock 5)1747128 KB/s213432 KB/s36004 KB/s87266 KB/s

Let’s now switch the 2242 SSDs using the Waveshare HAT+ board, starting with the 128GB SSD

PCIe Gen2:


PCIe Gen3:


256GB 2242 SSD results

PCIe Gen2:


PCIe Gen3:


The 128GB and 256GB SSDs have about the same results due to the Raspberry Pi 5 PCIe interface being the bottleneck.

Raspberry Pi 5 temperature with GEEKWORM/Waveshare HATs.

Both HATs can be installed on top of the Raspberry Pi 5 active cooler, but they do block the airflow to some extent, especially the Waveshare PCIe to M.2 HAT+, so I’ve decided to check the temperature while running a stress test on the CPU and SSD.

256GB SSD temperature test with Waveshare HAT+

I ran the following two commands at the same time…


… and monitored the CPU temperature with the RPI-monitor program.

Waveshare M.2 PCIe HAT Temperature Chart

The maximum was around 67-69C. You’ll also find a thermal image taken with the Xtherm II TS2+ thermal imager for smartphones below. It shows the SSD’s highest temperature is 52.9°C after several minutes.

Waveshare M.2 PCIe HAT Raspberry Pi 5 thermal image

256GB SSD temperature with GEEKWORM X1001 HAT

I repeated the same test with the GEEKWORM X1001, but first I had to install 256GB M.2 2240 SSD. The FAQ in the aforelinked wiki explains:

How to fix the 2230/2242/2260 SSD?
A: The X1000 does not reserve the nut column to fix the 2230/2242/2260 SSD. Based on our test, you can secure the 2230/2242/2260 SSD using an M2*6mm screw and 2pcs M2 nuts. Place one M2 nut under the SSD, then use the M2*6mm screw and the other M2 nut to fasten the SSD.

That’s nice, but I don’t happen to have spare M.2 nuts with me, so instead I use the adapters and screws from the Waveshare kit, and it did the job.

GEEKWORM X1001 M.2 2242 SSD spacer

Raspberry Pi OS X1001 MAKERDISK 256GB NVMe SSD

Then I went ahead and ran the same stress and iozone commands.

GEEKWORM X1001 M.2 PCIe HAT Temperature Chart

The temperature was around 65-67°C. It’s cooler, but not significantly so. What’s good is that CPU throttling does not happen at all with either HAT and the active cooler does its job even when covered by a HAT. All tests were done in a room with an ambient temperature of around 30-32°C as my undersized air conditioner struggled to keep the room cool with an outdoor temperature of around 42°C… Here’s the thermal image with the GEEKWORM X1001 and the 256GB M.2 2242 SSD which shows the SSD is quite warmer at 63.4°C.

GEEKWORM X1001 M.2 PCIe HAT Raspberry Pi 5 thermal image

Conclusion

Cytron MAKERDISK M.2 NVMe SSDs work fine with the Raspberry Pi 5 using either GEEKWORM X1001 or Waveshare PCIE to M.2 HAT+ in PCIe Gen2 x1 (5GT/s) or PCIe Gen3 x1 (8GT/s)  modes. The performance is about the same for all models since the Raspberry Pi 5’s PCIe interface is the bottleneck here even when configured as PCIe 3.0 x1.

The MAKERDISK NVMe SSDs are really convenient as they come pre-loaded with Raspberry Pi OS, so it will be a plug-and-play experience for most people. It was not quite the case for my board, probably because I got an early sample of the Raspberry Pi 5, and the EEPROM was not configured to boot NVMe by default, even after I upgraded the firmware.

Cytron is selling the M.2 NVMe 2280 M-Key MAKERDISK SSD for $37.25 to $81 depending on the selected capacity, and the M.2 NVMe 2242 MAKERDISK SSD for $32.50 (256GB). All come pre-loaded with a recent version of Raspberry Pi OS. Both HAT tested in the review can also be bought on Cytron, and alternatively, you’ll also find the GEEKWORM X1001 on Amazon ($15), and the Waveshare PCIe to M.2 HAT+ on Amazon ($14.60) or Aliexpress ($15.65).

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK 5 ITX RK3588 mini-ITX motherboard
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.
6 Comments
oldest
newest
tkaiser
tkaiser
1 month ago

> We’ll need to compile iozone from source since iozone3 is not available as a package

The package is in the ‘non-free’ repo that needs to be added first. And when testing PCIe on the RPi I would take care of the ASPM settings (that defaulted to powersave the last time I checked and harms performance)

willmore
willmore
1 month ago

I just used your link to pick up two of the Geekworm adapters. They should be here in a few days. I’ll try them with a few drives I have lying around. I have a 4GB and an 8GB Pi5. The 4 was purchased early on and the 8 just recently, so I’ll see if I can experience your issues with startup. I don’t think I’ve had the 4 online for a while, so it should still have relatively old firmware.

willmore
willmore
1 month ago

My older board had firmware “2023/10/30 16:45:10 30de0ba5 (release) (embedded)” and didn’t see the nvme. I updated it to “2024/02/16 15:28:41 4c845bd3 (release) (embedded)”

willmore
willmore
1 month ago

Ahh, I did not test that. I’m not interested in booting from NVME, but maybe I should be. It’ll free up some uSD cards–and I seem to be running low on them recently.

svardi
svardi
27 days ago

Raspberry Pi 5 can’t update EEPROM
you need restart every time

Khadas VIM4 SBC