Hikey 960: M.2/SATA?

Has anyone had any luck using the M.2 port for SATA drives yet? It looks like USB drives are not working, but I would like to test some software that benefits from TB-scale storage.


I am not aware of tested SATA devices yet, but below are the tested parts.

  • Intel 600P 256G 2280NGFF/M.2 NVME ssd 240G
  • WiFi: intel 6250, BCM943228HMB, AR9281, RTL8188

My M.2 SATA III SSD (Samsung 850 EVO (500GB) MZ-N5E500BW) is confirmed not to be detected, either directly plugged into M.2 or via a USB- controller. Note that this on a 2-week-old build with modifications as per here:


Hello Yang,

in order to test the Intel 600P, did you have to recompile the Kernel enabling the nvme module ? It looks like that by default it is not compiled.



Sorry for late response, I should have said, we tested the PCIe enumeration with above mentioned cards. You will need to enable it explicitly, see here:


for nvme module you probably have to enable the config under drivers/nvme/host/Kconfig.

1 Like

I see it has been recently merged. Does lspci work on aosp or is there another way to list pci devices?
Ps. Is it also working on the oe builds?

You can either check with
cat /proc/bus/pci/devices

or you can enable toybox’s lspci

I am not quite sure about the oe build availability though.

Do you know if a M.2 PCIe SATA device will work? Do I need to enable something or add a driver/library?

Afraid not. Best to ask the group as a whole, and perhaps specify which device you mean, as M.2 PCIe SATA is pretty broad? I heard that some M.2 drives now work.
Best wishes,

I am new here and please forgive me if it is a newbie question. Intel 600P 256G 2280NGFF/M.2 NVME ssd 240G has been tested, it is tested under Android or Linux? Thanks in advance.

Test was conducted under Android.

thank you for your help.

No SATA controller onboard so sata m.2 devices will not work. NVME is essentially just embedded PCI storage though, so that will work if you have OS drivers. I’ll be testing that myself this weekend.

I would need to work on an NVME related project, and so I would like to ask two questions.

  1. when I looked the source codes that I downloaded, I do not see NVME directory under drivers. Is it normal?
  2. where can I find the source code for NVME and is there a suggested procedure to compile the source to generate NVME.img

Many thanks.

I found an answer to my question 1. From the 960 board, build kernel instruction,
https://source.android.com/source/building-kernels, I got the source from
git clone https://android.googlesource.com/kernel/hikey-linaro

When I look at the kernel 4.4 in github, https://github.com/96boards-hikey/linux, I can see the NVME source codes.


I am trying to buy an Intel 600P 256G 2280NGFF/M.2 NVME ssd 240G. When I google it, I do not see a device with exact model. Many Intel NVME SSDs have 256G, can you let me know which one works/is compatible with 240G? Also, in the 240G ssd, how many PCI lanes does it use? Thanks in advance.



Hi Dali

The exact model number I believe is SSDPE2MW012T4M2, 256G was the number on the box.



Thanks for the information. When I google SSDPE2MW012T4M2, I found that it is a hard drive, not an NVME memory. Meanwhile, I got an NVME memory as follows
Intel SSD 600p Series (128GB, M.2 2280 80mm NVMe PCIe 3.0 x4, 3D1, TLC) . I have a friend who has been working on SSD area. He mentioned that Intel’s products are consistent, and it should not make much difference on the size, such as 128 G, 240G or 256G. I will give a try.



I tried a Samsung 960 Pro NVME SSD on the Hikey, with image built from sources, ( https://github.com/Linaro/documentation/blob/master/Reference-Platform/CECommon/OE.md ), lscpi enumeration shows nothing, module was loaded with modprobe nvme and nothing was detected ( nothing on dmesg ), do i need to do anything else ?

And, why the m.2 slot points outwards?? makes no sense, I wonder why…

It isn’t always easy to reverse all the wires. There may simply not have been enough space to turn the connector around.