ATmega128单片机对128MB NAND Flash 芯片K<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />9F1G08U的读写<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在很多嵌入式应用中,常常要存储大量的历史记录,而有些记录可能一次就有可能需要存储到2年以上或者是更长,采用Flash来保存这些记录是最好的办法;但对于普通的Flash存储芯片,像AM29F080B最大也就1MB存储空间,不但无法满足有些应用,而且随着存储空间的加大其价格也是一个重要因素。而像NAND Flash由于其存储容量大,而价格也很便宜,因而对于相对价格敏感和需要大量历史记录的存储应用,就能够很好的满足其需要。
本站( www.supermcu.com )给客户设计的某个嵌入式应用中,就采用了K9F1G08U型号的NAND Flash芯片,其存储容量可以达到128MB。
有关K9F1G08U芯片的数据手册详细内容不再细说,在实际应用中,K9F1G08U采和Block和Page来管理其存储容量,而Block和Page与具体的行地址和列地址是一一对应的。
其中64Pages为1个Block,K9F1G08U共有1024Blocks,也就是说有65536Pages。
另外由于K9F1G08U是所有的命令,地址和数据是通过8个IO口来完成的,其中CLE引脚是用来锁存命令、ALE引脚是用来锁存地址、CE引脚为片选、WE和OE分别为读写引脚信号。因此,在程序设计的时候需要有“写命令”函数、“写地址”函数、“写数据”函数和“读数据”函数
以下是几个具体的基本函数采用ICCAVR编写:
void Write_K9F1G_Command(unsigned char WriteCommand)
{
K9F1G08U_CLE_H;
K9F1G08U_CS_L;
PUT_DATA=WriteCommand;
K9F1G08U_WR_L;
asm("nop");
asm("nop");
asm("nop");
K9F1G08U_WR_H;
K9F1G08U_CS_H;
K9F1G08U_CLE_L;
}
void Write_K9F1G_Address(unsigned char WriteAddress)
{
K9F1G08U_ALE_H;
K9F1G08U_CS_L;
PUT_DATA=WriteAddress;
K9F1G08U_WR_L;
asm("nop");
asm("nop");
asm("nop");
K9F1G08U_WR_H;
K9F1G08U_CS_H;
K9F1G08U_ALE_L;
}
void Write_K9F1G_Data(unsigned char WriteData)
{
PUT_DATA=WriteData;
K9F1G08U_WR_L;
asm("nop");
asm("nop");
asm("nop");
K9F1G08U_WR_H;
}
unsigned char Read_K9F1G_Data(void)
{
unsigned char temp;
K9F1G08U_RD_L;
asm("nop");
asm("nop");
asm("nop");
temp=GET_DATA;
K9F1G08U_RD_H;
return(temp);
}
通过以上基本函数就可以完成对K9F1G08U的块擦除操作、写数据和读数据了。
更多内容,我们的网站: www.supermcu.com
文章评论(0条评论)
登录后参与讨论