我拿到的Sabre Lite i.MX6 board开发板变成了砖,也就是在Ubuntu中启动sudo minicom的时候没有变化,画面一直停留在图1中。
第一感觉是Uboot在EEPROM因为未知原因被擦除掉了。于是便去板子的官网 [1]去搜索有关变砖恢复 [2]的办法。
按照官网提示进行了如下的步骤:
~$ sudo apt-get install libusb-1.0-0-dev pkg-config
~$ git clone git://github.com/boundarydevices/imx_usb_loader
~$ 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_us
b.o -lusb-1.0
准备工作完成,接下来对开发板做准备工作
如图2,将DIP SWITCH变为此状态,注意: SW1置为ON,SW2置为OFF。这将进入USB恢复模式USB recovery mode (OTG port)。将开发板与主机通过USB进行连接,通过串口线将开发板与主机连接,运行minicom。

~/imx_usb_loader$ sudo ./imx_usb u-boot.imx
此时minicom将会启动一个Uboot(注:这个Uboot只是将一个文件临时加载到RAM中并执行,所以此时进入了UBoot,但是EEPROM中并没有烧写UBoot,这是我当时一直疑惑地,明明出现了successed图3,reset之后还是无法进入UBoot)。

此时官方给了一个明确的说明,大意就是这时只是 临时启动了一个UBoot,但可以使用这个UBoot进行upgrade来进行更新(烧写)。
依照官方提供的upgrade步骤 [3]
首先官方直接提供了编译好的文件 [4]可以直接下载对应开发板的uboot和6x_upgrade,直接下载即可
或者按照如下步骤
~$ sudo apt-get install gcc-arm-linux-gnueabihf
~$ git clone https://github.com/boundarydevices/u-boot-imx6 -b boundary-v201
6.03
~$ cd u-boot-imx6
~/u-boot-imx6$ find . -name "nit*defconfig"
~/u-boot-imx6$ export ARCH=arm
~/u-boot-imx6$ export CROSS_COMPILE=arm-linux-gnueabihf-
~/u-boot-imx6$ make nitrogen6q_defconfig
~/u-boot-imx6$ make all
~/u-boot-imx6$ ./tools/mkimage -A arm -O linux -T script -C none \
-a 0 -e 0 -n "update script" \
-d board/boundary/nitrogen6x/6x_upgrade.txt 6x_upgrade
~/u-boot-imx6/$ cp ./u-boot.imx ./u-boot.nitrogen6q
将6x_upgrade和u-boot.nitrogen6q拷贝(cp)到 SDCARD(指大卡) 的Boot分区下(一般为/media/{user}/Boot/)。
这时直接在临时的UBoot中运行
Hit any key to stop autoboot: 0
=> run upgradeu
顺利的话,UBoot就烧写成功了。但不幸的是,我这边运行的时候出现了很费劲的问题,图4。

接下来就是一段查找问题的时间,看输出信息说no card present,但我明明已经插sd卡了,会不会是DIP设置的不对,去查找开发板的文档[5],最后找到了,但是也没有指明我如何从SDCARD中启动,只说了一个如何进入MFG TooL的下载模式(这个试了,没搞明白,一个可视化的windows应用,配合putty监视串口,但我的uboot都没得,监视啥鬼),还有一个Boot from SPI-NOR,也没啥用,我这SPI-NOR里的uboot已经没了啊。
后来查到一个跟我遇到类似问题的提问[6],这老哥也是找不到SD Card,结果换了一个SD Card就行了???我咋换也不行呢。
注意这里是大卡,插到背面的SD3,不是SD4小卡。 (我一开始使用的小卡插在了SD4上,不管一开始还是使用下面的方法都会报错MMC: no card present)。
功夫不负有心人,终于让我翻到了一个解决办法[7](当然这个SD card也卡了我很久,如此的话SD4就为Micro SD或TF卡)。
U-Boot > fatload mmc 0 ${loadaddr} u-boot.nitrogen6q
U-Boot > sf probe
U-Boot > sf erase 0 0xc2000
U-Boot > sf write ${loadaddr} 0x400 ${filesize}
U-Boot > reset
重启开发板,UBoot成功烧写了进去!

参考
[1] https://boundarydevices.com/product/bd-sl-i-mx6/
[2] https://boundarydev2.wpengine.com/unbricking-nitrogen6x-sabre-lite-i-mx6-board/
[3] https://boundarydev2.wpengine.com/u-boot-v2016-03/
[4] http://linode.boundarydevices.com/u-boot-images/
[5] http://www.farnell.com/datasheets/1830763.pdf?COM=PrimaryPlatforms
[6] https://community.nxp.com/t5/i-MX-Processors/iMX6-sabre-lite-always-in-download-mode/td-p/537102
本文介绍了SabreLite i.MX6开发板在变砖后的恢复过程,包括使用imx_usb_loader工具进行Uboot临时加载、通过6x_upgrade脚本进行Uboot更新以及解决过程中遇到的SD卡读取问题。
1973

被折叠的 条评论
为什么被折叠?



