RAK7391 - SATA M.2 drive not detected

I’m having trouble trying to get a SATA SSD to work in the M.2 interface on the RAK7391.
The only SATA drive that I could find locally with B-Key was an ADATA Ultimate SU650 with 512GB storage.
I’m running RAKPiOS and have checked and applied the latest system updates.

When I run the lspci command I don’t see any SATA controller listed.

Are you able to confirm:

  1. whether RAKPiOS is using the latest PiOS kernel with native SATA support;
  2. whether the SATA SSD above is compatible with RAK7391 M.2 interface; if so
  3. provide instructions on how to detect and mount the drive?

Any help would be very much appreciated.

Kind Regards

Hi Greg!
Unfortunately the RAK7391 does not have a SATA controller, that’s why it does not show up. The M.2 slot is originally conceived to host a 5G modem and only provides PCIe and USB3 signals.
It is possible to use it with an SSD but it’s got to be an M.2 B-key NVMe drive (not SATA).

Thanks for the clarification.
I’ll try and source an NVMe SSD with B-Key.

Hi Xose Perez,
I managed to locate an 128GB NVMe M.2 SSD with M+B key and installed this in the RAK7391 M.2 B-key slot, but have been unable to get this to work either. When I run the lspci command, I can see the KIOXIA controller for what I presume it the NVMe SSD. However, when I run the dmesg command it looks like there is some kind of issue with the NVMe controller and the devices is disabled. See below details.

Kind Regards

Do you think this is an incompatability with the NVMe SSD or driver issue?

[email protected]:/ $ lspci
00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2711 PCIe Bridge (rev 20)
01:00.0 PCI bridge: ASMedia Technology Inc. ASM1184e PCIe Switch Port
02:01.0 PCI bridge: ASMedia Technology Inc. ASM1184e PCIe Switch Port
02:03.0 PCI bridge: ASMedia Technology Inc. ASM1184e PCIe Switch Port
02:05.0 PCI bridge: ASMedia Technology Inc. ASM1184e PCIe Switch Port
02:07.0 PCI bridge: ASMedia Technology Inc. ASM1184e PCIe Switch Port
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
04:00.0 Non-Volatile memory controller: KIOXIA Corporation Device 0001
05:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)
[email protected]:/ $

[email protected]:/ $ dmesg | grep nvme
[ 1.293228] nvme nvme0: pci function 0000:04:00.0
[ 1.293380] nvme 0000:04:00.0: enabling device (0000 → 0002)
[ 66.527069] nvme nvme0: I/O 13 QID 0 timeout, disable controller
[ 66.635037] nvme nvme0: Device shutdown incomplete; abort shutdown
[ 66.635447] nvme nvme0: Removing after probe failure status: -4
[email protected]:/ $

Hi Xose Perez,
I purchased a KingSpec 256GB M.2 NVMe PCIe SSD off Aliexpress and this is recognized by the RAK7391.


I’m glad you found the proper drive.
We know there are few SSD drives out there that are compatible with the RAK7391 (I have a KingSpec with me too).
As I mentioned the reason is that the main use for the M.2 slot is connectivity so we designed it to be compatible with LTE and 5G modules out there primarily.

Hi @Greg would you mind sharing the steps to getting your working NVME mounted?

I’ve got a Kingspec 128GB as well and it’s visible:

[email protected]:~ $ sudo lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL
[sudo] password for rak:
UUID                                 NAME         FSTYPE   SIZE MOUNTPOINT LABEL  MODEL
                                     mmcblk0              29.1G
E830-23B2                            ├─mmcblk0p1  vfat     256M /boot      boot
7d51fe61-54a4-4db2-bc4b-05c7beb9cdff └─mmcblk0p2  ext4    28.9G /          rootfs
                                     mmcblk0boot0            4M
                                     mmcblk0boot1            4M
                                     nvme0n1             119.2G                   NE-128

But I’m not clear on how to get it mounted properly for use.

Hi Barry,
Looking at your output from the lsblk command, you will need to create a primary partition using fdisk and format it. Once you’ve don this you should see something like “nvme0n1p1” .

To format the partition using ext4 flle system I ran “sudo mkfs -t ext4 /dev/nvme0n1p1”

Once done, you can then mount the partition by doing the following:

  1. Create a folder to mount the partition in the /mnt folder e.g. “sudo mkdir /mnt/mynvmessd”.
  2. Mount the drive nvme drive partition to the new folder e.g. “sudo mount /dev/nvme0n1p1 /mnt/mynvmessd”

If you then run “df -h” you should then be able to see your partition and the mountpoint, in this example /mnt/mynvmessd.

However, please note that this method is not persistent and you’ll have to remount the drive when you power cycle or reboot the device.

If you want the drive to be mounted automatically on reboot you’ll need to edit the file system table “/etc/fstab”.

However, what I’ve done is copied the RAKOS operating system from the EMMC drive on the CM4 to my NVMe drive and modified/re-flashed the CM4 bootloader so that the CM4 boots from the NVMe drive. To do this you’ll need to use the raspberry pi usbboot tool.

Let me know if you get stuck or would like more information on how to boot from the NVME drive.