[BPI-R3] openwrt-24.10.2 NAND install from SDCARD not working

I’m trying to install OpenWRT from a tf-card, but sadly it will not boot from anywhere else as from TFTP.

What am I doing wrong?

This is what I’ve done.

1st write the OpenWRT sdcard image to the tf-card

wget -O - -nv https://downloads.openwrt.org/releases/24.10.2/targets/mediatek/filogic/openwrt-24.10.2-mediatek-filogic-bananapi_bpi-r3-sdcard.img.gz | gunzip | sudo dd of=/dev/disk4 bs=4M status=progress conv=fsync

2025-08-01 18:32:00 URL:https://downloads.openwrt.org/releases/24.10.2/targets/mediatek/filogic/openwrt-24.10.2-mediatek-filogic-bananapi_bpi-r3-sdcard.img.gz [23182085/23182085] -> "-" [1]

0+1205 records in
18+1 records out
78905348 bytes transferred in 8.742992 secs (9024982 bytes/sec)

2nd boot the BPI-R3 from SDCARD (all switches up)

F0: 102B 0000
FA: 1040 0000
FA: 1040 0000 [0200]
F9: 103F 0000
F3: 1001 0000 [0200]
F3: 1001 0000
F6: 300C 0028
F5: 0000 0000
V0: 0000 0000 [0001]
00: 0000 0000
BP: 2400 0041 [0000]
G0: 1190 0000
EC: 0000 0000 [3000]
T0: 0000 02B1 [010F]
Jump to BL

NOTICE:  BL2: v2.10.0   (release):OpenWrt v2024.01.17~bacca82a-3 (mt7986-sdmmc-ddr4)
NOTICE:  BL2: Built : 20:40:36, Jun 23 2025
NOTICE:  WDT: Cold boot
NOTICE:  WDT: disabled
NOTICE:  CPU: MT7986 (2000MHz)
NOTICE:  EMI: Using DDR4 settings
NOTICE:  EMI: Detected DRAM size: 2048MB
NOTICE:  EMI: complex R/W mem test passed
NOTICE:  BL2: Booting BL31
NOTICE:  BL31: v2.10.0  (release):OpenWrt v2024.01.17~bacca82a-3 (mt7986-sdmmc-ddr4)
NOTICE:  BL31: Built : 20:40:36, Jun 23 2025


U-Boot 2024.10-OpenWrt-r28739-d9340319c6 (Jun 23 2025 - 20:40:36 +0000)

CPU:   MediaTek MT7986
Model: BananaPi BPi-R3
DRAM:  2 GiB
Core:  54 devices, 24 uclasses, devicetree: embed
jedec_spi_nor spi_nor@0: unrecognized JEDEC id bytes: ff, ef, aa
MMC:   mmc@11230000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment

Reading from MMC(0)... In:    serial@11002000
Out:   serial@11002000
Err:   serial@11002000
Loading Environment from MMC... *** Warning - bad CRC, using default environment

Reading from MMC(0)... Net:
Warning: ethernet@15100000 (eth0) using random MAC address - e2:cd:80:5e:b6:10
eth0: ethernet@15100000
Saving Environment to MMC... Writing to MMC(0)... OK
Saving Environment to MMC... Writing to MMC(0)... OK
Button 'reset' not found (err=-16)

        ( ( ( OpenWrt ) ) )  [SD card]       U-Boot 2024.10-OpenWrt-r28739-d9340319c6 (Jun 23 2025 - 20:40:36 +0000)

      1. Run default boot command.
      2. Boot system via TFTP.
      3. Boot production system from SD card.
      4. Boot recovery system from SD card.
      5. Load production system via TFTP then write to SD card.
      6. Load recovery system via TFTP then write to SD card.
      7. Install bootloader, recovery and production to NOR.
      8. Install bootloader, recovery and production to NAND.
      9. Reboot.
      a. Reset all settings to factory defaults.
      0. Exit

3rd select 8. Install bootloader, recovery and production to NAND.

spi-nand: spi_nand spi_nand@1: Winbond SPI NAND was found.
spi-nand: spi_nand spi_nand@1: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
jedec_spi_nor spi_nor@0: unrecognized JEDEC id bytes: 00, ef, aa
'spi-nand0' is now active device
* spi-nand0
  - device: spi_nand@1
  - parent: spi@1100a000
  - driver: spi_nand
  - type: NAND flash
  - block size:        0x20000 bytes
  - page size:         0x800 bytes
  - OOB size:          64 bytes
  - OOB available:     24 bytes
  - 0x000000000000-0x000008000000 : "spi-nand0"
          - 0x000000000000-0x000000200000 : "bl2"
          - 0x000000200000-0x000008000000 : "ubi"
jedec_spi_nor spi_nor@0: unrecognized JEDEC id bytes: ff, ef, aa
Erasing 0x00000000 ... 0x07dfffff (1008 eraseblock(s))
jedec_spi_nor spi_nor@0: unrecognized JEDEC id bytes: 00, ef, aa
ubi0: default fastmap pool size: 50
ubi0: default fastmap WL pool size: 25
ubi0: attaching mtd2
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd2 (name "ubi", size 126 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 1008, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 0
ubi0: available PEBs: 982, total reserved PEBs: 26, PEBs reserved for bad PEB handling: 20

4th try to boot from NAND (switches: up down up down)

F0: 102B 0000
FA: 1040 0000
FA: 1040 0000 [0200]
F9: 0000 0000
V0: 0000 0000 [0001]
00: 0000 0000
BP: 2400 0041 [0000]
G0: 1190 0000
EC: 0000 0000 [1000]
T0: 0000 021E [010F]
Jump to BL

NOTICE:  BL2: v2.12.0(release):OpenWrt v2025.02.12~e0907706-1 (mt7986-spim-nand-ubi-ddr4)
NOTICE:  BL2: Built : 15:35:39, Jul 13 2025
NOTICE:  WDT: Cold boot
NOTICE:  WDT: disabled
NOTICE:  CPU: MT7986 (1998MHz)
NOTICE:  EMI: Using DDR4 settings
NOTICE:  EMI: Detected DRAM size: 2048MB
NOTICE:  EMI: complex R/W mem test passed
NOTICE:  SPI_NAND parses attributes from parameter page.
NOTICE:  SPI_NAND Detected ID 0xef
NOTICE:  Page size 2048, Block size 131072, size 134217728
NOTICE:  UBI: scanning [0x200000 - 0x8000000] ...
NOTICE:  UBI: scanning is finished
NOTICE:  UBI: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
NOTICE:  UBI: VID header offset: 2048 (aligned 2048), data offset: 4096
ERROR:   UBI error: No volume named fip could be found
ERROR:   io_dev_init failed for FIP image id 0 (-2)
ERROR:   Image id 3 open failed with -2
ERROR:   BL2: Failed to load image id 3 (-2)

When booting from SDCARD (all switches up) again and trying option 3. Boot production system from SD card., I get this:

spi-nand: spi_nand spi_nand@1: Winbond SPI NAND was found.
spi-nand: spi_nand spi_nand@1: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
jedec_spi_nor spi_nor@0: unrecognized JEDEC id bytes: 00, ef, aa
'spi-nand0' is now active device
* spi-nand0
  - device: spi_nand@1
  - parent: spi@1100a000
  - driver: spi_nand
  - type: NAND flash
  - block size:        0x20000 bytes
  - page size:         0x800 bytes
  - OOB size:          64 bytes
  - OOB available:     24 bytes
  - 0x000000000000-0x000008000000 : "spi-nand0"
          - 0x000000000000-0x000000200000 : "bl2"
          - 0x000000200000-0x000008000000 : "ubi"

But 2. Boot system via TFTP. does actually work.

* spi-nand0
  - device: spi_nand@1
  - parent: spi@1100a000
  - driver: spi_nand
  - type: NAND flash
  - block size:        0x20000 bytes
  - page size:         0x800 bytes
  - OOB size:          64 bytes
  - OOB available:     24 bytes
  - 0x000000000000-0x000008000000 : "spi-nand0"
          - 0x000000000000-0x000000200000 : "bl2"
          - 0x000000200000-0x000008000000 : "ubi"
Using ethernet@15100000 device
TFTP from server 192.168.1.254; our IP address is 192.168.1.1
Filename 'openwrt-mediatek-filogic-bananapi_bpi-r3-initramfs-recovery.itb'.
Load address: 0x46000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ###############################################################
         1.2 MiB/s
done
Bytes transferred = 9502720 (910000 hex)
## Loading kernel from FIT Image at 46000000 ...
   Using 'config-mt7986a-bananapi-bpi-r3' configuration
   Trying 'kernel-1' kernel subimage
     Description:  ARM64 OpenWrt Linux-6.6.97
     Type:         Kernel Image
     Compression:  lzma compressed
     Data Start:   0x460000e8
     Data Size:    4428419 Bytes = 4.2 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x44000000
     Entry Point:  0x44000000
     Hash algo:    crc32
     Hash value:   ec099821
     Hash algo:    sha1
     Hash value:   69a9f0291cc28418622ec768353c3af338ff1421
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading ramdisk from FIT Image at 46000000 ...
   Using 'config-mt7986a-bananapi-bpi-r3' configuration
   Trying 'initrd-1' ramdisk subimage
     Description:  ARM64 OpenWrt bananapi_bpi-r3 initrd
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x464394a8
     Data Size:    5015612 Bytes = 4.8 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    crc32
     Hash value:   d0387a70
     Hash algo:    sha1
     Hash value:   d2e530efa9ae18b214b47567328605121d3dfb6d
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 46000000 ...
   Using 'config-mt7986a-bananapi-bpi-r3' configuration
   Trying 'fdt-1' fdt subimage
     Description:  ARM64 OpenWrt bananapi_bpi-r3 device tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x46901df0
     Data Size:    32008 Bytes = 31.3 KiB
     Architecture: AArch64
     Load Address: 0x43f00000
     Hash algo:    crc32
     Hash value:   57491256
     Hash algo:    sha1
     Hash value:   a18a73889d085599c5f2fde1df9b56ade5ed7ab1
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Loading fdt from 0x46901df0 to 0x43f00000
## Loading fdt from FIT Image at 46000000 ...
   Using 'mt7986a-bananapi-bpi-r3-sd' configuration
   Trying 'fdt-mt7986a-bananapi-bpi-r3-sd' fdt subimage
     Description:  ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-sd
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x4690ad8c
     Data Size:    895 Bytes = 895 Bytes
     Architecture: AArch64
     Hash algo:    crc32
     Hash value:   6e623988
     Hash algo:    sha1
     Hash value:   26766c16b6823e45cf2095b575672509794f0157
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 46000000 ...
   Using 'mt7986a-bananapi-bpi-r3-nand' configuration
   Trying 'fdt-mt7986a-bananapi-bpi-r3-nand' fdt subimage
     Description:  ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-nand
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x4690a1b4
     Data Size:    1166 Bytes = 1.1 KiB
     Architecture: AArch64
     Hash algo:    crc32
     Hash value:   80cf140c
     Hash algo:    sha1
     Hash value:   cd9c9ecb32a6ebeb009f82eb718e49d29feff6a1
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Booting using the fdt blob at 0x43f00000
Working FDT set to 43f00000
   Uncompressing Kernel Image to 44000000
   Loading Ramdisk to be31f000, end be7e783c ... OK
   Loading Device Tree to 00000000be314000, end 00000000be31e17b ... OK
Working FDT set to be314000
Add 'ramoops@42ff0000' node failed: FDT_ERR_EXISTS
set /chosen/rootdisk to bootrom media: rootdisk-sd (phandle 0x00000059)

Starting kernel ...

Hi. I cann’t remember my own path to do it, but inserted below link - hope it can help

and yet another way… https://openwrt.org/toh/sinovoip/bananapi_bpi-r3

Thanks for the pointers!

Unfortunately it did not work for me that way.

The post from the first link says:

  1. Insert the microSD card with OpenWrt image on it. See the instructions in the link on how to put OpenWrt on the microSD card
  2. Setup little switches on the R3 board to positions A=1, B=1, C=1, D=1
  3. Connect the serial port and start terminal program (puTTY or minicom or such thing)
  4. Now power on the device. Right in the beginning you see a menu. There you can use the cursor keys to navigate and select installation to SPI-NAND. Do that.
  5. Once installation to SPI-NAND is done, remove the power from the device, and remove microSD card.
  6. Setup little switches on the R3 board to positions A=1, B=0, C=1, D=0

This is what I did and posted up to 4th above.

But at that point (7.) it fails with:

ERROR:   UBI error: No volume named fip could be found
ERROR:   io_dev_init failed for FIP image id 0 (-2)
ERROR:   Image id 3 open failed with -2
ERROR:   BL2: Failed to load image id 3 (-2)

That indicates to me, that the install onto NAND from the SDCARD did not succeed entirely, but I can not see an error in the output from the install (please see 3rd in my original post above).

If someone here sees what is going wrong in my setup, I would be very glad to hear that. :pray:

The following is what I can not do because my BPI-R3 will not boot from NAND.

  1. Now power on the device, now it should be starting from SPI-NAND memory. Right in the beginning you again see a menu. Again use the cursor keys to navigate and select installation to eMMC. Do that.
  2. Remove power again
  3. Setup little switches on the R3 board to positions A=0, B=1, C=1, D=0
  4. Now you are done, the device will boot from eMMC.

Have You tried to startup Openwrt using the sd card ?

Maybe reading the entire thread that seems to be somewhat like your challenges

https://forum.banana-pi.org/t/banana-pi-bpi-r3-openwrt-image/13236/119

You can try the mirror and burning methods on the official website. If this still can’t be burned, I suspect there might be a problem with the NAND.