NVMe SSD write speeds are slow on Rock 5A

Hello everyone

I’m using a WD SN770 drive with an M.2 Extension board added to a Rock 5A motherboard.

Read speeds are over 400MB/s, but write speeds are only around 30MB/s, which is causing problems.

Does anyone have a solution?

I’m running Armbian 26.2.1
Ubuntu 24.04 LTS.

Send your output of uname -a

Thanks for your reply.
Sorry for the late response.

Since then, I switched to DietPI, and the write speed has improved to about 70 MB/s, but it’s still very slow compared to the read speed.
Here is the output of uname -a:

$ uname -a

Linux DietPi 6.1.115-vendor-rk35xx #1 SMP Sun May 10 15:35:58 UTC 2026 aarch64 GNU/Linux

Try the mainline kernel then. Dietpi provides it, there are instructions on their forum how to switch

Thanks for the reply.
Is this okay?
$ uname -a
Linux DietPi 7.0.11-edge-rockchip64 #1 SMP PREEMPT Mon Jun 1 15:54:55 UTC 2026 aarch64 GNU/Linux

By the way, I measured the speed, and the write speed was around 70 MB/s.

1 Like

With write speed < 100MB/s there is still something wrong; What I do not know. It might be that you use an old firmware/bootloader that does not match well with the listed kernels.

# grep -a --null-data U-Boot /dev/mtd0ro

can show more info if the 5A has SPI chip. Else it is on the SD-card.

1 Like

Please post the output of:

smartctl --all /dev/nvme0n1

Thanks for your reply.
Here are the results:

$ sudo smartctl --all /dev/nvme0
smartctl 7.4 2023-08-01 r5530 [aarch64-linux-7.0.11-edge-rockchip64] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       WD_BLACK SN770 2TB
Serial Number:                      24183R809445
Firmware Version:                   731100WD
PCI Vendor/Subsystem ID:            0x15b7
IEEE OUI Identifier:                0x001b44
Total NVM Capacity:                 2,000,398,934,016 [2.00 TB]
Unallocated NVM Capacity:           0
Controller ID:                      0
NVMe Version:                       1.4
Number of Namespaces:               1
Namespace 1 Size/Capacity:          2,000,398,934,016 [2.00 TB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            001b44 8b47fad6f9
Local Time is:                      Mon Jun  8 12:03:10 2026 UTC
Firmware Updates (0x14):            2 Slots, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x00df):     Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp Verify
Log Page Attributes (0x7e):         Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Pers_Ev_Lg Log0_FISE_MI Telmtry_Ar_4
Maximum Data Transfer Size:         256 Pages
Warning  Comp. Temp. Threshold:     84 Celsius
Critical Comp. Temp. Threshold:     88 Celsius
Namespace 1 Features (0x02):        NA_Fields

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     5.40W    5.40W       -    0  0  0  0        0       0
 1 +     3.50W    3.00W       -    0  0  0  0        0       0
 2 +     2.40W    2.00W       -    0  0  0  0        0       0
 3 -   0.0150W       -        -    3  3  3  3     1500    2500
 4 -   0.0050W       -        -    4  4  4  4    10000    6000
 5 -   0.0033W       -        -    5  5  5  5   176000   25000

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         2
 1 -    4096       0         1

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        50 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    0%
Data Units Read:                    845,155 [432 GB]
Data Units Written:                 8,018,885 [4.10 TB]
Host Read Commands:                 5,168,234
Host Write Commands:                42,414,720
Controller Busy Time:               262
Power Cycles:                       443
Power On Hours:                     1,371
Unsafe Shutdowns:                   245
Media and Data Integrity Errors:    0
Error Information Log Entries:      395
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               71 Celsius
Temperature Sensor 2:               47 Celsius

Error Information (NVMe Log 0x01, 16 of 256 entries)
No Errors Logged

Self-test Log (NVMe Log 0x06)
Self-test status: No self-test in progress
No Self-tests Logged

$ 

Thanks for your reply.
I’m using an SD card.
Please let me know the filename you’d like to check.

The reason for asking for the smartctl log was to see how much power the NVME requires to operate at full speed.
This raises some questions that can provide an explanation for slow performance:

  • Is the M.2 expansion board capable of handling this power requirement?
  • Is the SBC PCB designed to provide this power requirement via the M.2 E-Key connector?
  • Is the power supply capable of providing the additional power demand beyond the power requirement of the SBC?

All of this can lead to the NVME choosing a lower power state, which is accompanied by a dramatic loss of write speed.

1 Like

To show U-Boot version string, do something like this:

sudo dd if=/dev/mmcblk0 count=32k | grep -a -z "U-Boot SPL 20"

Thanks for your reply.
I’ve confirmed the following.

$ sudo dd if=/dev/mmcblk0 count=32k | grep -a -z “U-Boot SPL 20”

U-Boot SPL 2017.09-armbian-2017.09-S113a-P0ef3-H3d34-Vb0b8-Bb703-R448a (Apr 01 2025 - 06:29:54)

32768+0 records in

32768+0 records out

16777216 bytes (17 MB, 16 MiB) copied, 0.106032 s, 158 MB/s

Thanks for your reply.

For the M.2 expansion board, I’m using the Radxa M.2 Extension Board.

I’m also using the Power PD 30W power adapter.

I thought both of these components were sufficient for this setup, but are there any areas where I might be lacking?

This is an ancient U-Boot

Is there an image available that includes the latest U-Boot?

A quick look at the specifications shows no obvious flaws.
Since the power supply can even deliver up to 5A in 5V operation, you are on the safe side even if PD is not working.

root@rock5b:/local/fsroot/@/armbian# cat ./usr/lib/linux-u-boot-edge-rock-5b/u-boot-rockchip.bin | grep -a -z "U-Boot SPL 20"

U-Boot SPL 2026.01_armbian-2026.01-S127a-P7896-H911d-V1680-B2eb2-R448a (Feb 15 2026 - 04:05:05 +0000)

This is 5B, but 5A should be similar. So install the edge variant of the U-Boot for 5A and install that onto SD-card with armbian-config I would say.

But problem might still be somewhere else, but new mainline based kernel and old U-Boot have given me lots of trouble.

1 Like

Thanks for your reply!

Thanks for your reply.
I’ll try that method to see if it helps.

I tried updating the U-boot version, but the write speed didn’t go up from 70 MB/s.
Is this the correct version?

$ sudo dd if=/dev/mmcblk0 count=32k | grep -a -z “U-Boot SPL 20”

U-Boot SPL 2017.09_armbian-2017.09-S39cd-P9374-Hb342-Vc6b1-B8297-R448a (Jun 04 2026 - 14:59:12)

32768+0 records in

32768+0 records out

16777216 bytes (17 MB, 16 MiB) copied, 0.103671 s, 162 MB/s

$