《NORFLASH NANDFLASH毕业论文.doc》由会员分享,可在线阅读,更多相关《NORFLASH NANDFLASH毕业论文.doc(42页珍藏版)》请在三一办公上搜索。
1、湖 北 大 学本 科 毕 业 论 文 (设 计)题 目 税控机软件测试 基于44B0的Nandflash底层驱动程序设计 姓 名 解添津 学 号 2006221105220017 专业年级 06级电子科学与技术 指导教师 陈 勇 职 称 讲 师 2010年05月08日目录1 绪论- 1 -1.1 课题研究的背景和国内外现状- 1 -1.2 课题研究的意义- 2 -1.3 课题研究的内容- 2 -2 NANDFLASH操作论证- 2 -2.1 Nandflash的结构及器件特性分析- 2 -2.2 Nand Flash的寻址- 3 -2.3 Nandflash引脚功能及指令集- 4 -3 NAN
2、DFLASH底层程序的设计及实现- 5 -3.1 K9F5608U0D与S3C44B0X的接口设计- 5 -3.2 Nandflash底层程序的实现与设计- 7 -3.3 Nandflash底层程序设计- 17 -4 试验验证与开发板的使用- 20 -4.1 通过J-TAG下载U-BOOT- 20 -4.2 超级终端的设置- 21 -4.3 使用U-BOOT运行Nandflash底层驱动- 24 -4.4 Nandflash操作论证- 26 -5结论和展望- 29 -5.1 结论- 29 -5.2 展望- 30 -参考文献- 31 -税控机软件测试基于44B0的Nandflash底层驱动程序设
3、计摘要三星公司推出的16/32位RISC处理器S3C44B0X为手持设备和一般类型应用提供了高性价比和高性能的微控制解决方案。为了降低成本,S3C44B0X提供了丰富的内置部件。但是唯一的不足,就是没有Nandflash的专用控制器。而Nandflash由于其低成本以及大容量,已经广泛的应用到U盘,SD卡,固态硬盘中去。而在S3C44BOX的设计中,一味的使用NOR FLASH,对于大数据的存储是相当不利的。文章通过对Nandflash的时序模拟,通过NorFlash中的底层程序引导Nandflash的操作,使S3C44B0X也能与Nandflash连接,从而可以实现存储,读取内部的数据。可以
4、通过开发板上实现读取Nandflash的ID数据、读取Nandflash中数据内容、擦除块中的数据、在空的空间写入指定的数据,通过串口在windows中的超级终端显示读出的数据,以及写后再读出操作的数据,以证实确认对Nandflash进行了读、写、擦除等操作的执行。文章最后对所做的工作和取得的结论进行了总结。【关键词】Nandflash ARM7 S3C44B0X 块 页 字节Software Testing Of Fiscal Cash RegisterDrive Program Design According to the Nandflash first floor with of 44
5、B0AbstractThree star companies release of 16/32 RISC processor S3C44B0X for held equipments and general type application to provide Gao Xing4 Jia4 ratio and high performance of tiny control solution.For decline low cost, the S3C44B0Xs provided abundantly inside place a parts, such as:8 KB cache, int
6、ernal SRAM, LCD controller.But the only shortage be the appropriation controller which has no Nandflash.But Nandflash because it low cost and big capacity, have already extensively applied to U dish, SD card, go to in the solid hard drive.But persistently use NOR FLASH in the S3C44BOXs design, for b
7、ig data of saving is very disadvantageous.The article passes to imitate the Nandflash cycle time, pass the operation of the leading Nandflash of the first floor procedure in the NorFlash and make the S3C44B0Xs can also link with Nandflash, keep both keep and read internal data.Combine in developping
8、 plank realization, and pass a string of data that reads in the super terminal manifestation in the windows, and write after read again the data for operate really carried on to read to the Nandflash by confirm, write and wipe etc. operation of performance.Article end to the work do with obtain of t
9、he conclusion carried on summary.【Key words】 Nandflash ARM7 S3C44B0X Block Page Byte1 绪论1.1 课题研究的背景和国内外现状1.11 ARM简介ARM 即Advanced RISC Machines的缩写,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。1991 年 ARM 公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用 ARM技术知识产权( IP )核的微处理器,即我们通常所说的 ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线
10、系统等各类产品市场,基于 ARM 技术的微处理器应用约占据了 32 位 RISC 微处理器 75 以上的市场份额, ARM 技术正在逐步渗入到我们生活的各个方面。ARM 公司是专门从事基于 RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的 ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的 ARM 微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用 ARM 公司的授权,因此既使得 ARM 技术获得更多的第三方工具、制造、软件的支持,又使整
11、个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。 ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和众多合作伙伴。当前有5个产品系列ARM7、ARM9、ARM9E、ARM10和SecurCore。而民用中最常用的就是ARM7和ARM9。其中,ARM7系列,优化用于对价位和功耗敏感的消费应用的低功耗32位核,有: 嵌入式ICE-RT逻辑; 非常低的功耗; 三段流水线和冯诺依曼结构,提供0.9MIPS/MHz。1.12 三星公司S3C44B0X简介S3C44B0X采用了ARM7TDMI内核,0.25um工艺的CMOS标准宏单元和存储编译器。它的低功耗精简和出色的全静
12、态设计特别适用于对成本和功耗敏感的应用。同样S3C44B0X还采用了一种新的总结结构,即SAMBAII(三星ARM CPU嵌入式微处理器总线结构)。 S3C44B0X的杰出特性是它的CPU核,是由ARM公司设计的16/32位ARM7TDMI RISC处理器(66MHz)。ARM7TDMI体系结构的特点是它集成了Thumb代码压缩器,片上的ICE断点高度支持,和一个32位的硬件乘法器。10S3C44B0X通过提供全面的、通用的片上外设,大大减少了系统电路中除处理器以外的元器件配置,从而最小化系统的成本。 1.13 Nandflash简介NOR 和NAND 是现在市场上两种主要的非易失闪存技术。I
13、ntel 于1988 年首先开发出NOR flash 技术,彻底改变了原先由EPROM 和EEPROM 一统天下的局面。紧接着,1989 年,东芝公司发表了NAND flash 结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。相“flash 存储器”经常可以与相“NOR 存储器”互换使用。但是经过了十多年之后,仍然有相当多的硬件工程师也搞不清楚NAND 闪存技术相对于NOR 技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR 闪存更适合一些。而NAND 则是高数据存储密度的理想解决方案。NANDFLAH是一种快闪记忆体,以储存数据为主,又称为Da
14、ta Flash,晶片容量大,目前主流容量已达2GB。现在市面上的常见的优盘、MP3和MP4等数码设备的存储系统都是采用nandFlash存储芯片来实现的。nandFlash价格便宜量又足,性价比很高,并且十分轻便,抗震性也很不错,很适合用来做数码产品。生产nandFlash芯片的厂商主要有Samsung、Hynix、Micron、STMicroelectronics 、Toshiba等。现在单片的nandFlash芯片的存储容量已经可以做到4GB。很难想像,在一个大小只有12*20*1.2mm的芯片里可以做到如此的容量。想想以后如果现在计算机的主要存储设备硬盘被nandFlash芯片代替,那
15、计算机将是另一番景象,更轻便,更稳定。很多厂商都在打这方面的主意,包括intel、samsung。NOR 的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM 中。NOR 的传输效率很高,在14MB 的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NAND 结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash 的管理和需要特殊的系统接口。1.2 课题研究的意义由于NANDFLASH的困难在于flash 的管理和需要特殊的系统接口。
16、而S3C44B0X采用的是ARM7TDMI的内核,并没有像ARM9一样提供了专用的Nandflash的硬件接口,Nandflash并不能像Nor Flash、SDRAM与专用接口相连后直接使用。如果有像ARM9一样专用接口,就可以通过硬件的方式来控制Nandflash的时序,而采用ARM7的S3C44B0X中只使用Nor Flash就不能满足对大数据量的存储要求,想要实现Nandflash在44B0上的存储功能,只能通过软件控制I/O口的方式,解决Nandflash的时序问题。所以在44B0上想要完成对Nandflash的操作,必须通过通用I/O口,用底层驱动的方法,对其进行时序的操作,以实现
17、Nandflash在ARM7上的功能实现,包括功能有:读取,擦除,写入,坏块的判断和处理以及数据的校验。由于单从Nandflash中读出的数据,是无任何意义的,而这些数据只有在上层软件的组织下,才能获取相应的信息,如WORD程序可以将Nandflash上的word数据连接起来后,可以在电脑中显示出来。而这些都是上层软件中的复杂操作,本文不做介绍,而本文将通过从硬件上的连接,到软件上的支持,一步步来实现Nandflash的操作,并通过串口与windows中的超级终端通信,验证底层驱动对Nandflash的操作的存在性,以及正确性。1.3 课题研究的内容三星公司推出的16/32位RISC处理器S3
18、C44B0X为手持设备和一般类型应用提供了高性价比和高性能的微控制解决方案。为了降低成本,S3C44B0X提供了丰富的内置部件。但是唯一的不足,就是没有Nandflash的专用控制器。而Nandflash由于其低成本以及大容量,已经广泛的应用到U盘,SD卡,固态硬盘中去。而在S3C44BOX的设计中,一味的使用NOR FLASH,对于大数据的存储是相当不利的。文章通过对Nandflash的时序模拟,通过NorFlash中的底层程序引导Nandflash的操作,使S3C44B0X也能与Nandflash连接,从而可以实现存储,读取内部的数据。可以通过开发板上实现读取Nandflash的ID数据、
19、读取Nandflash中数据内容、擦除块中的数据、在空的空间写入指定的数据,通过串口在windows中的超级终端显示读出的数据,以及写后再读出操作的数据,以证实确认对Nandflash进行了读、写、擦除等操作的执行。文章最后对所做的工作和取得的结论进行了总结。2 Nandflash操作论证在正原电气股份有限公司的产品税控机上,使用的Nandflash为三星公司的K9F5608U0D,所以为了取材的方便,我在毕业设计中使用的就是32M的Nandflash:K9F5608U0D。2.1 Nandflash的结构及器件特性分析正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nandflash也
20、分为若干块(block),每个块分为若干页(page)。一般而言,块、页之间的关系随着芯片的不同而不同,而K9F5608U0D的分配则如图2-1:图2-1 K9F5608U0D结构图我们讨论的K9F1208U0B总共有2048 个Blocks,故我们可以知道这块flash的容量为2048 *(32 *528)= 34603008 Bytes = 33 MB。但事实上每个Page上的最后16Bytes是用于存贮检验码和其他信息用的,并不能存放实际的数据,所以实际上我们可以操作的芯片容量为2048 *(32 *512) = 33554432 Bytes = 32 MB由 上图所示,1个Page总共
21、由528 Bytes组成,这528个字节按顺序由上而下以列为单位进行排列(1列代表一个Byte。第0行为第0 Byte ,第1行为第1 Byte,以此类推,每个行又由8个位组成,每个位表示1个Byte里面的1bit)。这528Bytes按功能分为两大部分,分别是数据存储区域(Data Field)和扩展存储区域(Spare Field),其中Spare Field占528Bytes里的16Bytes,这16Bytes在读写操作的时候存放校验码用的,一般不用做普通数据的存储区,除去这 16Bytes,剩下的512Bytes便是我们用于存放数据用的Data Field,所以一个Page上虽然有52
22、8个Bytes,但我们只按512Bytes进行容量的计算。2.2 Nand Flash的寻址由于Nand Flash的巧妙设计,把数据线和地址线复用,而数据线只有8位,所以地址寄存器把一个完整的NandFlash地址分解成Column Address与Page Address.进行寻址。并且对Nandflash寻址进行3个周期的输入后,巧妙的解决了8位数据线寻址地址短的特点。这样的设计,也成了Nandflash的一个优势所以,因为不同大小的的SDRAM,Norflash在连接时,由于容量的不同,造成了地址线位数的不同,所以在连接时,要按具体情况连接。而Nandflash由于数据线和地址线复用,
23、解决了硬件上的连接问题,只要在操作程序上做相应的修改就行了。 Column Address: 列地址。Column Address其实就是指定Page上的某个Byte,指定这个Byte其实也就是指定此页的读写起始地址。Page Address:页地址。由于页地址总是以512Bytes对齐的,所以它的低9位总是0。确定读写操作是在Flash上的哪个页进行的。列地址和页地址的寻址方法,具体如下表2-1:表2-1 Nandflash寻址周期表I/O 0I/O 1I/O 2I/O 3I/O 4I/O 5I/O 6I/O 71周期A0A1A2A3A4A5A6A72周期A9A10A11A12A13A14A
24、15A163周期A17A18A19A20A21A22A23A24上表中,第1周期为列地址,第2,3周期为页地址。可能细心的发现3个周期每周期8位,应该是24位,可是从A0A24,应该有25位,A8去哪里了?在前面我们讨论的Nandflash的结构中,每一页有数据存储区和扩展存储区组成,而这两个部分512Byte+16Byte应该是528Byte的存储空间,而对于528字节的存储空间,至少应该要10位的地址线,才能寻址。但是从上表来说,我们只有第1周期的8位地址线,如果才能完成10位地址线的工作呢?其实A8位的作用在这里体现了。我们先不考虑扩展区的16byte的存储空间,单考虑数据存储区的512
25、byte的空间,512byte只需要9位的地址线就能完成对它的寻址。其实这第9位就是A8位。Nandflash在设计中,已经将一页中的数据存储区分成了前半页区和后半页区(前半页区和后半页区并没有明确的定义,这里我先这样定义)。在后面的Nanflash指令中,当Read命令为00h时,其实已经将操作首地址定义到了半页区的首个地址,这时A8就为0。而当Read命令为01h时,操作首地址已经定义到了后半页的首个地址,这时A8就为1。只是A8不能通过I/O口直接改变值,而会间接的随命令改变。而当Read命令为50h时,则将操作首地址定义到了扩展存储区的首地址。2.3 Nandflash引脚功能及指令集
26、2.3.1 Nandflash引脚功能Nandflash由于其良好的设计,虽然引脚数有48个,但实际有用引脚数只有19个,而其它的未使用的引脚,在日后的Nandflash升级中,可能会定义上新的功能。K9F5608U0D的引脚分布如图2-2所示:图2-2 K9F5608U0D引脚分布图I/O0I/O7:DATA INPUTS/OUTPUTS。数据输入/输出口,I/O口是用来输入指令、地址和数据、并在读周期时输出数据的。当芯片未被选中或输出禁能时,I/O口呈高阻态。CLE:COMMAND LATCH ENABLE。命令锁存使能,CLE脚上的输入电平用来控制打开/关闭指令送入指令寄存器的通路。当C
27、LE为高时,I/O口在WE信号的上升沿将指令锁入指令寄存器。 ALE:ADDRESS LATCH ENABLE。地址锁存使能,ALE脚上的输入电平用来控制打开/关闭地址送入地址寄存器的通路。当ALE为高时,I/O口在WE信号的上升沿将地址锁入地址寄存器。CE:CHIP ENABLE。芯片使能,低电平使能的片选控制线。当芯片处于忙状态时,CE信号即使变高,也将被忽略。RE:READ ENABLE。读使能,RE为串行数据输出控制线。当它为低电平时,内部数据将输出到I/O端口,输出数据在RE的下降沿后一定时间内有效,同时,内部列地址计数器将加1。WE:WRITE ENABLE。写使能,WE对I/O端
28、口的写入进行控制。指令、地址和数据都会在WE的上升沿被锁存。R/B:READY/BUSY OUTPUT。读/忙输出,R/B引脚的输出说明了器件目前的操作状态,当它为低电平时,表明某个写入、探险或任意读操作正在进行,当这个操作完成,R/B才会重新回到高电平状态。它是一个开漏输出,而且在芯片未选中或输出未全能时,不会进入高阻态。WP:WRITE PROTECT。写保护,WP引脚提供在电源波动情况下,对器件不可预料地写入或探险的保护。当WP脚为低电平时,内部高电压发生器被复位。VCC:OUTPUT BUFFER POWER。缓冲器输出电源,VCC是器件的供电电源。VSS:GROUND。地。NC:NO
29、 CONNECTION。空脚。DNU:DO NOT USE。未使用。2.3.2 Nandflash指令集由K9F5608U0D的CLE和ALE信号线实现I/O口上指令和地址的利用。指令、地址和数据都通过拉低WE和CE从I/O口写入器件中。有一些指令只需要一个总线周期完成。例如,复位指令,和状态读指令等;另外一些指令,例如页写入和块擦除,则需要2个周期,其中一个周期用来启动,而另一个周期用来执行。表2-2显示了Nandflash K9Fk5608U0D具备的指令。表2-2 K9F5608U0D具备的指令和功能功能第一周期第二周期器件忙时可接受的命令(用“0”表示)读方式100h/01h-读方式2
30、50h-读ID号90h-复位FFh-0页写入80h10h回拷贝00h8Ah块擦除60hD0h读当前状态70h-0在Nandflash中,读和写操作都是以页为单位进行的操作,擦除是基于块进行的操作的。对以上Nandflash的各引脚定义功能,以及Nandflash具备的指令,就可以在S3C44B0X上实现对Nandflash对各种操作功能。3 Nandflash底层程序的设计及实现3.1 K9F5608U0D与S3C44B0X的接口设计3.1.1 S3C44B0X中的Bank映射S3C44B0X可以对8个Bank进行寻址,每个bank的空间为32MB。由于整个目标平台都是以处理器为核心的,为了使
31、处理器对各个设备的访问互不干扰,就将不同类型的设备映射到不同的bank内。S3C44B0X的bank空间分配如图3-1所示。Bank 7未用Bank 6未用8MB/16MB SDRAMBank 5未用Bank 4EthernetBank 3USBBank 2IDEBank 1nandflashBank 0CPU寄存器未用Flash ROM图3-1 S3C44B0对寻址空间的安排图3-1是S3C44B0X对程序空间和数据空间的分配。在程序空间Flash ROM内(即Nor flash),已经固体了一段启动系统及系统进行初始化的程序BIOS(即Bootloader:U-Boot)。在图中可以看到,
32、Flash ROM映射在了系统的Bank0上,也就是说,系统在上电时处理器即从Flash ROM的0x00000000地址处取得指令开始运行。BIOS程序完成了设置初始化、中断矢量初始化、存储器的参数设置、堆栈地址定义等工作,这些设置对于系统的正常启动具有重要意义。3.1.2 Nandflash与44B0的连接方法K9F5608U0D映射到Bank1区域内,与S3C44B0X的接口电路如图3-2所示:图3-2 K9F5608U0D与S3C44B0X的接口电路其中,NandWE和NandRE信号通过图3-3的电路产生。图3-3控制信号产生电路这种方法,是一块Nandflash与系统相连接的标准接
33、法,而要实现两块Nandflash的相互拷贝,则会出现错误,而并不能用这种连接方法。另外,在控制信号产生电路中,nOE与S3C44B0X的OE相连接,nWE与WE连接。而nGCS1的连接,则表明Nandflash的数据是映射到了44B0的Bank1中,即以后对Bank1操作,则对Nandflash的8位数据线操作了。由于采用了GPG0GPG3作为K9F5608U0D的信号控制线,因此必须在I/O口初始化中将这些口设定为输入或输出口线。其中GPG0为输入,GPG1GPG3为输出,关于I/O口应用的相关内容,如S3C44B0X datasheet中的I/O设置表,如表3-1所示:表3-1 端口G功
34、能表将上述引脚与开发板的扩展口连接后,用万用表连接相邻两脚,看是否出现短路的情况,这种情况应该马上排除,还有一点要注意的是,Nandflash8位数据线与44B0的低8位数据线之间的8根连接线,要尽可能的做到长短相等,这样可以减少在高速读写过程中,可能造成8根数据线之间延时的机率,使Nandflash工作的更加稳定,保证数据传输的可靠性。根据图3-2和图3-3,连接好以后,就可以进入编程调试环节了。3.2 Nandflash底层程序的实现与设计3.2.1 页读操作的设计在初始上电时,器件进入缺少的“读方式1模式”。在这一模式下,页读操作通过将00h指令定稿指令寄存器,接着写入3个周期的地址(1
35、个列地址,2个页地址)来启动。一旦页读指令被器件锁存,下面的页读操作就不需要再重复写入指令了。如图3-4所示: 图3-4 读前半页命令缺省图同样的,对于后半页的操作,只要将指令改为01h,而对扩展区只要将指令改为50h,而在连续的读取中,并不用反复的输入上述的指令。如图3-5,3-6所示:图3-5读后半页命令缺省图图3-6 读扩展区命令缺省图写入指令和地址后,处理器可以通过对信号线R/B的分析来判断该操作是否完成。如果信号为低电平,表示Nandflash正“忙”;为高电平,说明器件内部操作完成,要读取的数据被卷入了数据寄存器。外部控制器可以在以50ns为周期的连续RE脉冲信号的控制下,从I/O
36、口依次读出数据。连续页读操作中,输出的数据是从指定的列地址开始,直到该页的最后一个列地址的数据为止。Nandflash读操作(读1Page)如图3-7所示图3-7 读操作时序图读操作流程如图3-8所示:StartWrite 00hWrite AddressRead DataPage Read Completed图3-8 读操作流程图读操作一开始向Nandflash命令寄存器写入00h,然后向地址寄存器写入读取的地址,即将数据指针指向所要读了的内容地址。正如硬盘的盘片被分为磁道,每个磁道又被分为若干扇区,一块Nand Flash被分为若干Block,每个Block又被分为若干Page。我们的K9
37、F5608U0D是32M的,所以有2048的Block。这里有一点要说明的是当读取时,输入的命令为00h时,那在连续读取的接下来的n个字节,是从前半页存储区的首地址(即整页的0地址)一直读到第527个字节处,即读完包括数据存储区和扩展存储区内的完全内容,而当超过一页的地址后,它将再一次指向下一页的前半页存储区的首地址,而这个读过程可以无限的进行下去,只到你停止读取数据或者到达了Nandflash最后的一页扩展区的最后一个字节为止。具体如图3-9所示:图3-9 命令00h的读取内部循环当输入01h读取命令时,那在连续读取的接下来的n个字节,是从后半页存储区的首地址(即整页的256位地址)开始一直
38、读到第527个字节处,即读完包括数据存储区和扩展存储区内的完全内容,而当超过一页的地址后,它将再一次指向下一页的后半页存储区的首地址,而这个读过程可以无限的进行下去,只到你停止读取数据或者到达了Nandflash最后的一页扩展区的最后一个字节为止。具体如图3-10所示:图3-10 命令01h的读取内部循环当输入50h读取命令时,在连续读取的接下来的n个字节,是从扩展存储区的首地址(即整页的512位地址)开始一直读到第527个字节处,即读完包括数据存储区和扩展存储区内的完全内容,而当超过一页的地址后,它将再一次指向下一页的后半页存储区的首地址,而这个读过程可以无限的进行下去,只到你停止读取数据或
39、者到达了Nandflash最后的一页扩展区的最后一个字节为止。具体如图3-11所示:图3-11命令50h的读取内部循环3.2.2 页写入操作的设计K9F5608U0D的写入操作也以页为单位。写入必须在擦除之后,否则写入将出错。页写入的周期总共包括3个步骤:写入中行数据输入指令(80h),然后写入3个字节的地址信息,最后串行写入数据。串行写入的数据最多为528个字节,它们首先被写入Nandflash内的页寄存器,接着器件进入一个内部写入过程,将数据从页寄存器写入存储宏单位。串行数据写入完成后,需要写入“页写入确认”指令10h,这条指令将初始化器件的内部写入操作。如果单独写入10h而没有前面的步骤
40、,则10h不会起作用。10h写入后,K9F5608U0D的内部写控制器将自动执行内部写入和校验中必要的算法和时序,这时系统控制器就可以去完成其他任务。内部写入操作开始后,nandflash自动进入“读状态寄存器”模式。在这一模式下,当RE和CE为 低电平时,系统就可以读取状态寄存器。系统可以通过检测R/B的输出,或读状态寄存器状态位(I/O6)来判断内部定稿是否结束。在器件进行内部写操作时,只有读状态寄存器指令和复位指令会被响应。当页写入操作完成,应该检测写状态位(I/O0)的电平。内部写校验只对1没有成功地写为0的情况进行检测。指令寄存器始终保持着读状态寄存器模式,直到其他有效的指令写入指令
41、寄存器为止。Nandflash写操作(写1Page)如图3-12所示: 图3-12 写操作时序图写操作流程如图3-13所示: StartWrite 80hWrite AddressWrite DataWrite 10hRead Status RegisterR/B = 1 ?NOI/O 0 = 0 ?yesProgram ErrorProgram CompletedyesNO图3-13写操作流程图写操作时,首先向命令寄存器输入80h写指令,然后向地址寄存器输入3周期的地址,写入指定的数据后,再向命令寄存器输入10h以表示确认写操作。根据R/B口反馈给44B0的信号,可以判断写操作是否执行完毕,
42、通过读状态寄存器可以判断写入操作是否成功。这里有一点要补充的是,写操作只能在一页中进行,即可以开始在一页的内的任意一个位置,但是结束的时候,一定要在这页地址527字节前的任意一位,不可以写循环后,输入确认指令10h时,现在的数据已经进入到下一页中去。另外,写操作也可以通过00h,01h,50h加到写操作开始指令80h前,以快速的确定写入的地址,这样大大增加了Nandflash使用的灵活性。即00h时,从前半页存储区地址开始写,01h时,从后半页存储区地址开始写,50h从扩展页存储区地址开始写,而具体从各区域的哪个地址写,又需要在不输入地址3周期中的第一周期(即列地址)中设置,但是不无论从哪个地
43、址开始写,都必须在超过这页的最后一位前输入确定写操作地址,即整页的527字节地址。3.2.3 块擦除操作的设计擦除操作是以块为单位进行的。擦除的启动指令为60h,块地址的输入通过两个时钟周期完成。这时只有地址位A14到A24是有效的,A9到A13则被忽略。因为每一块是有32页组成的,而A9到A13正好是5位,也就是一个块中,页的地址,而擦除是对块操作,所以A9到A13则被忽略,即A9到A16的值为11111000B到11111111B,对于块操作时,都是一样的。块地址载入之后是擦除确认指令D0h,它用来初始化内部探险操作。擦除确认命令用来防止外部干扰产生擦除操作的意外情况。Nandflash检
44、测到擦除确认命令输入后,在WE的上升沿启动内部写控制器开始执行擦除和擦除校验。内部擦除操作完成后,应该检测一下写状态位(I/O0),从而了解擦除操作是否有错误发生。Nandflash块擦除操作(擦除1Block)如图3-14所示:图3-14块擦除时序图块擦除流程如图3-15所示:StartWrite 60hWrite Block AddressWrite D0hRead Status RegisterI/O 6 = 1 ?NOR/B = 0 ?YESErase CompletedYESErase ErrorNO图3-15 块擦除流程图块擦除时,首先对命令寄存器写入擦除命令60h,然后向地址寄存
45、器写入2个周期的块地址,最后对命令寄存器写入擦除确认命令D0h,判断R/B高低电平,以确定下一块擦除的操作进行。对于擦除命令,一定要注意对忙信号的判断,如果没有正确的判断,会使擦除只擦除一部分,而没有擦除的部分,在写入数据的时候,由于byte位没有拉高,而使写入的数据发生错误。3.2.4 读状态寄存器的设计K9F5608U0D包含一个状态寄存器,该寄存器反应了写入或擦除操作是否完成,或写入和擦除操作是否无错。写入70h指令,启动读状态寄存器周期。状态寄存器的内容将在CE或RE的下降沿处送出到I/O端口,表3-2显示了状态寄存器中每位的定义:表3-2 状态寄存器的位定义I/O n状 态定 义I/
46、O 0写入/擦除“0”:成功写入/擦除“1”:在写入/擦除中出错I/O 1保留“0”I/O 2“0”I/O 3“0”I/O 4“0”I/O 5“0”I/O 6器件操作“0”:忙 “1”:准备好I/O 7写保护“0”:保护 “1”:未保护Nandflash读状态寄存器操作如图3-16所示:图3-16:读状态寄存器时序图器件一旦接收到状态寄存器的指令,它就将保持在状态寄存器读状态,直到有其它的指令输入。因此,如果在任意读操作中采用了状态寄存器读操作,则在连续页读的过程中,必须重发00h或50h指令。3.2.5 读器件ID的设计K9F5608U0D器件具有一个产品鉴定识别码(ID),系统控制器可以读出这个ID,从而起到识别器件的作用。读ID的步骤是:写入90h指令,然后写入一个地址00h。在两个读周期下,厂商代码和器件代码将被连续输出到I/O口。同样,一旦进入这种命令模式后,器件将保持这种命令状态,赶到接收到其他的指令为止。Nandflash读取器件识别码ID操作