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 的 nor flash 可以读取数据 但是无法写入



nor flash使用gpmc xip mux1模式, 驱动使用的是cfi,可以成功地识别并初始化flash,所以应该读取是没问题,

既然可以读取那说明硬件设计上没有问题,那么就可能是gpmc时序的问题,时序我用的是Technical Reference Manual

中的26.1.7.2 GPMC XIP Timings” ,我把驱动中的调试打印打开,擦写的执行过程中没有出现任何错误,但确实没有写到flash中,

所以我就搞不清楚到底是哪的问题了,有哪位高手能指点一下,非常感谢!


  • 从SDK06开始,就支持Nor Flash的U-boot启动和烧写了,你参考过下面的文档么:

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/30869.aspx

  • 我用的是pinmux mode0,SN74HC574NSR的锁存器,S29GL128N的nor flash(64M、16bit),

    设计方面和http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/30869.aspx是一致的。

    只是软件方面如果按SDK06 u-boot中的GPMC_CONFIG,flash甚至都识别不到,后来我调试发现是gpmc的读取

    周期不够,所以我增加了其周期就好了,但是写入还是不行。

    我也老老实实地按TRM26.1.7.2.1的 GPMC XIP Timings改了GPMC_CONFIG,

    但结果仍是可以成功读取,写入过程没有报任何错误就是无法成功写入。

    之后我尝试了很多种GPMC_CONFIG,结果仍一样,有的时序执行过程可能会报

    flash_is_busy: 1
    flash_is_busy: 1
    flash_is_busy: 1

    Flash buffer write timeout at address 8000000 data 86c686c6
    Timeout writing to Flash的错误,即使没报任何错误也是无法成功写入的,

    所以我就没任何头绪了,希望您能帮忙分析一下,问题可能出在什么地方,谢谢!

    的错误。

    通过调整gpmc的时序,flash_is_busy: 1可能会更早出现或更晚出现,不过最终还是不行。

    那么是否gpmc时序的问题,导致的这一系列情况。

  • 之前uboot无法成功擦写nor flash的问题,最后发现是芯片本身坏了,

    但是,也发现了若nor flash中有数据存在,则已uart引导启动时就无法识别到nor flash。

    这个问题已经在多块板子上做了多次试验,结果都是如此,只要把flash中的数据擦除掉就马上可以识别到了。

    不知有人是否遇到过这个问题。

  • 我现在在内核中调试nor flash,使用的是physmap、cfi_cmdset_0002的驱动,可以成功识别芯片,可以成功读取数据,但是擦除和写入都有问题,

    后来我自己编写了驱动,读取擦写有时却能成功。

    不知为何我在am335x上使用nor flash会遇到如此多的非常规问题,不知哪位高手能指点一下,非常感谢。

  • 问题的原因终于找到了。

    我发现内核中的nor flash驱动不会对擦写保护做处理,如果你在uboot中把某些扇区的保护打开了,那么之后不管你是在内核中还是用户层想要擦写这些扇区,是永远都不可能成功的。

  • 你是说在uboot中把相关的扇区保护了吗?

    然后就不能在linux中进行擦写?

  • 是的,我进行了很多测试,可以确定是这个原因。