Argon FortyReviews

Argon ONE NVMe Board – Fixed!

I reviewed this expansion board last month in my post: Argon ONE NVMe Board (maybe) Slower than SATA, where I discovered that some boards have shipped running the incorrect firmware leading to poor performance. Due to the Chinese New Year holidays resolving this issue with the Argon Forty team has taken longer than desired.

Joseph Zapanta, COO at Argon40 Technologies Inc has confirmed:

  • Early batches of boards had the correct firmware but an incorrect VendorID, VID: 199d instead of VID: 174c.
  • The most recent batch of boards were flashed with the wrong firmware. The boards they have on hand are being updated with the correct firmware and vendor ID. Those already out in the channel will need to updated manually, see below.
  • Argon Forty have made further changes to their quality control process to mitigate a reoccurrence of these issues.

The incorrect VendorID (VID) can impact software that has been adapted to work specifically with the ASM2362 controller chips for example smartmontools which provide SMART disk statistics including in tools like OpenMediaVault.

Updating the Argon ONE NVMe Board Firmware

Argon Forty have released the firmware, necessary flashing tools and instructions via their GitHub repository. The process is straightforward.

Step 1: Connect the board to your PC

  • You need to have an NVMe drive installed in the Argon ONE NVMe enclosure for it to be recognised.
  • Connect the board to your computer, using either a USB A plug to plug connector, or if you don’t have one you can use a USB extension cable (plug to socket cable) and use the USB adapter that comes with the board to hook it up.
USB Extension cable and adapter to make a male to male USB A cable.

Step 2: Download the files

Step 3: Prepare to flash the firmware

  • Run the flashing utility ASM236xMPTool.exe. Windows may warn that this is an unrecognised application, click more info, then Run anyway.
  • Select the Key icon, and enter the password asmedia to unlock the software.
  • Select the Folder icon and select the firmware file AS_PCIE_200811_81_00_00.bin.
  • The table at the bottom shows the currently detected device, as you can see this has the wrong firmware, VID and PID.
  • The settings in the INI file should open the utility with the correct settings. But confirm the settings are set per the screenshot.

Step 4: Flash the updated firmware

  • Press the Play button icon to start the flashing process.
  • If successful the screen will report the status as PASS.
  • The table will show the corrected VID, PID and firmware
  • Disconnect the board from your PC and reconnect it to the Raspberry Pi.
ASMedia Flashing Utility after successfully flashing new firmware

Storage Performance

NVMe storage is intended to be directly attached to the PCIe bus, with at least x4 PCIe lanes to provide the throughput the technology is capable of. The Raspberry Pi 4’s USB 3.0 ports support data rates of 5 Gbit/s (500 MB/s after encoding overhead) are going to be the limiting factor and I know I’m not going to get close to the 3300MB/s read speed of the WD Blue SN570 NVMe drive. In fact, the SATA drive performance is around the same as the maximum data rates for USB 3.0, so really there isn’t any apparent benefit from using NVMe over SATA, except that you may have some NVMe drives lying around that you might want to use on your Raspberry Pi project.

Testing Methodology

I’ve used a benchmarking script provided by Jeff Geerling to perform the testing which uses fio and iozone to measure the performance for 1MB sequential reads, 1MB random reads and writes and 4k random reads and writes. Each scenario was repeated 3 times and the results averaged.

The Raspberry Pi 32bit desktop image (2022-09-22, with latest updates as of 8th Jan 2023) was used, installed initially to an SD Card and then replicated to the other storage types using the built-in SD Card copier.

Whilst testing with other storage, the MicroSD card is removed to avoid any chance of accidentally testing the wrong storage.

Devices under test:

  • MicroSD Card – SanDisk Max Endurance 32GB
  • M.2 SSD – Kingston SA400M8/240GB
  • NVMe – WD Blue SN570 250GB
    • Argon ONE NVMe Expansion board (original/incorrect firmware)
    • Argon ONE NVMe Expansion board (updated/correct firmware)
    • Sabrent USB NVMe enclosure
Screenshot of Raspberry Pi SD Card Copier

Storage Performance Results

Focusing initially on the difference between the original/incorrect firmware and the updated firmware we can see massive improvements in performance across all of the measurements used in the test:

  • 4k random writes: 62% improvement
  • 4k random reads: 46% improvement
  • 1M random writes: 38% improvement
  • 1M random reads: 40% improvement
  • 1M sequential reads: 152% improvement

Updating the performance comparison with data from testing with the updated firmware, we can see that the Argon ONE NVMe is the highest-performing storage solution of those tested. The repeated 1M sequential read tests generated identical results, suggesting a bottleneck may have been hit during that test.

Comparing the Argon M.2 SSD board vs the NVMe board shows small gains for the NVMe version.

  • 4k random writes: 0.6% improvement
  • 4k random reads: 10.6% improvement
  • 1M random writes: 8.7% improvement
  • 1M random reads: 23.1% improvement
  • 1M sequential reads: 6.5% improvement

Power Consumption

Power consumption figures were the same as in my original testing regardless of firmware running on the board.

Trim Support

Running the command sudo fstrim -v / returns an error fstrim: /: the discard operation is not supported. So like the SATA version before it, this Argon ONE expansion board doesn’t support trim without some tweaks. Following Jeff Geerling’s guide Enabling TRIM on an external SSD on a Raspberry Pi worked, though the step to update /sys/block/sda/queue/discard_max_bytes gave an error, that step doesn’t seem to be necessary for this board, which essentially means the only change necessary is to edit /etc/udev/rules.d/10-trim.rules

ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="2362", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"

Upon rebooting the Pi fstrim now works.

pi@storage-test2:~ $ sudo fstrim -v /
/: 14.3 MiB (15032320 bytes) trimmed

Weekly automatic trimming is then enabled with the command: sudo systemctl enable fstrim.timer

Conclusion

The NVMe board with the correct firmware installed addresses most of the problems identified in the original review. The NVMe version uses more power, and therefore generates more heat. NVMe drives are normally a little more expensive than M.2 SATA in equivalent sizes. Though they do provide a small performance gain. So think this enclosure for the Argon ONE may make sense if you have a spare old NVMe drive and want to give a massive performance boost to your Raspberry Pi. If you have an M.2 SATA version of this enclosure, I don’t see value in changing to an NVMe version.

I’d like to thank Argon Forty for responding to the issues raised and taking action to address the problems.

Product Links

Amazon links are affiliate links which help support the site, where possible I’ve used links which should take you to the product in the Amazon store in your region. Links to other suppliers are included for your convenience.

13 thoughts on “Argon ONE NVMe Board – Fixed!

    • Hi, to clarify a few points: I have no relationship with ArgonForty, so they aren’t my “guys”.
      The firmware released is the “correct” firmware intended for the boards that they are shipping. To address the issue of shipping firmware intended for their SATA board with the ASM1153E controller. As you point out it may not be the latest firmware available for the ASM2362.
      As described in my previous post I did install find and installed a later version: AS_PCIE_210527_81_3A_00.bin. I’m not sure what the differences are between the versions, but the (later) firmware performed slightly worse than the firmware from ArgonForty.

      Reply
  • I’m Running latest GetUmbrel server which is based on RaspiOS. I Did the flash as instructed on windows for my “PCI ID 199d” V3.2 NVMe card succesfully. It changed id to 174c which is now correct. Trim was fixed.

    OS is still using usb-storage:
    umbrel@umbrel:~ $ sudo lsusb -tv
    /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M

    Is there a safe way to enable UAS driver?

    Reply
    • A few things to confirm:

      • Confirm you’re using the Argon M.2 NVMe version, not the M.2 SATA version
      • Can you confirm the OS is reading the PID/VID correctly, the output of lsusb should show ID 174c:2362
      • Can you check the verbose output sudo lsusb -v check that the device is claiming to support ““bInterfaceProtocol 98” in addition to “bInterfaceProtocol 80 Bulk-Only”

      In my initial troubleshooting I assumed there was an issue with the uas detection code, and so I cross compiled a kernel with some of the code commented out see: https://www.martinrowan.co.uk/2023/01/argon-one-nvme-board-slower-than-sata/

      I’m not sure how Umbrel-os builds it’s images to know what version of the kernel and drivers they are pulling in, but it could be blocking UAS for some reason. I’d expect something in the output from dmesg if that were the case.

      Reply
  • RE: TRIM support – You state “Following Jeff Geerling’s guide Enabling TRIM on an external SSD on a Raspberry Pi worked, though the step to update /sys/block/sda/queue/discard_max_bytes gave an error, that step doesn’t seem to be necessary for this board, which essentially means the only change necessary is to edit /etc/udev/rules.d/10-trim.rules.”

    Does this mean, that Jeff’s guide isn’t necessary at all and one simply needs to create/edit the /etc/udev/rules.d/10-trim.rules file, then reboot to test and finally enable via the systemctl command? Or, does this mean that Jeff’s guide is necessary (but skipping that discard_max_bytes step)?

    Thanks.

    Reply
    • It means you only need to create the 10-trim.rules file and then reboot. Since Jeffs article has steps for getting various values which is for setting the discard_max_bytes which doesn’t work. So the process is simpler, create the rules, reboot and enable a scheduled trim.
      Let me know if you have any problems.

      Reply
  • Interesting point about the transfer speeds. I’m looking to buy the expansion and I was wondering if USB 3.0 would turn out to be the bottleneck.

    This may be regional, but where I live M.2 NVMe drives are significantly cheaper than SATA equivalents. I’ll go for this even if it’s overkill.

    Glad to know this issue is fixed now!

    Reply
  • Christopher Erickson

    Martin,

    My idVendor shows 0x174c:1156 Asmedia Techonology.
    i have both: bInterfaceProtocol 80 Bulk-Only and bInterfaceProtocol 98 listed when i do a lsusb -v. Does that mean i do not need to update the firmware?
    Thank you,
    Christopher

    Reply
  • Good evening,
    I have some problems with two Aron one NVMe boards and I found your article now. I would like to see if with an update of the firmware the problems will be gone. Unfortunatelly the flashing utility zip-file is empty (or I can not open it. On both systems, Mac and Windows, the file is empty.).
    Can you see if the link for this is ok?
    Thank you!

    Reply
    • I’ve updated the links to take you to the “raw” versions of the file which should provide a direct download.

      Reply
  • Good evening again,
    I found out that the zip file from https://github.com/Argon40Tech/Argon-ONE-NVMe-Firmware can be opened and the ASM236xMPTool.exe works.
    But both of my Argon One M2 NVMe boards are not regognised well from the Window computer (the Mac recognises them not at all!). The Windows computer gives some tones (tü-rü-lü-rüp 🙂 ), it shows after that an USB-drive (E:) but with no data (insert a data carrier into the USB drive).
    Do you think that the boards are broken?

    Thank you for the hints.

    Reply
    • Don’t worry about what Windows Explorer shows, if the NVMe have been used with your RPi then the Linux partition types may not be recognised and supported by Windows. With the board connected, does the flashing tool recognise the board and show the details of the board in the table at the bottom of the flashing utility?

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.