Bootloader breaking intermittently

Yes. If I have micro-SD and eMMC and nvme drive I always boot from nvme drive. Same if I have micro SD or eMMC and nvme drive - I boot always from nvme drive.

Without nvme drive but with both microSD and eMMC - boots from microSD.

I double checked - SPI flash is erased.

Very strange. I can’t rewrite nvme drive now without external nvme to usb adapter. Because when I insert it, it boots.

You have installed u-boot on eMMC. And judging by the description, this is the official version with a crooked launch order (NVMe always starts first). Just erase the eMMC (if there is valuable information there - save it first, or clean up the first 16Mb on the eMMC while preserving the MBR).

No, it’s not correct. To be 100% sure I disconnected eMMC, erased it on Macbook via USB to eMMC cradle. Next with Balena Etcher flashed latest Ubuntu image from Joshua Riek.
Put eMMC back to Rock 5B, nvme drive still in place, SPI flash is erased. Booting - starts Armbian from nvme drive.

Erase the eMMC and don’t write ANYTHING to it. As soon as you recorded the image on eMMC, you automatically received a u-boot on eMMC. ALL images have a built-in u-boot. Without this, they will not be able to start the system from the SD card if the SPI is purged.

I have the same issue. Loaded Ubuntu on SD and Debian on the NVMe.

The basic process I’m following is from Rock5/install/spi - Radxa Wiki:

  1. Check hashes
  2. Zero the SPI
  3. Flash rock-5b-spi-image-g49da44e116d.img
    3a. Hashes match
  4. Clean shutdown
    4a. Remove SD
  5. Power up
    5a. Never boots from NVMe
    5b. Power off
    5c. Insert SD
    5d. Boots to SD

I have tried locally on the Rock 5B, from Raspbian, from MacOS, and Windows (all same as above).

From Windows, these are the logs:
12:53:03 064 RKDevTool v2.9.6.0 start run
12:56:39 021 RKDevTool v2.9.6.0 start run
12:57:07 840 Layer<3-2>:Download Boot Start
12:57:11 796 Layer<3-2>:Download Boot Success
12:57:11 799 Layer<3-2>:Wait For Maskrom Start
12:57:12 806 Layer<3-2>:Wait For Maskrom Success
12:57:12 808 Layer<3-2>:Test Device Start
12:57:12 810 Layer<3-2>:Test Device Success
12:57:12 812 Layer<3-2>:Check Chip Start
12:57:12 813 Layer<3-2>: Check Chip Success
12:57:12 815 Layer<3-2>:Get FlashInfo Start
12:57:12 816 <LAYER 3-2> INFO:FlashInfo: 00 80 00 00 80 00 04 00 28 00 01
12:57:12 817 <LAYER 3-2> INFO:GetFlashInfo–>Nor storage.
12:57:12 819 Layer<3-2>:Get FlashInfo Success
12:57:12 820 Layer<3-2>:Prepare IDB Start
12:57:12 821 <LAYER 3-2> INFO:CS(1) (16MB) (SAMSUNG)
12:57:12 823 Layer<3-2>:Prepare IDB Success
12:57:12 824 Layer<3-2>:Download IDB Start
12:57:12 825 <LAYER 3-2> INFO:DownloadIDBlock–>New IDB
12:57:18 051 Layer<3-2>:Download IDB Success
12:57:18 054 Layer<3-2>:Wait For Maskrom Start
12:57:18 993 Layer<3-2>:Wait For Maskrom Success
12:57:18 995 Layer<3-2>:Test Device Start
12:57:18 997 Layer<3-2>:Test Device Success

Thanks, it works. I’m able to boot from microSD now.

I’ve written some random data to /dev/mtdblock0 now:

sudo md5sum /dev/mtdblock0
73bece6d449131d9da21a617c6894f13

I’ll check intermittently over the next couple of weeks to see if the checksum changes.

EDIT: 9 days later - as of yet, the MD5 hash remains unchanged.

EDIT: One last update - a month later and the checksum still remains unchanged.