欢迎来到天天文库
浏览记录
ID:21864560
大小:61.50 KB
页数:8页
时间:2018-10-25
《基于at89c51实现海量存储系统的设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于AT89C51实现海量存储系统的设计:解决MSC51单片机数据存储空间容量的访问容量限制,在很大程度上可以扩展和提高单片机应用系统的总体功能。文章以三星公司NAND型闪存芯片K9K2GXXU0M为例,扩展了AT89C51芯片的数据存储器,实现了单片机的海量存储系统。 关键词:NAND;闪存;海量存储;汇编语言 :TP368:A:1009-3044(2011)10-2287-03 DesignofMassStorageSystemforMetadataBasedonAT89C51SCM LIUQin
2、g-hai,LIUGuang-feng,YANGLi-guo (FeixianCampusofQingdaoTechnologicalUniversity,Linyi273400,China) Abstract:MSC51microcontrollersolvetheaccessdatastoragecapacityofcapacityconstraints,inlargemeasuretoextendandimprovetheoverallfunctionofSCMapplications.Articl
3、esbySamsungNANDflashmemorychips-K9K2GXXU0M,forexample,extendstheAT89C51chipdatamemory,toachieveasinglechipmassstoragesystem. Keyemory;massstorage;assemblylanguage 在开发单片机应用系统,经常需要存储海量数据,对于数据采集系统或嵌入式系统更是如此[1]。但是单就单片机本身的存储能力而言,存储这些数据的解决方案相当复杂或成本较大,甚至不现实。目前,多
4、数研发人员开始寻找其他方式进行扩展存储能力,如文献[2]采用AT29C040芯片来解决此类问题,但是该闪存芯片容量太小,不能再满足系统的需求,于是本文采用超大容量闪存K9K2GXXU0M和AT89C51单片机相结合实现了海量数据的存储系统。 1系统引脚说明 Atmel公司的AT89C2051是一种带2K字节闪烁可写操作可擦除只读存储器的高效单片机,而三星公司的K9K2GXXU0M是一种可以进行电擦写,功耗低,单片容量高达256MB的NAND型闪存芯片。正是闪存非易失性和可擦写性的特点,使得该文中的存储系统
5、具有可靠性高、操作简便的优点。图1给出了该系统硬件设计的主要部分原理图。 系统设计中用到的芯片引脚,主要有AT89C51的P0.0~P0.7、P1.0~P1.2、P1.4~P1.6引脚分别与闪存的I/O、CLE、ALE、RE、CE、由1K个块(BLOCK)组成,每个块有512页,每页有528字节,这528字节分成A、B、C三个区。对每一页的寻址需要通过I/O口送出4个地址,第二、三、四行地址(A9~A28)指明寻址到某一页,第一列地址指明寻址到页的指定区中某一字节。对页的分区命令如表1所列,其中00H、01
6、H、50H为选区指针,选定区的内部寻址是由第一个列地址完成的,A0~A7可以最大寻址256字节。 系统在对K9K2GXXU0M芯片进行写操作时,写页操作确认指令(10H)即可开始写操作操作,但写入指令(10H)前还必须输入连续数。连续装载数据在写入连续数据输入指令(80H)后,将开始4个周期的地址输入和数据装载,而字却不同于写操作的数据,它不需要装载。 3系统程序设计 通过分析文献[4]中K9K2GXXU0M和AT89C51芯片的特点,给出了系统读、擦除和写操作的程序流程图(如图2所示),并用汇编语言实
7、现了这3个程序。 (a)读操作(b)擦除操作(c)写操作 图2程序流程图 3.1读操作子程序:READ.ASM PUSHPSOVP0,#00H;送读操作命令字 MOVR7,#04H;送地址的次数 ;地址传送模块 MOVR0,#00H;地址指针的首地址 CLRP1.0;置命令锁存无效 SETBP1.1;置地址锁存有效 SET: MOVP0,R0;将地址送入P0口 NOP DECR7;地址次数减1 INCR0;地址指针加1 JNZSET;地址未传送完,继续传送 CLRP1.1;置地
8、址锁存无效;结束传送地址 CLRP1.2;使读有效 JNBP1.6,$;查看R/B是否忙 MOVDPTR,OUTBUF;所送数据地址指针的首地址 LOOP: [email protected],P0;将数据送入片内存储器内 INCDPTR;地址指针加1 MOVR0,DPTR;所送数据的个数放入R0中 CJNER0,#512,LOOP;读不完继续读 SETBP1.4;置片选
此文档下载收益归作者所有