前面学习了NorFlash的芯片手册,了解了NorFlash的擦除与编程流程。与u-boot源代码对比,符合NorFlash的指令流程。
擦除指令序列为:
[0xAAA] = AA
[0x554] = 55
[0xAAA] = 80
[0xAAA] = AA
[0x554] = 55
[SectorAddr] = 30
对应在flash.c文件里的源代码为:
在状态判断时,从刚擦除的扇区地址上读取数据。如果正常,则返回值的DQ7=1。如果DQ5上的值为1,则说明擦除失败。
现在的问题是,上述的两种情况都没有出现。这是为什么呢?
我记得前面看到,在解除扇区保护的时候,u-boot只置了对应扇区保护位的标置,并没有对芯片进行实质性的操作。详见
《U-Boot调试笔记六》。
其中CFG_FLASH_PROTECTION并没有定义,是不是与这个有关系?
可是,在u-boot/board/my2440/flash.c文件里没有找到 flash_real_protect() 函数。
问题在哪里?
我觉得,最好在网上去找找资料。这样闭门造车了不是个办法。或者看一下现成的Vivi是怎么做的。