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. BD-SL (SabreLite) Nitrogen6X Nit6x_Lite Nitrogen6X_SOM Nitrogen6_MAX Nit6_SoloX Nitrogen6_SOMv2 Nitrogen7
Linux procedure
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
imx_usb_loader usage
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:
Under Windows
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: