Yet another manual about upgrading U-Boot on your development board.

U-Boot

With a Boundary Devices i.MX6 SABRE Lite device as an example.

  1. Download 6x_upgrade from https://boundarydevices.com/wiki/u-boot/;
  2. Download u-boot.nitrogen6q from https://boundarydevices.com/u-boot-v2018-07/ (or later).

Copy both files to an SD (or microSD) card:

  • 6x_upgrade
  • u-boot.nitrogen6q

In some cases files have to be renamed (sometimes it’s upgrade script, sometimes it’s U-Boot binary), and it varies depending on the U-Boot version you have on the device at the moment.

Insert card into device and connect it to your computer (without powering it up) via console cable and find out which /dev/ttyUSB it is connected to:

$ dmesg | tail
[  +5,149685] usb 3-3: new full-speed USB device number 14 using xhci_hcd
[  +0,148965] usb 3-3: New USB device found, idVendor=0557, idProduct=2008
[  +0,000005] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  +0,000003] usb 3-3: Product: USB-Serial Controller D
[  +0,000003] usb 3-3: Manufacturer: Prolific Technology Inc. 
[  +0,000679] pl2303 3-3:1.0: pl2303 converter detected
[  +0,000700] usb 3-3: pl2303 converter now attached to ttyUSB0

$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Oct 11 13:54 /dev/ttyUSB0

Regarding console cable: some devices have it right on the board as an additional microUSB port, but some only offer a COM interface, so you’ll need to have a RS232-to-USB/PL2303 converter in case your computer doesn’t have a COM port:

RS232 to USB converter

Start a screen session:

sudo screen /dev/ttyUSB0 115200

Power up the device and interrupt the autoboot:

CPU:   Freescale i.MX6Q rev1.2 at 792 MHz
Reset cause: POR
Board: sabrelite
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from SPI Flash...
SF: Detected sst25vf016b with page size 256 Bytes, erase size 4 KiB, total 2 MiB
OK
auto-detected panel 1280x720M@60
Display: hdmi:1280x720M@60 (1280x720)
In:    serial
Out:   serial
Err:   serial
Net:   Micrel ksz9021 at 6
FEC [PRIME], usb_ether
Hit any key to stop autoboot:  3

Start the upgrading process:

=> run upgradeu
AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
flags: ncq stag pm led clo only pmp pio slum part 
No port device detected!
** Bad device size - sata 0 **
** Bad device size - sata 0 **
SATA device 1: unknown device
** Bad device sata 1 **
MMC: no card present
MMC: no card present
** Bad device mmc 0 **
switch to partitions #0, OK
mmc1 is current device
reading /6x_upgrade
3626 bytes read in 16 ms (220.7 KiB/s)
## Executing script at 10008000
SF: Detected SST25VF016B with page size 256 Bytes, erase size 4 KiB, total 2 MiB
probed SPI ROM
check U-Boot
reading u-boot.nitrogen6q
560128 bytes read in 52 ms (10.3 MiB/s)
read 88c00 bytes from SD card
device 0 offset 0x400, size 0x88c00
SF: 560128 bytes @ 0x400 Read: OK
byte at 0x12000425 (0x90) != byte at 0x12400425 (0x0)
Total of 37 byte(s) were the same
Need U-Boot upgrade
Program in 5 seconds
5
4
3
2
1
erasing
SF: 786432 bytes @ 0x0 Erased: OK
programming
device 0 offset 0x800, size 0x88800
SF: 559104 bytes @ 0x800 Written: OK
device 0 offset 0x400, size 0x400
SF: 1024 bytes @ 0x400 Written: OK
verifying
device 0 offset 0x400, size 0x88c00
SF: 560128 bytes @ 0x400 Read: OK
Total of 560128 byte(s) were the same
---- U-Boot upgraded. reset

Reboot the device and note the upgraded U-Boot version:

U-Boot 2018.07-35363-gf35ba6c (Oct 02 2018 - 14:44:30 -0700), Build: jenkins-uboot_v2018.07-24