原创 单片机对128MBNAMDFlash芯片K9F1G08U的读写

2007-5-9 12:17 5294 8 8 分类: MCU/ 嵌入式

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采和BlockPage来管理其存储容量,而BlockPage与具体的行地址和列地址是一一对应的。


其中64Pages1BlockK9F1G08U共有1024Blocks,也就是说有65536Pages


    另外由于K9F1G08U是所有的命令,地址和数据是通过8IO口来完成的,其中CLE引脚是用来锁存命令、ALE引脚是用来锁存地址、CE引脚为片选、WEOE分别为读写引脚信号。因此,在程序设计的时候需要有写命令函数、写地址函数、写数据函数和读数据函数


    以下是几个具体的基本函数采用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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条