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.

am335x 在uboot中的nand ecc应用

我原来用的uboot是所购开发板厂家提供2011.9版本的,现在我自己做板子,音频、网络等接口芯片都重新根据需要做了调整,为了方便调试我的uboot也采用了2014.1版本,现在都已经基本完成,只剩下在boot中写文件系统,原来版本是通过nandecc选择软件ecc来写的文件系统,现在只是什么也不选择的写入,文件系统无法正常启动。因为从官网上下载的uboot中没有nandecc命令,我下载了官网上的2011.9里也没有这部分的内容,感觉是后来加上的,不知道是开发板厂家加的?还是ti官方加的?我把原来的nandecc考到2014.1版里,里面又有好多冲突的东西,一时之间不知道从哪下手了,请赐教

  • 首先问下,您打算用device tree吗?

    如果是,请使用我们ezsdk 7.0中的uboot,如果不是, 请使用ezsdk 6.0中的uboot。

    我们的uboot已经merge到mainline,但是用我们的sdk中的版本,稳定性更好。

  • 没用sdk7.0的uboot,如果是用这个稳定性好的话,那我就先移植sdk7.0的,谢谢

  • 你好,移植完了sdk7中的uboot2013.10之后,也仿照arch\arm\cpu\armv7\omap3\board.c把nandecc加入到我的移植的boot中,现在出现的问题是通过uboot的nandecc hw 命令然后nand write.i写uImage,然后再启动的时候也采用其方式读出uImage,kernel能够启动 ,如果文件系统是通过此uboot的nandecc sw写入的,就没法正常启动文件系统;如果文件系统是通过厂家提供的uboot的nandecc sw方式写入,则能够正常启动文件系统,厂家的nandecc 是调用ti81xx_nand_switch_ecc(),不知道怎样能够通过uboot正确的写入文件系统?

  • 我用SDK06.00.00里的U-boot烧写的NAND UBIFS(SDK7之前的版本),里面确实没有了nand ecc的命令,但是烧写之后是可以正常起来的。

    我会在论坛上把文档总结出来。

  • 如果您对device tree还不熟悉,建议使用ezsdk 6.0,毕竟这个版本的uboot资料毕竟多。

    在我们的uboot中,已经把nandecc默认配置为了BCH8,nandecc命令在uboot origin中已经关闭了,可以找cmd中找找,打开看看。

  • 我总结一篇制作NAND UBIFS的文档:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/59921.aspx

    不知道是否对您有所帮助

  • 看了您关于ubifs的总结,首先感谢您的支持,不过我的问题还是没有解决,同一个文件系统,如果用写入工具写入或者用以前的uboot tftpboot 82000000 ubi.img;nandecc sw ;nand write.i 82000000 780000 xxxxxxx ,此时的uboot是飞凌提供的2011.9版本的,文件系统写入可以正常启动 ,然后重新写入sdk7版本的uboot,内核和文件系统不动,系统照常能够正常运行,如果用sdk7版本的uboot重新写入文件系统则文件系统无法正常启动反复打印如下信息[    1.882843] UBI: VID header offset:          2048 (aligned 2048)
    [    1.889221] UBI: data offset:                4096
    [    1.895080] uncorrectable error :
    [    1.898773] uncorrectable error :
    [    1.902709] uncorrectable error :
    [    1.906555] uncorrectable error :
    [    1.910217] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 0:2048, read 512 bytes
    [    1.921325] Backtrace:
    [    1.923980] [<c0017d68>] (dump_backtrace+0x0/0x110) from [<c04c9e84>] (dump_stack+0x18/0x1c)
    [    1.932983]  r6:00000004 r5:df5a7000 r4:ffffffb6 r3:c06d2e48
    [    1.939056] [<c04c9e6c>] (dump_stack+0x0/0x1c) from [<c02860f0>] (ubi_io_read+0x1c4/0x39c)
    [    1.947875] [<c0285f2c>] (ubi_io_read+0x0/0x39c) from [<c0286820>] (ubi_io_read_vid_hdr+0x68/0x304)
    [    1.957519] [<c02867b8>] (ubi_io_read_vid_hdr+0x0/0x304) from [<c028b870>] (ubi_scan+0x2fc/0x154c)
    [    1.967071] [<c028b574>] (ubi_scan+0x0/0x154c) from [<c027fe5c>] (ubi_attach_mtd_dev+0x710/0xdcc)
    [    1.976531] [<c027f74c>] (ubi_attach_mtd_dev+0x0/0xdcc) from [<c0692e18>] (ubi_init+0x210/0x300)
    [    1.985900] [<c0692c08>] (ubi_init+0x0/0x300) from [<c000876c>] (do_one_initcall+0x3c/0x180)
    [    1.994903] [<c0008730>] (do_one_initcall+0x0/0x180) from [<c0672884>] (kernel_init+0x9c/0x130)
    [    2.004180] [<c06727e8>] (kernel_init+0x0/0x130) from [<c0040a3c>] (do_exit+0x0/0x67c)
    [    2.012603]  r5:c06727e8 r4:00000000
    [    2.016448] UBI warning: process_eb: valid VID header but corrupted EC header at PEB 0
    [    2.025604] uncorrectable error :
    [    2.029327] uncorrectable error :
    [    2.033203] uncorrectable error :
    [    2.037078] uncorrectable error :
    [    2.040740] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 1:2048, read 512 ,感觉是文件系统没有正确找到

  • 您好,我有查看了源码,默认的是ECC_BCH8_CODE_HW,我也把uboot中nandecc打开了,可是无论怎么设置hw/sw开关,用sdk7中uboot写入的ubi文件系统还是不能正常启动,我觉得好您说的device tree没有什么关系吧?应该还是nandecc开关的问题,但是不知道问题出在哪儿了?是不是omap_nand_switch_ecc函数哪里有问题?

  • 您好,我写的那个guide是用SDK06.00.00里面的U-boot验证的,不是SDK7的U-boot。

    SDK06.00.00里面确实没有nandecc这个命令了,但是烧写进去也没发现什么问题。

    我多问一下,您是在飞凌的板子上做的吗?

  • 是在飞凌的板子上做的,和板子应该没有关系

  • 将nand_base.c中的函数nand_scan_tail中case NAND_ECC_SOFT:下的if (!chip->ecc.size)去掉直接=256,用nandecc sw;nand write 写入的文件系统就好用了 

  • 请问您是在SDK07的U-boot上改的吗?另外飞凌板子上的NAND FLASH的型号是什么,我怀疑和NAND有关系。

  • 是因为nand的关系,writesize的关系

  • 是什么型号的NAND 啊?和我们EVM板上的不一样吧

  • 我的nandflash是K9F2G08U0B,不过从nand本身来看每页的字节数是应该是2048,跟踪看原来的writesize=2048,不知道为什么这个不行,必须改成256才好用

  • 请问具体是哪里改成256呢?

    我用的海力士2K一页的nand flash

    sdk6.0 中的 u-boot

    也碰到了这个问题,不知道怎么解决

  • 关于这个问题我在帖子的12楼有解答

  • 擦,都不发正确答案呐....

    http://e2e.ti.com/support/arm/sitara_arm/f/791/p/244832/856140#pi316653=2

     nand flash 子页问题,链接中绿色框框部分照着改完就OK

  • 亲,能否给我发一份,您的uboot源码吗?小弟我是菜鸟(邮箱:709372733@qq.com),正在学习,买的天嵌的开发板,但是uboot不是全开源的,学习起来很困难,万分感谢啊

  • 板子不同,会有所改动,学习方便,建议下载TI官方的开发包,里面内容详尽

  • TI的官方SDK包里面对外接NANDflash配置了吗?小弟我现在很迷惑对NAND的配置,大哥能否指教一下呢

  • TI官方的开发板上有nandflash,boot里也有对nandflash的设置,你可以下载下来看看,慢慢读一读源代码,不要太着急

  • 谢谢啊,我再认真的看一下啊。请教一个问题:烧写uboot.img或uboot.bin对内核的烧写格式有影响吗

  • 本人认为,烧写img和bin对内核应该没影响,受影响的应该是一级引导(要引导的是img还是bin的问题)。

  • 恩,好的,谢谢啊,哥

  • 请问,打印如下的信息,是不是说明uboot没问题了呢,大哥

    U-Boot 2014.10 (Sep 08 2015 - 20:45:08)

    Watchdog enabled
    I2C: ready
    DRAM: 512 MiB
    NAND: 1024 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment

    Net: <ethaddr> not set. Validating first E-fuse MAC
    cpsw, usb_ether
    Hit any key to stop autoboot: 0
    switch to partitions #0, OK
    mmc0 is current device
    SD/MMC found on device 0
    ** Unable to read file boot.scr **
    ** Unable to read file uEnv.txt **
    ** No partition table - mmc 0 **
    Card did not respond to voltage select!
    SD/MMC found on device 1
    Card did not respond to voltage select!
    ** Bad device mmc 1 **
    Card did not respond to voltage select!
    ** Bad device mmc 1 **
    Card did not respond to voltage select!
    ** Bad device mmc 1 **
    Booting from nand ...

    NAND read: incorrect device type in u-boot-spl-os

    NAND read: incorrect device type in kernel
    Bad Linux ARM zImage magic!
    U-Boot#