This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335 u-boot-2014.07-g7e537bf,nand启动时需要6秒时间建立坏块表



移植u-boot的nand驱动,nand芯片型号是S34ML08G101TF100。使用make am335x_evm_nandboot_config,此时环境变量是保存在NAND.u-boot-env分区的,每次启动后会卡在

MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1

这里要等大约6秒钟才会继续继续运行,跟踪代码发现u-boot此时在建立读取nand上的环境变量,而读取nand需要跳过坏块,因此要先建立坏块表。

最终是在执行create_bbt函数时花费了6秒钟时间,扫描坏块表这么慢?同样的nand芯片,三星的210 u-boot启动就很快。

请教如何解决建立SDK u-boot建立BBT太耗时的bug。

打印信息如下:

U-Boot SPL 2014.07-00107-ga6ef75a-dirty (Dec 04 2015 - 11:31:42)
boot device - 8
reading u-boot.img
reading u-boot.img


U-Boot 2014.07-00107-ga6ef75a-dirty (Dec 04 2015 - 11:31:42)

I2C:   ready
DRAM:  512 MiB
NAND:  1024 MiB
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1

  • am335的nand读写速度,真心慢,没有开启DMA的情况下,读取同样大的数据,时间是s5pv210的的2倍,

  • 请问您用的是什么版本的sdk? 另外,是否根据nand flash配置过uboot中gpmc的时序。

  • SDK 1.0 2.0 和以前的7.0都试过,包括denx官网的u-boot也试过,u-boot 2013.10 2014.07 2015.04 2015.07 都试过,目前发现只有u-boot 2013.10 这个版本还算正常,1GB的nand 大概需要2秒时间建立坏块表。其他的版本都大约需要6~7s。

    nand时序都是一样的,改了也没多大效果,甚至采用dma,速度也没怎么提升。

    修改的时序设置:

    #define M_NAND_GPMC_CONFIG1 0x00000800    /*[11-10]DEVICETYPE =0x2=NAND, [9-8]MUXADDDATA = 0*/
        
    #define M_NAND_GPMC_CONFIG2 0x00030300    /* [20-16]CSWROFFTIME = CSRDOFFTIME = tCS+tCH = 25ns, set 3clk = 30ns*/
        
    #define M_NAND_GPMC_CONFIG3 0x00030300    /* ADVWROFFTIME ADVRDOFFTIME =(WEOFFTIME)= tCLS+tCLH = 12+5= 17ns, we set it to 30ns */
        
    #define M_NAND_GPMC_CONFIG4 0x02000000    /* [28-24]WEOFFTIME = tWP = 12ns, WEONTIME = 0 , OEAADMUXOFFTIME = 0 clk, OEONTIME= 0 */
        
    #define M_NAND_GPMC_CONFIG5 0x00020404    /* [20-16]RDACCESSTIME=tRP = 12ns , WRCYCLETIME=RDCYCLETIME = 25ns */
        
    #define M_NAND_GPMC_CONFIG6 0x02000000    /* [28-24]WRACCESSTIME=tWP = 12ns,*/ /*CYCLE2CYCLEDELAY= 0 clk,CYCLE2CYCLESAMECS= 0*/
        
    #define M_NAND_GPMC_CONFIG7 0x00000040     /*[6]CSVAILD = 1, [5:0]BASEADDRESS=0x0,*/
        /*CSi base address where i = 0 to 3 (16 Mbytes minimum granularity).Bits 5 to 0 correspond to A29, A28, A27, A26, A25, and A24*/