u-boot 2016.03支持nand flash boot

工作背景:

目标板:imx6ul SOC+底板    u-boot:uboot2016.03

nand flash: Micron MT29F8G08ABABAWP 1G

kernel启动过程中关于nand flash的打印信息如下:

===============================

nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x38
nand: Micron MT29F8G08ABABAWP
nand: 1024 MiB, SLC, erase size: 512 KiB, page size: 4096, OOB size: 224
gpmi-nand 1806000.gpmi-nand: enable the asynchronous EDO mode 4

Scanning device for bad blocks
8 ofpart partitions found on MTD device gpmi-nand
Creating 8 MTD partitions on "gpmi-nand":
0x000000000000-0x000000800000 : "boot"
0x000000800000-0x000000a00000 : "logo"
0x000000a00000-0x000000b00000 : "ENV"
0x000000b00000-0x000000e00000 : "DTB"
0x000000e00000-0x000001600000 : "kernel"
0x000001600000-0x000001700000 : "DTBbak"
0x000001700000-0x000001f00000 : "kernelbak"
0x000001f00000-0x000040000000 : "rootfs"

gpmi-nand 1806000.gpmi-nand: driver registered.

===================================

但是u-boot 2016.03在引导OS启动过程中关于nand flash 会有如下报错:

NAND read from offset 600000 failed -74

*** Warning - readenv() failed, using default environment

NAND read from offset 800000 failed -74

0 bytes read: ERROR

NAND read from offset e00000 failed -74

0 bytes read: ERROR

NAND read from offset b00000 failed -74

0 bytes read: ERROR

从打印信息的read error 来看,是我们从nand flash的 每个偏移位置都没有读到有效数据,

但是执行md 0x80800000 0x100 会发现已经从flash(这样测试的是0xb00000偏移位置读)读出数据到ram了,部分读出数据如下:


跟踪到这步我依然不确定问题出现在那了,

接下来,我将整个uboot擦除:

=> nand erase.chip

之后在uboot中就可以正确读取nand flash 中的数据。


擦除过程就是写入全ff,所以读取均是ff。


当我将u-boot 2016.03源码根目录下的文件include/configs/mx6ul_14x14_evk.h 做如下修改后:

第一条报错问题解决。

事实上我在kernel中(dts中)对nand flash进行了分区,我在u-boot的env中将flash分区规划同kernel中对mtd 分区规划保持一致。

但是u-boot对nand 的每一个物理偏移的读 都不正确。

----------------------------------------------------------------------------------------------------------

事实上,以上我所描述的问题,对于我来说是个必然,原因是我没有搞清楚 nand 控制器 hw ecc/soft ecc的原理。我是SD卡引导烧写的:ramdisk(而且我是用的linux 3.14.18版SDK中的ramdisk) 中通过linuxrc 脚本进行的flash erase/nand write,reset/reboot后进行的nand read,也即是写入的ecc和我读出的ecc不一致。上来饶了一大圈,瞎搞,无知者要命。

继续我以下正确的调试步骤:

1. 将要烧写到nand flash上的image loading to SD card, 在u-boot 2016.03中进行如下操作:


2. 

3. 


4. 


5. 


发现在u-boot中对裸设备(不带任何fs)nand进行write/read是没有failed -74的问题的,证明了NXP提供的u-boot 2016.03中的nand flash驱动是没问题,ecc逻辑也是没问题的,不用在扎到源代码中出不来了!!!

在u-boot中更新dtb和kernel,事先我将rootfs已经解压到nand flash的第7的分区:

update kernel:


update dtb:


=> run nandargs

=> run bootnand

本篇到此结束哈哈!

给自己的关键提示:核心原理不明确,以及工作习惯有时会给自己带来灾难,老妈子我歇了三年,快把自己歇菜了,必须得加快进步速度!

并且时刻想着分析代码时、运行时问题。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值