Your board isn’t booting anymore? U-Boot doesn’t even show up on the serial console? Don’t worry, there’s always a solution to recover!
All our platforms have a DIP switch (SW1) which allow to override the normal boot flow and force a boot to the USB recovery mode (OTG port). Modify its setting to match the pictures below.
If you set the switches to the USB setting and reset the board or cycle power, you should see a “Freescale” device show up in lsusb:
~/$ lsusb ... Bus 006 Device 012: ID 15a2:0054 Freescale Semiconductor, Inc. ...
Combined with the right tools, this can be used to un-brick a board whose serial EEPROM has been trashed, or to program the serial EEPROM on a board which has never been programmed.
Freescale has a tool (the Manufacturing tool) that will do this on Windows OS. For Linux, we built our own, and made the sources available on GitHub:
imx_usb_loader build procedure
To run imx_usb, you’ll need to have libusb installed on your machine. To compile it, you’ll need the libusb headers, which can be installed by grabbing the -dev package:
~$ sudo apt-get install libusb-1.0-0-dev pkg-config
You can then build your own imx_usb_loader binary:
~$ git clone git://github.com/boundarydevices/imx_usb_loader Cloning into 'imx_usb_loader'... remote: Counting objects: 131, done. remote: Compressing objects: 100% (61/61), done. remote: Total 131 (delta 71), reused 127 (delta 68) Receiving objects: 100% (131/131), 44.69 KiB, done. Resolving deltas: 100% (71/71), done. ~$ cd imx_usb_loader/ ~/imx_usb_loader$ make cc -c imx_usb.c -o imx_usb.o -Wstrict-prototypes -Wno-trigraphs -pipe -ggdb `pkg-config --cflags libusb-1.0` cc -o imx_usb imx_usb.o -lusb-1.0
In normal use, it simply loads a named file into RAM and executes it. If you run it like so, you can launch a U-Boot binary directly.
~/imx_usb_loader$ ./imx_usb u-boot.imx
If you don’t have permissions to access the USB device (can’t open), you should modify your udev rules to fix it. But as a quick workaround, using
sudo will help.
~/imx_usb_loader$ sudo ./imx_usb u-boot.imx
If everything goes as planned, you should see U-Boot launch (output on the serial console)
Note that you can find a pre-built binary for your platform here:
If you’ve gone through all of this, you might ask how this un-bricks the board.
It doesn’t. But once you have U-Boot running, you can use U-Boot to upgrade the serial EEPROM using the upgradeu command as discussed in this blog post:
See this post for details on how to use sb_loader.exe under Windows.
The function is essentially the same: sb_loader.exe can be used to download and run a U-Boot image and U-Boot can handle the rest.
Recently, NXP release sb_loader source code in case you need to modify it: