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.

nand 的ALE怎么算?



请问evm5517_v1\tests\nandflash这个例程中

擦除操作

// Start erase operation
NANDFLASH_CLE = CMD_ERASE;
NANDFLASH_ALE = (blocknum & 0x0003) << 6;
NANDFLASH_ALE = (blocknum & 0x03fc) >> 2;
NANDFLASH_ALE = (blocknum & 0x0c00) >> 10;
NANDFLASH_CLE = CMD_ERASE_CONFIRM;

中ALE为什么这么算,跟nand芯片的参数怎么结合对应起来?

  • 还有我如果用CS4,当执行完NANDFLASH_CLE = CMD_ERASE;,在地址0x700000+0x2000不应该是0x60吗,为什么我看是全0啊

  • feng wu2 说:
    // Start erase operation
    NANDFLASH_CLE = CMD_ERASE;
    NANDFLASH_ALE = (blocknum & 0x0003) << 6;
    NANDFLASH_ALE = (blocknum & 0x03fc) >> 2;
    NANDFLASH_ALE = (blocknum & 0x0c00) >> 10;
    NANDFLASH_CLE = CMD_ERASE_CONFIRM;

    这里是把block地址(即block号)放入三段地址的过程,对于板子上的这款NAND,block地址是从A15开始,第一个地址周期为A9-A16,所以要把block左移6位,第二步是将第一步的两位掉,填入A17-A24, 第三步是将第一,二步将取走了10位地址去掉,将剩下的地址送出去。

    关键在于要知道计算block地址是从第几位开始,下面这个贴子可以读一下:

    http://blog.csdn.net/feihuxiaozi/article/details/6943124

  • 非常感谢,已经解决了。

    原来我有个误区就是这个ALE我要给的是地址,也就是要算出我想进行读写的页的偏移地址。但是实际不是这样的

    这个ALE其实代表的是我要操作的第几块第几页,也就是在擦除的时候ALE就要告诉擦除第几块,而读写的时候ALE要告诉的是第几页。

    然后再看对应nand的datasheet中的地址周期的介绍就能很好理解了