How to force boot from microSD ? (old trusted wipe of eMMC fails)


. My previous experience with BBBlack made me annotate this procedure
for booting for sure from the microSD: just wipe the disk on the eMMC.
in particular, i just fdisk and remove all partitions from the eMMC.

. I tried to replicate the same procedure in the BBAI64 but I found some unexpected results.
. (boring but necessary) I am running the latest “minimal” image and i followed the official upgrade procedure.
. I fdisk on the eMMC mmcblk0 and deleted all partitions
. I observe this strange behavior, on reboot, the system does not reboot if i don’t keep pressed the “BOOT” button.

#> reboot 
U-Boot SPL 2021.01-gf65a2b8f (Aug 10 2022 - 16:53:51 +0000)
Model: Texas Instruments K3 J721E SoC
Board: BBONEAI-64-B0- rev B0
SYSFW ABI: 3.1 (firmware rev 0x0015 '21.9.1--v2021.09a (Terrific Lla')
TLB table from ffffc000 to 00000000
>>SPL: board_init_r()
Trying to boot from MMC2
spl: mmc boot mode: fs
spl_load_image_fat: error reading image tispl.bin, err - -6
spl_load_image_ext: ext4fs mount err - 0
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

. I saw there are two disk “boot0” and “boot1”, i did not touch those.

Ideas ?

From u-boot run:

run emmc_erase_boot0

Or from linux:

#(as root)
echo '0' >> /sys/class/block/mmcblk0boot0/force_ro
dd if=/dev/zero of=/dev/mmcblk0boot0 count=32 bs=128k

The TI TDA4, bootrom is hardcoded to load tiboot3.bin from eMMC’s boot0… Once tiboot3.bin is loaded we switch back to normal fs mode to load tispl.bin and u-boot.img (from eMMC)

microSD boot, with the way we wired the sysboot pins is configured in “fs” mode, so it looks for tiboot3.bin in the 1st fat partition. Then loads tispl.bin and u-boot.img from the fat partition (from microSD).

(microSD also supports RAW mode, but you need to rewire one sysboot pin…)

For reference, here is how you can write tiboot3.bin to boot0:

microsd, is just a generic copy to the fat file system…

Warning… So yes, by simply erasing the eMMC and not boot0, you’ll get into a fun boot lock, as u-boot loads from eMMC, but then fails… :wink:

The only current workaround is to force microSD boot with the switches, till we teach tiboot3.bin to look at both eMMC and microSD for tispl.bin (and then later u-boot.img)

Finally… To force microSD to boot no matter what.

  1. Hold boot and reset buttons
  2. Insert Power
  3. Lift finger from reset button
  4. Wait till LED turns on
  5. Remove finger from boot button


1 Like

Thank you Robert.
I followed the Linux console procedure below and it is working.

$> sudo su - 
#> echo '0' >> /sys/class/block/mmcblk0boot0/force_ro 
#> dd if=/dev/zero of=/dev/mmcblk0boot0 count=32 bs=128k

Cases tested successfully:

  1. #> reboot
  2. unplug power + replug => all restarts as expected from microSD

Thank you also for the links, very much appreciated !