You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

imx6solo平台U-Boot 2020版本NAND启动失败求助

U-Boot 2020版本烧录NAND后无法启动的排查与解决

问题背景

通过Buildroot将U-Boot从2009版本升级至2020.04版本后,新编译的u-boot.imx镜像通过imx_usb_loader加载可正常启动,但烧录至NAND闪存后设备无法启动。无JTAG调试工具,使用的板级文件为mx6sabreauto.c、mx6solo.cfg和mx6sabreauto.h,未使用SPL或DTS,仅生成u-boot.imx。

imx_usb_loader启动日志

U-Boot 2020.04 (Feb 11 2023 - 15:41:38 +0100)

CPU:   i.MX6SOLO rev1.3 at 792MHz
CPU:   Industrial temperature grade (-40C to 105C) at 50C
Reset cause: POR
Model: i.MX6 DualLite/Solo SABRE Automotive Board
Board: MX6Q-Sabreauto rev@
DRAM:  2 GiB
NAND:  nand_base: device found, Manufacturer ID: 0x2c, Chip ID: 0xd3
nand_base: Micron NAND 1GiB 3,3V 8-bit
nand_base: Micron NAND 1GiB 3,3V 8-bit
nand_base: 1024 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 128
use legacy bch geometry
1024 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 2
Loading Environment from MMC... MMC: no card present
mmc_init: -123, time 2
Warning - No block device, using default environment

Loading Environment from NAND... Scanning device for bad blocks
Warning - bad CRC, using default environment

No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024x768)
In:    serial
Out:   serial
Err:   serial
Net:   FEC [PRIME]
Warning: FEC (eth0) using random MAC address - ea:37:e5:51:c1:86

Boot from USB for mfgtools
Warning - Use default environment for
using default environment

Hit any key to stop autoboot:  0 

烧录操作日志

=> nand erase 0x0 0x40000000

NAND erase: device 0 whole chip
Erasing at 0x3ffc0000 -- 100% complete.
OK
=> tftp 0x10800000 u-boot.imx
Using FEC device
TFTP from server 192.168.30.30; our IP address is 192.168.30.10
Filename 'u-boot.imx'.
Load address: 0x10800000
Loading: #####################################################
         3.9 MiB/s
done
Bytes transferred = 777216 (bdc00 hex)
=> nand read 0x10800000 0x00000000 777216

NAND read: device 0 offset 0x0, size 0x777216
 7827990 bytes read: OK
=> reset
resetting ...

排查与解决步骤

1. 修正烧录命令的核心错误

从烧录日志可见,你执行了nand read命令而非nand write——这只是把NAND数据读回内存,根本没将u-boot.imx写入NAND!正确的烧录命令应为:

=> nand write 0x10800000 0x0 0xbdc00

注:0xbdc00是u-boot.imx字节数(777216)对应的十六进制值,直接使用该值可避免页/块对齐问题。

2. 确认NAND启动的镜像结构与偏移

  • i.MX6的NAND启动要求镜像包含完整的IVT(镜像向量表)和DCD(设备配置数据),Buildroot编译时若配置正确会自动生成,可通过mkimage -l u-boot.imx验证结构完整性。
  • 确认NAND启动偏移为0x0(i.MX6 Sabreauto默认NAND启动地址),若2009版本使用过非标准偏移,需同步调整2020版本的配置。

3. 适配NAND BCH校验配置

从启动日志的use legacy bch geometry可知,U-Boot 2020版本的NAND驱动可能与旧版BCH配置存在兼容性问题:

  • 检查mx6sabreauto.c中的NAND初始化代码,确认BCH校验的页大小、OOB大小与你的Micron NAND(4096页/128 OOB)完全匹配。
  • 在mx6solo.cfg中明确启用硬件BCH支持(2009版本可能用软件BCH):
    CONFIG_SYS_NAND_BCH=y
    CONFIG_SYS_NAND_ECC_BCH_NUM=8
    

4. 验证烧录后镜像的完整性

烧录完成后,将NAND中的镜像读回内存并与原文件对比,确认没有坏块或烧录错误:

=> nand read 0x10800000 0x0 0xbdc00
=> cmp.b 0x10800000 0x12000000 0xbdc00

注:0x12000000是u-boot.imx通过TFTP加载的备用地址,需提前将原镜像加载到该地址。若对比不一致,需重新擦除NAND并烧录。

5. 确认硬件启动模式设置

检查开发板的启动拨码开关,确保设置为NAND启动模式,避免误触发MMC或USB启动路径。

内容的提问来源于stack exchange,提问作者Aïda Brahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:15:48