《ARM嵌入式接口技术应用》第三章存储器.ppt

上传人:小飞机 文档编号:6071834 上传时间:2023-09-19 格式:PPT 页数:96 大小:1.80MB
返回 下载 相关 举报
《ARM嵌入式接口技术应用》第三章存储器.ppt_第1页
第1页 / 共96页
《ARM嵌入式接口技术应用》第三章存储器.ppt_第2页
第2页 / 共96页
《ARM嵌入式接口技术应用》第三章存储器.ppt_第3页
第3页 / 共96页
《ARM嵌入式接口技术应用》第三章存储器.ppt_第4页
第4页 / 共96页
《ARM嵌入式接口技术应用》第三章存储器.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《《ARM嵌入式接口技术应用》第三章存储器.ppt》由会员分享,可在线阅读,更多相关《《ARM嵌入式接口技术应用》第三章存储器.ppt(96页珍藏版)》请在三一办公上搜索。

1、第三章 存储器件,一、存储器概述二、EEPROM存储器件三、SRAM存储器件四、Nor-Flash存储器件五、Nand-Flash存储器件六、附录-Nor-Flash与Nand-Flash比较,一、存储器件概述,存储器的重要性存储器是嵌入式系统的主要组成部分,运行的程序需要存储器,处理数据需要存储器,存储数据也需要存储器。没有存储器,系统无法工作。,存储器的种类 只读存储器(简称ROM)ROM是一种非易失性的存储器,即在电源被关掉之后也不会丢失数据的。随机访问存储器(简称RAM)RAM是一种易失性的存储器,即在电源被关掉之后数据会丢失。,1.1存储器ROM,ROM的种类很多,一般分为以下5种:

2、,1只读存储器(ROM)2可编程ROM(PROM)3电可编程ROM(EPROM)4电可擦除可编程ROM(EEPROM)5闪存(Flash Memory),1.2 随机访问存储器RAM,与ROM相比,RAM具有如下一些优点:1、读取速度比ROM快2、写入数据跟从RAM读出的速度一样。,二、EEPROM存储器件,EEPROM的种类很多,它们大致可分为以下3种:并行EEPROM串行EEPROM加密型EEPROM,EEPROM概述,1.1 CAT24WC16介绍,CAT24WC16是CATALYST公司生产的EEPROM,同系列还有CAT24WC02、CAT24WC04、CAT24WC08、CAT24

3、WC32等。CAT24WC16的存储空间内部总共有128页,每一页为16字节(byte),每一字节为8位(bit),共有2K个存储字节单元(即16K比特位)。CAT24WC16的其他特性1.8 到6.0 伏工作电压范围。16字节页写缓冲器。与400KHz的I2C总线兼容,符合双向数据传输协议。具有硬件写保护和软件数据保护功能。自动定时擦写周期。,引脚说明,(注意:I2C是个漏极开路的接口,需要外接上拉电阻),电路连接,1.2 CAT24WC16工作时序,1.起停信号 起始信号:时钟线SCL保持高电平期间,数据线SDA电平发生从高到低的跳变。停止信号:时钟线SCL保持高电平期间,数据线SDA电平

4、发生从低到高的跳变。2.设备选址3.应答信号4.写操作5.读操作,设备选址,主器件发送1个起始信号启动发送过程,然后发送寻址的从器件地址。8位从器件地址的高4位固定为1010,接下来3位(A10、A9、A8)为从器件的地址位。R/W为读写控制位。CAT24WC16监测总线当其地址与发送的从地址相符时发出1个应答信号,CAT24WC16根据读写控制位的状态准备读写操作。,应答信号,在SCL时钟线上的第9个时钟周期将SDA线拉低就表示一个应答信号。I2C总线每成功传送1Byte,接收器都必须产生1个应答信号。CAT24WC16在接收到起始信号和从器件地址之后也要产生应答信号。如果该器件工作于读模式

5、时,在发送1个8位数据后释放SDA线并等待1个应答信号。,写操作,写操作分为“字节写”和“页写”。在“字节写”操作模式下,主器件首先给从器件发送起始信号和从器件地址信息,在从器件送回应答信号后,然后主器件再发送一字节的地址信息到CAT24WC16地址指针,主器件在收到从器件的应答信号后,最后发送1Byte的数据到被寻址的存储单元,从器件再次应答,并在主器件产生停止信号后开始内部数据擦写。,在“页写”操作模式下,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件被允许发送15个额外的字节。如果在发送停止信号之前主器件发送超过16个字节,地址计数器将自动翻转先前写入的数

6、据被覆盖。在发送最后一个字节后,主器件发送一个停止信号通知数据传输结束,如图所示。,读操作,CAT24WC16支持三种读操作方式:1、当前地址读2、随机地址读3、连续读,在“当前地址读”操作方式时,CAT24WC16地址计数器内容为最后操 作字节的地址上加1。CAT24WC16接收到从器件地址信号后,首先发送一个应答信号,然后发送 一个8位字节数据。如图所示:,“随机地址读”操作允许主器件对存储器的任意字节进行读操作。1、主器件首先通过发送起始信号、从器件地址并选择写操作。2、等CAT24WC16应答之后主器件重新发送起始信号和从器件地址。3、CAT24WC16响应并发送应答信号,然后输出该地

7、址处的一个字节数据,最后主器件发送一个停止信号结束此次读操作。过程如图:,“连续读”操作既可以是当前地址读,也可以是随机地址读,工作时序上大体相同。不同的是:当主器件每接收到一个数据字后,会回应一个应答信号给CAT24WC16,而不是停止信号。CAT24WC16在接收到应答信号后会将地址加1。直到主器件发送停止位才结束此操作。CAT24WC16输出的数据按顺序由地址N开始输出。读操作时地址计数器在CAT24WC16内部增加。如果上次读写地址为芯片末地址,则计数器将翻转到第一个字节地址(0 x00)处。,1.3 实验目的与内容,实验目的:通过实验,理解I2C数据传输的原理,掌握I2C接口电路连接

8、和软件编程。实验内容:事先往CAT24WC16的某个地址区域Addr写入一个字符串“Hello”,然后从地址Addr处读取5个字节内容,并在屏幕上显示,检查读出来的字符串是否也为“Hello”。,1.4 实验原理分析,电路原理分析EEPRROM(CAT24WC16)通过I2C接口与处理器进行通信,电路中将EEPRROM 的地址线A0、A1、A2接地,SCL和SDA线上都接一个10K的上拉电阻。,软件设计 为了方便编程与程序可读性,首先定义几个宏,这些宏分别对应I2C控制寄存器I2CONSET的某些控制位。#defineSI0 x08/I2C中断标志位#defineSTO0 x10/I2C停止位

9、#defineSTA0 x20/I2C起始位#defineAA0 x04/I2C应答位#defineI2EN 0 x40/I2C使能位根据实验内容我们设计了3个底层驱动函数,这三个底层驱动函数分别是:CAT24WC16_Init()初始化设置函数。CAT24WC16_Write()CAT24WC16的写函数。CAT24WC16_Read()CAT24WC16的读函数。,CAT24WC16_Init(),/*名称:CAT24WC16_Init()*功能:I2C初始化。*入口参数:fi2c初始化I2C总线速率,最大值为40K*出口参数:无*/void CAT24WC16_Init(uint32 F

10、_I2C)PINSEL0=(PINSEL0/使能主I2C,CAT24WC16_Write(),/*名称:CAT24WC16_Write()*功能:主发送模式,向CAT24WC16写入数据。*入口参数:sla 器件地址;slaveAddr 器件子地址pWriteData 待发送数据缓存区指针 num 待写入字符的个数*出口参数:1 代表发送成功I2STAT 返回错误状态码,代表发送不成功*/uint8 CAT24WC16_Write(uint8 sla,uint8 slaveAddr,uint8*pWriteData,uint8 num)uint8 i;/-通过软件置位STA进入主发送模式-I2

11、CONCLR=AA|SI|STA;/清零:SI位,起始标志位,应答标志位I2CONSET=I2EN|STA;/启动总线while(I2CONSET/返回错误状态码,/-发送器件地址W位-I2CONCLR=SI|STA;/清零:SI位,起标志位标志位I2DAT=sla/返回错误状态码,/-发送数据-for(i=num;i0;i-)I2CONCLR=SI;/SI位清零I2DAT=*pWriteData+;while(I2CONSET,CAT24WC16_Read(),/*名称:CAT24WC16_Read()*功能:主接收模式,从器件CAT24WC16读取数据。*入口参数:slaveAddrCAT

12、24WC16器件中具体的某一存储单元;pWriteData数据接收缓冲区指针;num要读取的数据个数;*出口参数:1 代表发送成功I2STAT 返回错误状态码,代表发送不成功*/uint8 CAT24WC16_Read(uint8 sla,uint8 slaveAddr,uint8*pReadData,uint8 num)uint8 i,state=0;/-定位CAT24WC16器件的存储单元-state=CAT24WC16_Write(sla,slaveAddr,0,0);if(state!=1)return(state);/-发送起始标志位-I2CONCLR=SI|AA;/清零:起始、中断

13、、应答标志位I2CONSET=STA;/启动总线while(I2CONSET/等待SI置位,if(I2STAT!=0 x08)/查看状态码I2CONSET=STO;/结束数据传输结束return(I2STAT);/返回错误状态码/-发送器件地址R位-I2CONCLR=SI|STA;/SI位,STA位清零I2DAT=sla|0 x01;while(I2CONSET,1.5 实验参考程序,uint8 EEPROM_TAB10=Hello!0;/*名称:main()*功能:对EEPROM进行读写控制*/int main(void)uint8 REEPROM_buf5;uint8 flag;/-初始化

14、-IO1DIR=IO1DIR|BEE;/设置蜂鸣器控制引脚 BEEOFF();/关闭蜂鸣器CAT24WC16_Init(10000);/-写数据-flag=CAT24WC16_Write(CAT24WC16,0 x00,EEPROM_TAB,5);,DelayMS(1);/等待内部写操作完成if(flag!=1)BEEON();DelayMS(1);BEEOFF();/-读数据-flag=CAT24WC16_Read(CAT24WC16,0 x00,REEPROM_buf,5);if(flag!=1)BEEON();DelayMS(1);BEEOFF();return(0);,全速运行,我们将

15、在变量观察窗口中观察到数组REEPROM_buf中的内容也为“Hello”。正确运行结果如下图:,三、SRAM存储器件,SRAM概述RAM分为SRAM和DRAM两种类型。DRAM的存取速度没有SRAM快,但是DRAM更容易做成大容量的RAM。在存放信息比较多的嵌入式系统中,主存储器采用 DRAM,而快速存储器则采用 SRAM。SRAM它不具有掉电保持数据的特性,但其存取速度高于Flash存储器,且具有读/写的属性。系统及用户堆栈、运行数据也都放在SRAM中。SRAM架构是处于同一列的基本存储单元共用一条列地址线,而处于同一行的基本存储单元共用一条行地址线,组成一个基本存储单元构成的矩阵架构。,

16、1.1 IS61LV25616AL介绍,IS61LV25616AL是美国ISSI公司生产的高速SRAM器件。IS61LV25616AL的特性如下:高速访问时间1012nsCMOS低功耗工作单个3.3V电源工作,TTL兼容接口电平完全静态操作无需时钟和刷新三态输出高低字节数据控制可用的工业级温度,IS61LV25616AL内部功能模块与引脚描述,IS61LV25616AL内部主要由4部分组成:1、控制电路 2、数据电路 3、译码器电路 4、存储器阵列,内部功能框图 IS61LV25616AL引脚图,IS61LV25616AL芯片一共有44条引脚,其中18根地址线、16根数据线、5根控制线、4根电

17、源线和1根闲置线。IS61LV25616AL引脚描述见表所列。,IS61LV25616AL的读写和擦除操作,ARM是通过操作IS61LV25616AL的控制线而执行相应的操作。IS61LV25616AL可工作在输出禁能、读操作、写操作3种工作模式下。IS61LV25616AL工作模式:,1.2实验目的与内容,实验目的:通过实验,深刻理解RAM器件操作与电路连接。实验内容:完成一块内存区域的自检(类似于台式机的开机内存自检),具体做法是:向这块内存区域的每个单元写入数据0 x55,然后从该单元读出数据,若读出的数据也为0 x55,表明该单元没有问题;若读出的数据不为0 x55,表明该内存单元已坏

18、,蜂鸣器短叫一声,并且将损坏的单元地址保存起来加以标记。,1.3实验原理分析,当IS61LV25616AL与LPC2220的外部接口Bank0连接时,则IS61LV25616AL的芯片地址范围为0 x8000 0000。,当IS61LV25616AL与LPC2220的外部接口Bank1连接时,则IS61LV25616AL的芯片地址范围为0 x8100 0000;,RAM_Write()、为SRAM(IS61LV25616AL)写数据函数RAM_Read()、为SRAM读数据函数。,#define RAM_ADDR 0 x81000000/*名称:RAM_Write(uint32 Addr,ui

19、nt16 Data)。*功能:向RAM写一个半字数据。*入口参数:AddrRAM器件中具体的某一存储单元地址;Data待发送的数据(16位数据)*/void RAM_Write(uint32 Addr,uint16 Data)volatile uint16*addr;addr=(volatile uint16*)(RAM_ADDR|(Addr1);*addr=Data;,驱动子程序,/*名称:uint16 RAM_Read(uint32 Addr)*功能:从RAM某个单元地址读取一个半字的内容。*入口参数:Addr内存单元地址*出口参数:返回一个半字数据*/uint16 RAM_Read(ui

20、nt32 Addr)volatile uint16*addr;addr=(volatile uint16*)(RAM_ADDR|(Addr1);return(uint16)*addr);,RAM的读子程序,1.4 实验参考程序,/*名称:main()*功能:完成某块内存区域的自检,损坏的单元地址保存在数组Remake中*/int main(void)uint8 i,j;uint32 Remake50;uint16 data;IO1DIR=IO1DIR|(124);/设置P1.24为I/O输出IO1CLR=(124);/P1.24=0,关闭蜂鸣器,/-检查起始地址为0 x81000100的100

21、个内存单元(字节单位)-for(i=0,j=0;i50;i+)RAM_Write(100+i,0 x5555);data=RAM_Read(100+i);if(data!=0 x5555)/判断内存单元地址是否损坏Remakej=100+i;j+;IO1SET=(124);/打开蜂鸣器DelayMS(10);IO1CLR=(124);/关闭蜂鸣器DelayMS(10);return(0);,运行程序,for循环体中的程序每运行一次,则对应的地址上的内容就会更改为0 x55。正确运行结果如下图所示:,四、Nor-Flash存储器件,Nor-Flash存储器是一种可以在系统(In-System)进

22、行电擦写,掉电后信息不丢失的存储器。常用的Flash为8位或16位的数据宽度。优点:它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,在体积、抗震性方面都有很大的优势。最大的特点:是可在芯片内执行,即应用程序可以直接在上面运行,不必再把代码读到系统RAM中。而其他类型的Flash存储器不具备这个特点。,1.1 NorFlash器件SST39VF1601,SST39VF1601是由SST公司推出的,是一个多功能Flash器件,存储容量为2MB,16位数据宽度。SST39VF1601由SST提供了固定的擦除和编程时间,与擦除/编程周期数无关。SST39VF1601的特

23、性存储空间组织 1M16。读写操作采用单一电源2.73.6V。低功耗、高可靠性。具有地址和数据锁存功能。自动写时序内部产生Vpp。写结束检测,SST39VF1601引脚描述,SST39VF1601一共有48个引脚,48个引脚中包括:20根地址线、16根数据线、3根控制线、3根电源线和其他不用连接的引脚。,SST39VF1601内部主要由控制逻辑电路、缓冲区电路、译码器电路、存储器电路四大部分组成。,SST39VF1601的读写和擦除操作,NOR Flash存储采用的是SRAM接口,其地址线和数据线是分开的。SST39VF1601芯片可工作在读模式、写模式、擦除模式 3种模式之下。,工作模式选择

24、,SST39VF1601的读操作,SST39VF1601具备快速读访问能力。SST39VF1601的读操作是CE和OE信号线控制的。读操作的时序如图所示:,SST39VF1601的写操作,SST39VF1601的写操作主要是以一个半字接一个半字的方式进行写入的。写操作分3步进行:第1步,送出“软件数据保护”的3字节,SW0,SW1,SW2。第一字节SW0:地址线载入地址0 x5555,数据线载入0 xXXAA;第二字节SW1:地址线载入地址0 x2AAA,数据线载入0 xXX55;第三字节SW2:地址线载入地址0 x5555,数据线载入0 xXXA0;第2步,送出地址和数据,地址在CE或WE的

25、下降沿(无论哪一个后产生下降沿)锁存。,第3步,内部写入处理阶段。在内部写入阶段,任何指令都将被忽略。WE控制的字写入时序如图所示:,扇区/块/整片擦除操作,SST39VF1601扇区是统一的2 K半字(16位)大小,块是统一的 32 K半字大小。SST39VF1601存储容量为2M字节大小。SST39VF1601支持以下操作:1、扇区擦除操作2、块擦除操作3、整片擦除操作扇区或块擦除操作允许SST39VF1601以一个扇区接一个扇区,或一个块接一个块地进行擦除。,这三种擦除操作都是通过6字节的指令序列进行的。其中前面5字节的指令序列是相同的,唯一不同的在第6个字节指令中。3种擦除操作的流程图

26、如左图所示:,3中擦除操作时序如图:,扇区擦除操作时序,块擦除操作时序,整片擦除操作时序,内部操作查询,芯片进入内部编程或擦除操作状态后,允许处理器查询DQ6位来判别芯片内部操作是否完成。当内部操作进行中,所得的DQ6在1和 0之间跳变当内部操作结束后,DQ6位的值不再变化。,1.2 实验目的与内容,实验目的:通过实验,理解Nor-Flash操作时序和电路连接,深刻掌握Flash烧写算法。实验内容1:擦除SST39VF1601中某段未用的扇区,往这个扇区填充0 x55,然后通过AXD调试工具观察该段扇区的内容。实验内容2:擦除SST39VF1601中某段未用的扇区,往这个扇区拷入某个程序的二进

27、制代码,比如一段蜂鸣的子程序代码,然后让程序指针跳到该扇区执行。,1.3 电路原理分析,SST39VF1601与LPC2220的连接如图所示。LPC2220使用外部的存储器接口Bank0上的存储器引导程序运行。,编写2个子程序:SST_SErase()和SST_Write(),分别完成SST39VF1601扇区擦除功能和字编程功能。,扇区删除函数,#define FLASH_ADDR 0 x80000000#define GetAddr(addr)(volatile uint16*)(FLASH_ADDR|(addr1)/*名称:SST_SErase(uint32 SA)*功能:SST39VF

28、1601扇区擦除。*入口参数:SA扇区号(1512)*出口参数:返回1表示成功,返回0表示失败*/,1.4 软件设计,uint8 SST_SErase(uint32 SA)volatile uint16*ip;uint16 data1,data2;if(SA512)|(SA1)/检查扇区号是否在1512范围内return(0);SA=4096*(SA-1);/根据扇区号,计算扇区地址/*写入六个字节的扇区擦除指令序列*/ip=GetAddr(0 x5555);*ip=0 xaaaa;/第一个写周期,地址0 x5555,数据0 xAA ip=GetAddr(0 x2aaa);*ip=0 x555

29、5;/第二个写周期,地址0 x2aaa,数据0 x55 ip=GetAddr(0 x5555);*ip=0 x8080;/第三个写周期,地址0 x5555,数据0 x80 ip=GetAddr(0 x5555);*ip=0 xaaaa;/第四个写周期,地址0 x5555,数据0 xAA ip=GetAddr(0 x2aaa);,*ip=0 x5555;/第五个写周期,地址0 x2aaa,数据0 x55 ip=(volatile uint16*)(FLASH_ADDR|(SA);*ip=0 x30;/第六个写周期,扇区地址SA,数据0 x30,执行扇区擦除操作/*等待操作完成*/while(1)

30、/若编程操作没有完成,每次读操作DQ6会跳变 data1=*ip;data2=*ip;if(data1=data2)if(data1!=0 xffff)return(0);elsereturn(1);,/*名称:SST39VF1601_WriteByte()*功能:SST39VF1601的半字写入。*入口参数:Addr写入地址WriteData写入的数据*出口参数:0操作不成功1操作成功*/uint8 SST_Write(uint32 Addr,uint16 WriteData)volatile uint16*ip;volatile uint16*SADDR;uint16 data1,data

31、2;SADDR=(volatile uint16*)(FLASH_ADDR|(Addr,字编程函数,ip=GetAddr(0 x5555);/转换地址0 x5555ip0=0 xaaaa;/第一个写周期,地址0 x5555,数据0 xAAip=GetAddr(0 x2aaa);ip0=0 x5555;/第二个写周期,地址0 x2aaa,数据0 x55ip=GetAddr(0 x5555);ip0=0 xa0a0;/第三个写周期,地址0 x5555,数据0 xA0*SADDR=WriteData;/第四个写周期,地址Addr,数据Writ/*等待操作完成*/while(1)/若编程操作没有完成,

32、每次读操作DQ6会跳变 data1=*SADDR;data2=*SADDR;if(data1=data2)if(data1!=WriteData)return(0);elsereturn(1);,实验1参考程序,#define Ssize4096/一个扇区4096个字节大小/*名称:main()*功能:往NOR-FLASH最后一个扇区填充数据0 x55;*/int main(void)uint32 i,Addr;SST_SErase(512);/擦除最后一个扇区for(i=0;iSszie;i=i+2)/往最后一个扇区填充0 x55Addr=Ssize*511+i;SST_Write(Addr

33、,0 x5555);return(0);,实验2参考程序,首先用汇编函数定义了一个程序跳转函数uint32 JUMP(uint32 addr),参数addr为给定的程序地址。,EXPORT JUMP AREA JUMPC,CODE,READONLYENTRYJUMPMOV PC,R0 END,然后用C语言定义了一个BEE_Function()函数,#define BEE(124)/BEE连接P1.24/*名称:BEE_Function()*功能:控制蜂鸣器叫*/void BEE_Function(void)PINSEL2=PINSEL2,#define Ssize4096/一个扇区4096个字

34、节大小extern uint32 JUMP(uint32 addr);/声明跳转函数/*名称:main()*功能:首先擦除第6号扇区,然后找到BEE_Function函数地址,将BEE_Function函数复制到第6号扇区,最后将程序跳转到第6号扇区起始处运行。*/int main(void)uint16 i,Data1;uint32 Addr,Data,*P;SST_SErase(6);/擦除6号扇区P=(uint32*)BEE_Function;/指针指向BEE_Function函数Addr=0 x80000002+(Ssize*5);/地址Addr指向第6个扇区的开始位置,主函数main

35、。,for(i=0;i16);SST_Write(Addr+2,Data1);P+;Addr+=4;Addr=0 x80000002+(Ssize*5);JUMP(Addr);/程序跳转到第6号扇区运行 return(0);,五、Nand-Flash存储器件,NOR和NAND是目前市场上两种主要的非易失性闪存技术。Nand-Flash存储器结构则能提供极高的单元密度,可以达到很大的存储容量,并且写入和擦除的速度也很快。但Nand-Flash存储器需要特殊的接口来操作。二者以其各自的特点,在不同场合中发挥着各自的作用。Nand-Flash存储器是Flash存储器的一种技术规格,其内部采用非线性宏

36、单元模式,现在得到了越来越广泛的应用。由于 Nand-Flash(非线性 Flash)存储器内部结构不同于Nor-Flash(线性Flash)存储器。一般来讲,读写的过程要靠软件编程来完成。,1.1 K9F6408U0C介绍,K9F6408U0C是SAMSUNG公司生产的NAND型Flash存储器,存储容量为66Mb。片内写控制逻辑自动实现所有的编程和擦除功能,包括脉冲的周期、内部校验和数据冗余。K9F6408U0C的其他特性存储空间组织(8M+256K)byte页寄存器(512+16)byte支持页编程;支持块擦除。命令/地址/数据复用I/O口。可靠性高:耐久力可经受100K次擦写,数据保存

37、10年。命令寄存器操作。工作电压:2.73.6V。采用唯一ID号保护版权。48脚封装TSOP。,K9F6408U0C引脚描述,K9F6408U0C内部结构,K9F6408U0C由1024块组成,每块由16页组成,每页中有51216个字节。K9F6408U0C的有效总容量为16K页,合计8M字节。这种结构,满足文件系统中划分簇和扇区的结构要求。,K9F6408U0C有效地址空间为8M字节,那么片内必须提供23根地址线进行选址,其中A9A22称为行地址,送入X译码器;A0A8称为列地址,送入Y译码器中。K9F6408U0C芯片的内部结构框图如图所示:,K9F6408U0C的内部指令,K9F6408

38、U0C具备自己的操作指令。有一些指令只需要一个总线周期完成;另外一些指令,则需要2个周期。K9F6408U0C具备的指令和功能如右图:,K9F6408U0C的内部操作-读操作,2种读的方式:页读方式1:默认的页读方式,用于读取页寄存器的前半页、后半页或整个页(0511)。页读方式2:用来读取备用区域(512527),通过将00h/01h指令写入指令寄存器,接着写入3字节地址来启动。,写入指令和地址后,处理器可以通过对信号线R/B的分析来判断该操作是否完成。,要读取的数据被送入了K9F6408U0C内部的页寄存器。外部控制器可以RE脉冲信号的控制下,从I/O口依次读出数据。,连续页读操作中,输出

39、的数据是从指定的列地址开始,直到该页的最后一个列地址的数据为止。,页读方式1的操作时序,页读方式2操作通过将50h指令写入指令寄存器,同样写入3字节地址来启动。页读方式2的其他时序与页读方式1相同。,页读方式2的操作时序,K9F6408U0C的写操作同样以页为单位。页写入周期总共3个步骤:1、写入串行数据输入指令2、然后写入 3个字节的地址信息3、最后串行写入数据,写操作,内部写入操作开始后,器件自动进入“读状态寄存器”模式。此时,系统控制器可以读取状态寄存器,或检测R/B的输出来判断内部写入是否结束。,写操作时序图,擦除操作是以块为单位进行的。启动擦除,随后输入块地址,接着初始化内部擦除操作

40、。器件检测到擦除确认命令后,在WE的上升沿启动内部写控制器开始执行擦除和擦除校验。,擦除操作,K9F6408U0C中包含一个状态寄存器。I/O口状态定义见表 所列:,读状态寄存器,K9F6408U0C器件具有一个产品鉴定识别码(ID),读出ID,起到识别器件的作用。读ID的步骤是:1、写入90h指令2、然写入一个00h,读器件ID号,器件提供一个复位指令,通过向指令寄存器写入 FFh来完成对器件的复位。当器件处于忙状态时,发送复位指令可以使器件中止当前的操作。复位指令写入后,K9F6408U0C进行内部复位操作,此时引脚R/B将变低,持续一段时间直到复位操作完成。,复位操作,1.2 实验内容,

41、擦除K9F6408U0C中的某块,往该块的某页写入一段字符串,然后读取该页的内容,通过串口调试工具显示读取的结果。,1.3 电路原理图,对该存储器进行任何操作都是由CLE,ALE两条信号线的逻辑电平决定的。根据写指令、写地址和读写数据时CLE,ALE信号控制线的时序要求。以下宏定义完成对信号线的控制,同时还定义了读取R/B线状态的宏。,#defineK9f_CLE(123)/与P1.23连接#defineK9f_ALE(111)/与P0.11连接#define K9f_Busy(112)/与P0.12连接#defineK9f_IO(*(volatile unsigned short*)0 x8

42、2000000)#define Read_Busy()IO0PIN IO0CLR=K9f_ALE/ALE为低,CLE为低,1.4 软件设计,在以上宏定义的基础上,根据K9F6408U0C的功能,我们完成几个功能子程序,分别用来芯片复位、读器件ID号、擦除块、页写入、页读等操作。,软件复位子程序,/*名称:uint16 K9f_Reset(void)*功能:复位K9F6408U0C芯片。*入口参数:无*出口参数:无*/void K9f_Reset(void)uint32 i;IO0CLR=K9f_CE;/芯片使能 COM_State();,K9f_IO=0 xff;/发送复位指令 DAT_Sta

43、te();for(i=0;i20;i+);while(Read_Busy()=0);/等待芯片复位操作完成 IO0SET=K9f_CE;,读器件的ID号子程序,/*名称:uint16 K9f_ReadID(void)*功能:读器件的ID号。*入口参数:无*出口参数:返回16位的器件ID号*/uint16 K9f_ReadID(void)uint16 ID;uint8 i,RData;,while(Read_Busy()!=0);IO0CLR=K9f_CE;COM_State();K9f_IO=0 x90;ADR_State();K9f_IO=0 x00;DAT_State();for(i=0;

44、i20;i+);while(Read_Busy()=0);ID=K9f_IO;ID=ID8;RData=K9f_IO;ID=ID+RData;IO0SET=K9f_CE;return(ID);,/*名称:uint8 K9f_EraseBlock(uint16 block)*功能:擦除K9F6408U0C的某个存储块,K9F6408U0C一共包括1024个块。*入口参数:block 块号(11024)*出口参数:1 代表发送成功0 代表发送不成功*/uint8 K9f_EraseBlock(uint16 block)uint8 i,RData;while(Read_Busy()!=0);bloc

45、k=(block-1)4;IO0CLR=K9f_CE;COM_State();K9f_CMD=0 x60;ADR_State();,块擦除子程序,K9f_ADR=block,/*名称:uint8 K9f_WritePage(uint16 Page,uint8*Buffer)*功能:往擦除K9F6408U0C的某个页写入512个字节数据。*入口参数:Page 页号(16K页:116K)Buffer 要写入的数据缓冲区指针*出口参数:1 代表发送成功 0 代表发送不成功*/uint8 K9f_WritePage(uint8 Addr,uint16 Page,uint8*Buffer,uint16

46、Length)uint8 i,RData;while(Read_Busy()!=0);IO0CLR=K9f_CE;COM_State();K9f_CMD=0 x80;ADR_State();,页写入子程序,K9f_ADR=0 x00;/送列地址A0A7Page=Page 1;K9f_ADR=Page,/*名称:void K9f_ReadPage(uint16 Page,uint8*Buffer)*功能:读取K9F6408U0C某页的数据,一次读取一页。*入口参数:Page 页号Buffer 接收读取数据的缓冲区指针*出口参数:无*/void K9f_ReadPage(uint16 Page,u

47、int8*Buffer)uint8 i;uint16 Page1;Page=Page 1;Page1=Page 8;while(Read_Busy()!=0);IO0CLR=K9f_CE;/-先读前半页-COM_State();,页读方式1子程序,K9f_CMD=0 x00;ADR_State();K9f_ADR=0 x00;/送列地址A0A7K9f_ADR=Page,/*名称:void K9f_ReadBackPage(uint16 Page,uint8*Buffer)*功能:读取K9F6408U0C某页备用区域的数据。*入口参数:Page 页号Buffer 接收读取数据的缓冲区指针*出口参

48、数:无*/void K9f_ReadBackPage(uint16 Page,uint8*Buffer)uint8 i;Page=Page 1;while(Read_Busy()!=0);IO0CLR=K9f_CE;COM_State();K9f_IO=0 x50;ADR_State();K9f_IO=0 x00;/送列地址A0A7K9f_IO=Page,页读方式2子程序,1.5 实验参考程序,uint8 Composition=“Whether we find a joke funny or not largely depends on where wehave been brought u

49、p.”uint8 Buffer512;/*函数:main*功能:往K9F6408U0C的第1页写入Composition数组中的字符串,然后读取第1页的内容,通过超级终端显示*/int main(void)PINSEL2=PINSEL2,六、附录-NOR Flash与NAND Flash的比较,1.接口差别NOR型Flash采用的是SRAM接口。NAND型Flash使用复杂的I/O口来串行存取数据,通常是采用8个引脚来传送控制、地址和数据信息。2.读写的基本单位NOR型Flash操作是以“字”为基本单位;NAND型Flash操作是以“页”为基本单位。,3.性能差别NOR型Flash的地址线和数

50、据是分开的,程序可以在芯片内行;NOR型比NAND型的读速度快。NAND型的擦除单元更小。NAND型的擦除速度远比NOR型快。NAND型写入的速度比NOR型快。4.容量和成本NAND型Flash具有极高的单元密度,容量可以做到比较大。NOR主要应用在代码存储介质中,NAND适合于数据存储。5.软件支持在NOR型Flash上运行代码不需要任何的软件支持,NAND型Flash通常需要驱动程序MTD支持,NAND型与NOR型在进行写入和擦除操作时都需要MTD。,思考与练习,1、一般来讲,嵌入式系统中程序保存在哪里,数据存放在哪里?2、请问目前市场有哪些种类的ROM,目前使用最多是哪种ROM?3、与R

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号