ROCK 3 MODEL C: Boot from M.2 or eMMC?

The SPI bootloader was bad, which prevented booting. You can use a female to male jumper cable, with female end plugged in the ground on 40-pin. Then with one hand hold the male end touching the CLK pin to temporarily disable SPI boot. Use your other hand to connect the power, and you should be able to boot from microSD. Disconnect the connection when you see U-Boot is launched, so the Linux can later detect the SPI flash.

Here is an image helping you to find the CLK pin:


From the back of the PCB it looked like this:

      40-pin header
             5      4
short this-> 6      3
             7      2
             8      1
             Flash <- this is printed on the PCB

Once you get into the system you can clear the broken SPI bootloader.

Right now the code needs some work so I’ll not provide any more private build.

Thanks for the explanation!
Fortunately (or unfortunately?) I have experience in clearing the flash. I spent quite a few hours trying to get this to work, flashing and clearing again. I always shorted pin 1 and 4 of the flash chip with pliers when applying power, which then let me boot from sd-card again.

From the back of the PCB it looked like this:

CAREFUL: the pinout you draw is wrong! You might want to correct that. Pin 6 happens to be in the correct place though.

Is this just an issue with the W25Q128JWPIM chip? Or isn’t the GD25LQ128EWIGR chip not working as well? Can you tell how long it will take to work over the code?

Thanks. I was thinking about our 40-pin header when I label the chip pin. I have thus corrected it.

Right now with U-Boot 2023.07.02 I was not able to get NVMe working, so I’m thinking about revert back to 2023.04. GD25LQ128 should work with the bootloader shipped with the system though.

Well here is another private build bootloader. This one should support W25Q128JWPIM. (697.2 KB)

Fantastic, it’s working!
Thanks so much for your help and support.
Great, you could implement the W25Q128JWPIM IC that fast.
Very much appreciated!

Quick question, I was also building the u-boot myself from It spits out 2 files, u-boot-latest_2023.07.02-1_arm64.deb and u-boot-rock-3c_2023.07.02-1_all.deb. What is the difference between these 2 files?

Finnaly you can boot from NVMe thanks to the latest system update (b36). These are the steps that worked for me:

  • Download the latest system image (b36 for now):

  • Flash the system image on a MicroSD card.

  • Boot from MicroSD card.
    "sudo apt update
    sudo apt full-upgrade --allow-downgrades

    The 2nd upgrade is to update pinned packages

    sudo apt full-upgrade --allow-downgrades
    sudo reboot"

  • Run rsetup (in command line or in Applications menu select Settings - rsetup). Select System Maintenance, and Update Bootloader, then Update SPI Bootloader (it will take some time).

  • Now you need to flash the system image again, but on NVMe drive, and this time from Rock 3C. Download and install Etcher for arm64: (balena-etcher-electron_1.7.9+5945ab1f_arm64.deb). Download the system image (b36) and flash it on NVMe drive using Etcher.

  • Turn off Rock 3C. Unplug it. Eject the MicroSD card. Plug the power back and that’s it.

u-boot-latest_2023.07.02-1_arm64.deb is the real package containing the bootloader. u-boot-rock-3c_2023.07.02-1_all.deb is the meta package that link the product (ROCK 3C) to the real package, so the image builder doesn’t have to hardcode which product uses which bootloader.

System upgrade is not necessary if using the latest system image. It is only for user of older image who wish to upgrade.

Can also be done from a computer if you have the hardware to write the drive.

The update and install process seems to go as described without any problem. But when I try turning it on with just the updated NVMe drive, nothing happens. No flashing blue led as when I boot from micro-sd.

I had the same issue, but after i repeated the process, it worked. Can’t explain how.
Also, don’t forget to update both bootloader, and SPI bootloader in rsetup.

Thanks! Which image did you use? I’m still having problems but also having different issues with Ubuntu vs Debian.


Thanks! I ended up using the private build bootloader above instead of the built-in one and that got me working. Thanks for your help!

So if there’s no SPI flash on the board, it’s not possible to directly boot from NVMe drive?

No need to add any SPI flash to the board. Just flash the latest version of Debian or Ubuntu (I used Debian) for Rock 3C from the official repository (look for b36) on a MicroSD card, update the SPI bootloader using rsetup (you can find it in the Applications menu). Then flash the same image of Linux to the NVMe drive, remove the MicroSD card (because it has higher priority for booting) and boot from NVMe

But my board don’t have SPI flash soldered on the bottom, so how can I update it? (already tried it, it failed, becuase there’s no memory to update, when I boot without SD card, device doesn’t even output anything on serial console) :slight_smile: