新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式系统中Nand-Flash的原理及应用

嵌入式系统中Nand-Flash的原理及应用

作者: 时间:2010-04-08 来源:网络 收藏

串行数据写入完成后,需要写入“页写入确认”指令10h,这条指令将初始化器件的内部写入操作。如果单独写入10h而没有前面的步骤,则10h不起作用。10h写入之后,K9F1208UOB的内部写控制器将自动执行内部写入和校验中必要的算法和时序,这时控制器就可以去做别的事了。
内部写入操作开始后,器件自动进入“读状态寄存器”模式。在这一模式下,当RE和CE为低电平时,可以读取状态寄存器。可以通过检测R/B的输出,或读状态寄存器的状态位(I/O 6)来判断内部写入是否结束。在器件进行内部写入操作时,只有读状态寄存器指令和复位指令会被响应。当页写入操作完成,应该检测写状态位(I/O 0)的电平。
内部写校验只对没有成功地写为0的情况进行检测。指令寄存器始终保持着读状态寄存器模式,直到其他有效的指令写入指令寄存器为止。

1.2.3 块擦除
擦除操作是以块为单位进行的。擦除的启动指令为60h,块地址的输入通过两个时钟周期完成。这时只有地址位A14到A24是有效的,A9到A13则被忽略。块地址载入之后执行擦除确认指令D0h,它用来初始化内部擦除操作。擦除确认命令还用来防止外部干扰产生擦除操作的意外情况。器件检测到擦除确认命令输入后,在WE的上升沿启动内部写控制器开始执行擦除和擦除校验。内部擦除操作完成后,检测写状态位(I/O 0),从而了解擦除操作是否有错误发生。

1.2.4 读状态寄存器
K9F1208UOB包含一个状态寄存器,该寄存器反应了写入或擦除操作是否完成,或写入和擦除操作是否无错。写入70h指令,启动读状态寄存器周期。状态寄存器的内容将在CE或RE的下降沿处送出至I/O端口。
器件一旦接收到读状态寄存器的指令,它就将保持状态寄存器在读状态,直到有其他的指令输入。因此,如果在任意读操作中采用了状态寄存器渎操作,则在连续页读的过程中,必须重发00h或50h指令。

1.2.5 读器件ID
K9F1208UOB器件具有一个产品鉴定识别码(ID),控制器可以读出这个ID,从而起到识别器件的作用。读ID的步骤是:写入90h指令,然后写入一个地址00h。在两个读周期下,厂商代码和器件代码将被连续输出至I/O口。
同样,一旦进入这种命令模式,器件将保持这种命令状态,直到接收到其他的指令为止。

1.2.6 复位
器件提供一个复位(RESET)指令,通过向指令寄存器写入FFh来完成对器件的复位。当器件处于任意读模式、写入或擦除模式的忙状态时,发送复位指令可以使器件中止当前的操作,正在被修改的存储器宏单元的内容不再有效,指令寄存器被清零并等待下一条指令的到来。当WP为高时,状态寄存器被清为C0h。

本文引用地址:https://www.eepw.com.cn/article/151954.htm

2 系统硬件连线及软件设计
2.1硬件连线
K9F1208UOB和S3C2440A的接口电路如图2所示。

图2 K9F1208UOB与S3C2440A硬件电路
2.2 软件设计
步骤1:初始化
利用ADS1.2等工具建立工程文件nandflash_test.mcp,在Nand.c文件中Test_K9S1208子函数实现了主要测试功能。
gpacon = rGPACON;
rGPACON=(rGPACON ~(0x3f17))|(0x3f17);
首先备份rGPACON的内容,再设置GPA17-22的工作方式。然后调用初始化函数。
NF8_Init0;//初始化函数
初始化函数的实现源码如下:
rNFCONF=(TACLS12)|(TWRPH08)I(TWRPH14)|(00):
rNFCONT=(013)|(012)|(010)|(09)|(08)|(16)|(15)|(14)|(11)|(10):

步骤2:读器件ID码
由于S3C2440A中没有像支持SDRAM 一样提供直接与Nand-flash存储器的接口,读写的过程要靠软件编程来完成。初始化后,就可以对Nand-Flash进行操作了。
程序调用NF8_Print_Id()子函数读出器件ID码。
id=NF8_CheckId(); //继续调用子函数
device=(U8)id;
maker=(U8)(id>>8):
Uart_Printf(Maker:%x,Device:%x ,maker,device);
NF8_Print_Id()源码如下:
NF_CMD(0x90);//写入90h指令
NF_ADDR(0x0);//写入地址00h
for(i=0;i10;i++);
Uart_Printf(NFSTAT:0x%x ,rNFSTAT);
id=NF_RDDATA8()8;//Maker code 0xec读出ID值
id |=NF_RDDATA8();
//Devide code(K9S1208V:0x76),(K9K2G16U0M:0xca)

步骤3:页读写程序
本实验实现了某页的写及读出验证功能。Test_NFS_Rw子函数实现这一功能。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭