关于NAND FLASH的读写
从网上下载了NXP公司发布的LPC2200的NAND FLASH读写包,修改了初始化部分以及地址部分,能读到芯片的ID,但写了一个测试程序,先擦除块,然后写一下块,最后读这一个块,读出来的数据第一个为0X40,其它为0XFF,把BCFG3中的DLY,WTS1,WTS2改快些, 值为0X240,还是不行, 0XFF变成0X00了.
尝试做了以下测试:
1) 在读写时每一个命令后加入延时,还是不行.
2) 把整个芯片都ERASE,不行
3) 重新换一块芯片,不行
4) 把1208的CS改为BANK4的CS3, 还是不行(注:一定要用IO来管这个1208的CS,后面测试能读写时再换回CS3,就不能读写了)
5) 在读写命令中在第二个后加入读R/B的状态, 当前是读状态寄存器的值来实现的, 这样做还是不行.
6) 在网上找了一些代码,看了一下,还不如NXP的代码整洁.重新看DATASHEET(说实在的,以前只是在44B0上用过一次NAND FLASH来做U盘,这部分代码并没我仔细调试过), 发现NXP在对地址给值时有一些不同.
以下是:
nandWr_Cmd( NAND_CMD_BLOCKERASE_I );
nandWr_Addr( ( unsigned short ) ( ( NandAddr >> 9 ) & 0xff) ); //low block address
nandWr_Addr( ( unsigned short ) ( ( NandAddr >> 17 ) & 0xff) ); //high block address
nandWr_Cmd( NAND_CMD_BLOCKERASE_II );
再看一下SHEET上的时序, 它应包括送三个CYCLE的地址, K9F1208是64M, 算下来是:0X4000000, 有26地址值, 这里应加入
nandWr_Addr( ( unsigned short ) ( ( NandAddr >> 25 ) & 0xff) );
把它加入后,能正常读写了.
在这里记录下来,以便有同样经历的朋友能看到,以免再走弯路.
文章评论(0条评论)
登录后参与讨论