nan_flash nand_flash.c

ice197983 2007-11-25 10:18:10
/*
www.another-prj.com

author: caiyuqing

本代码只属于交流学习,不得用于商业开发
*/
#include "s3c2410.h"
#include "nand_flash.h"
static unsigned char seBuf[16]={0xff};
//--------------------------------------------------------------------------------------
unsigned short nf_checkId(void)
{
int i;
unsigned short id;
NF_nFCE_L(); //chip enable

NF_CMD(0x90); //Read ID
NF_ADDR(0x0);
for(i=0;i<10;i++); //wait tWB(100ns)

id=NF_RDDATA()<<8; // Maker code(K9S1208V:0xec)
id|=NF_RDDATA(); // Devide code(K9S1208V:0x76)

NF_nFCE_H(); //chip enable
return id;
}
//--------------------------------------------------------------------------------------
static void nf_reset(void)
{
int i;
NF_nFCE_L(); //chip enable
NF_CMD(0xFF); //reset command
for(i=0;i<10;i++); //tWB = 100ns.
NF_WAITRB(); //wait 200~500us;
NF_nFCE_H(); //chip disable
}
//--------------------------------------------------------------------------------------
void nf_init(void)
{
rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
// 1 1 1 1 1 xxx r xxx, r xxx
// En r r ECCR nFCE=H tACLS tWRPH0 tWRPH1
nf_reset();
}
//--------------------------------------------------------------------------------------

void nf_read(unsigned int src_addr,unsigned char *desc_addr,int size)
{
int i;
unsigned int column_addr=src_addr%512; // column address
unsigned int page_address=(src_addr>>9); // page addrress
unsigned char *buf=desc_addr;
while((unsigned int)buf<(unsigned int)(desc_addr)+size)
{
NF_nFCE_L(); // enable chip
if(column_addr>255) // 2end halft
{
NF_CMD(0x01); // Read2 command. cmd 0x01: Read command(start from 2end half page)
}
else
{
NF_CMD(0x00); // 1st halft?
}
NF_ADDR(column_addr&0xff); // Column Address
NF_ADDR(page_address&0xff); // Page Address
NF_ADDR((page_address>>8)&0xff); // ...
NF_ADDR((page_address>>16)&0xff); // ..
for(i=0;i<10;i++); // wait tWB(100ns)/////??????
NF_WAITRB(); // Wait tR(max 12us)

// Read from main area
for(i=column_addr;i<512;i++)
{
*buf++=NF_RDDATA();
}
NF_nFCE_H(); // disable chip
column_addr=0;
page_address++;
}
return ;
}
...全文
50 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧