imx6q的nandflash启动原理和填坑

imx6q的nandflash启动原理和填坑

 

近期公司有新的需求把emmc启动,调整到nandflash,因为emmc的bga焊盘比较小,间距比较小,不利于生产,而nandflash是TSOP的。手焊都是ok的。

1.修改linux的device tree文件使其可以加载驱动和文件系统。

 

主要是修改pinmux。和使gpmi中的status为okay。同时uboot传入参数:mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs) 

启动linux会发现/dev目录下有mtd0,mtd1,mtd2,mtd3四个分区。当然你需要挂载文件系统(ubifs)你需要

flash_erase /dev/mtd3 0 0
 ubiformat /dev/mtd3
 ubiattach /dev/ubi_ctrl -m 3
 ubimkvol /dev/ubi0 
  mkdir -p /mnt/mtd3
 mount -t ubifs ubi0:rootfs /mnt/mtd3

这样你就挂载上文件系统了,可以df一下。如果你需要优化nandflash时序你可以修改驱动里面的时序代码,

这是freescale默认的值,是any device都支持的,如何对速度有要求的同志还是需要修改的,比如我的项目就是对速度有要求的。

这个是我根据MT29F8G08ABACAWP的数据手册修改的。目前测试蛮稳定的,速度也有提升百分之30以上。

 

2.修改uboot对nandflsah的支持。

我是在sabresd板子上的基础上修改的uboot,打开board/freescale/mxsabresd/mx6sabresd.c添加函数

在include/configs/mx6sabresd_common.h

添加#define CONFIG_NAND_BOOT。

这样make一下就ok了。在uboot下就可以使用nand info ,nand write等命令。

前面的两部都很简单就搞定了,当设置gpio使芯片从nandflash时总是不行。

3。从nandflash启动。

我是使用mfg用otg来烧写nandflash,如上图是nandflash烧写的脚本。

烧写完就是从nandflash启动不了。我花了三天时间研究了ivt,bootdata,dcd,这些结构,和emmc下是否不一样(我的uboot以前是从emmc启动),发现是一样的也是预留的1k空间,又花了一天时间研究了uboot的

烧写工具kobs-ng的源码,发现烧写FCB时是没有写oob区的ECC数据的,和数据手册描述的是不一样的,就修改了kobs-ng源码使其写FCB时也ECC,可是还是启动不了。

把烧写到nandflash里面的FCB,DBBT一个个比对也没发现有什么不对。uboot.imx头的ivt,DCD一个个对也是没问题的。当时想的是看来要重新画板子留出JTAG了,看看启动时ocram的0x907400是否有

uboot.imx的ivt,bootdata,dcd,因为imx6q启动是bootrom会把nandflash的4k数据拷到0x907400。我们也使用示波器看过波形,在nandflash引脚确实是有时序的。

最后在看DCD数据时发现了

其中

0x20C_4078h这个寄存器是enable时钟的。而sabresd板子里面是没有nandflash的所以关掉了时钟。这也是很多在人在nxp community问nandflash启动不了的原因,很多人是在sabresd软件基础上加了nandflash。

望大家共勉,能解决大家从nand启动的问题。

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值