分类:
2009-03-10 19:16:00
一周前写完nand flash驱动,想想刚写这个驱动的时候,都不知道从哪里入手,相信很多网友也曾经有过这个状态。写出来共享,希望大家能用到。
我用的是三星的nand flash 32M的。其他的也差不多!
首先当然是看flash芯片文档,不要想回避英文,必须面对的。如果感觉看不习惯,可以先上网查一下nand flash的应用的论文,里面肯定有相关的资料,看看flash是如何工作的,以便之后看flash英文文档时候,有一个重点。
在我看来,看nand flash文档首先要意识到nandflash是有坏block的,然后理解nand flash芯片的内部结构,大概可以把nandflash看成一个长方体,每个横截面都是一个页。32个页表示一个block。很多个block就组成了一个flash。而这个页的宽表示一个字节,由一个个bit组成的字节。页的长呢,就是表示一个页共有多少个字节。这个长的0~255是first区,256~511是second 区,还有一个备用区。
然后对写代码有用的就是读写操作过程,比如读吧,就是往里送一个命令,然后就在相应的引脚上等一个小时间,就可以读到数据了。需要注意的是,读也好 写也好,最后是需要有一个不短的延迟,才能写成功。这点需要在你的flash文档里找到,一定要去找,比如我的用的是32M的,就要找出10us,2ms等是时间,这个时间是写页的时间,擦除的时间。写代码的时候,一定要延迟这么长时间,才能写进入或者擦除成功。否则肯定失败。
除了延迟外,其他读写操作就是模拟时序了,这个不用我说,只要写过驱动,都知道。
值得注意的是,这次调试驱动,是用C写的代码,在优化方面忽视了,就是在往flash写入或者读出的代码里的地址,如0xffff2600等,一定要加上voilate来限制优化!!这点非常重要!
之后就是文件系统的编码了,这部分,和硬件关系不是很大,简单的文件系统,知道链表就OK了[转载请注明嵌入式先生,谢谢合作]。
嵌入式先生~2009.03.09晚