中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 存储设计 >>电子行业新闻正文

闪速存储器AT29C040与单片机的接口设计

时间:2007/12/11 9:17:00  作者:  来源:IC72  浏览人数:855
 
 

      摘要:介绍了Atmel公司的新一代大容量快闪存储器AT29C040的使用方法,并以笔者开发的某测试仪器为例,给出了实际应用的硬件电路及软件设计。

      关键词:快闪存储器;数据轮询;数据保护;单片机接口

      1 引言

      自1984年第一块闪速存储器问世以来,闪速存储器就以其EPROM的可编程能力和EEPROM的电可擦除性能,以及在线电可改写特性而得到了广泛的应用和发展。随着制造工艺和材料的改进,闪速存储器比EPROM和EEPROM、SRAM及DRAM等存储器的优势越来越明显。

      Atmel公司于1998年推出了新一代大容量快闪存储器AT29C040,由于它采用了Fowler-Nordheim隧道效应技术,使编程电流比第一代闪存降低了一个数量级。该芯片只需要+5V电源并支持分页编程,此外,还具有硬件数据保护、软件数据保护、数据查询和自举模块等其他功能。根据笔者的使用情况,本文对AT29C040闪速存储器的结构特点、使用方法等作了简要介绍,并以笔者开发的某测试仪器为例说明AT29C040与单片机的接口及使用方法。

      2 芯片简介

      2.1 芯片的结构与特点

      AT29C040的结构类似于SRAM,它有8条数据线(D0~D7)、19条地址线(A0~A18)、3条控制线(/OE、/CE、/WE)以及电源、地线共32个引脚,具体引脚分布如图所示。

      AT29C040闪速存储器有如下几个特点:

      (1)用5V单一电源供电,读、写操作使用同一电源,省去了一个12V的编程电源VPP ;

      (2)编程前不需要附加的擦除操作,在编程期间,擦除操作会在芯片内部自动进行;

      (3)在单个编程周期内,每次写一个扇区的数据,大大缩短了编程时间。AT29C040的扇区编程时间为10ms,而其他扇区的编程时间为数百 ms;

      (4)扇区容量小,减少了写数据时对系统内存资源的要求;

      (5)软件数据保护SDP(Software Data Protect)功能。为了避免人为疏忽或者系统上电、掉电等因素引起对闪速存储器的误写操作, AT29C040设置了软件数据保护功能。其原理是对闪速存储器写操作前,必须按一定顺序送入三个字节的命令码,然后才能写入数据,否则数据不能被写入。

      2.2 芯片操作

      2.2.1 读写操作

      对AT29C040的读操作非常简单,类似于SRAM,不再赘述。这里主要讨论一下对它进行写操作的方法。首先在系统RAM区为AT29C040产生一个扇区的数据映像,即先将待写入的数据放入 RAM中,接着送三字节的命令码到AT29C040中;然后将事先放在RAM中的数据传送到AT29C040指定的扇区中;最后还要等待闪速存储器的写周期时间(10ms),以便将数据写入存储器中。其“写” 操作时序如图所示。

      2.2.2 数据轮询

      在编程周期期间,如果读取最后装入的字节将使I/O7上出现所装入数据的补码,一旦编程周期结束,所有输出线上的真数据有效,可以开始下一个编程周期。数据轮询可以在编程周期的任何时刻开始,数据轮询时序如图3所示。图中,各时间参数的含义分别是:tDH是数据保持时间; tOEH是OE信号保持时间;tWR 是写信号恢复时间。

      2.3 软件数据保护

      软件数据保护是通过一连串地向2个特殊地址写入3个特殊数据来完成的。关闭软件数据保护也是通过一连串地向2个特殊地址写入6个特殊数据来完成。如果不执行这样的操作,对29C040的访问将不能正常进行。该软件保护算法可由用户开启或关闭。图4和图5分别是是软件保护和关闭软件保护的流程图。

      有关29C040芯片其他特性以及一些相关参数在其芯片手册里有很详细的说明,这里不再描述,下面就其应用作一介绍。

      3 与单片机的接口

      3.1 硬件设计

      AT29C040和微处理器接口很简便,和我们经常扩展的数据存储器基本相似。稍微有所不同的是,由于它相当于8个普通的64k字节空间的 RAM,所以地址最高3位分别由3根处理器地址线来控制,访问的范围是0 0000~7 FFFF。接口如图。

      在硬件设计中,笔者使用的微处理器是80C51。由于扩展的芯片较多,在各器件的片选时,没有使用138译码器,而是采用了一个可编程逻辑器件(PLD)。在图6中,选中29C040时, P13,P14的状态是00,选中ROM和RAM则分别是01和10(为简单起见,假设扩展芯片仅是以上几个)。

      3.2 软件设计

      在掌握了该芯片的主要特性之后,对它的使用就比较简单了。下面我们提供了16进制数0X45写到29C040里的C语言程序。

      #include

      #include

      void delay(unsigned int l_time);

      void protect();

      void select_segment(unsigned char seg);

      unsigned char data cdat;

      void write_data(unsigned int m_addr,unsigned int s_sector,unsigned int acount);

      {

      unsigned int data addraa,addrbb; /* addraa 为内存地址,addrbb 为29C020地址 */

      unsigned int data i,j;

      bit data flaga;

      flaga=EA;

      EA=0;

      addraa=m_addr;

      addrbb=s_sector*256;

      for(j=acount;j>0;j--)

      {

      protect();

      for(i=0;i<256;i++)

      {

      P14=0;P13=1;

      cdat=XBYTE[addraa];

      select_segment(s_sector/256);

      /*s_sector 是256的整数倍*/

      XBYTE[addrbb]=cdat;

      P14=0;P13=1;

      addraa++;

      addrbb++;

      }

      s_sector++;

      delay(1000);

      }

      P14=0;P13=1;

      EA=flaga;

      }

      /* 选择 29C040 段地址(高位地址),

      seg 为段地址*/

      void select_segment(unsigned char seg)

      {

      switch(seg)

      {

      case 0: P1=0x00;_nop_(); break; /* 29c040 a18a17a16= 000 00000-0ffff */

      case 1: P1=0x01;_nop_(); break; /* 29c040 a18a17a16= 001 10000-1ffff */

      case 2: P1=0x02;_nop_(); break; /* 29c040 a18a17a16= 010 20000-2ffff */

      case 3: P1=0x03;_nop_(); break; /* 29c040 a18a17a16= 011 30000-3ffff */

      case 4: P1=0x04;_nop_(); break; /* 29c040 a18a17a16= 100 40000-4ffff */

      case 5: P1=0x05;_nop_(); break; /* 29c040 a18a17a16= 101 50000-5ffff */

      case 6: P1=0x06;_nop_(); break; /* 29c040 a18a17a16= 110 60000-6ffff */

      case 7: P1=0x07;_nop_(); break; /* 29c040 a18a17a16= 111 70000-7ffff */

      }

      }

      void protect()

      {

      select_segment(0);/*必须写到第0段*/

      XBYTE[0x5555]=0xaa;

      XBYTE[0x2aaa]=0x55;

      XBYTE[0x5555]=0xa0;

      P14=0;P13=1;

      }

      void delay(unsigned int l_time)/*写完一个扇区后延时*/

      {

      unsigned int data lp;/* 4ms */

      for(lp=0;lp

      _nop_();

      }

      main()

      {

      unsigned int data i;

      P14=0;P13=1;

      for(i=0;i<256;i++)

      {XBYTE[0x0200+i]=0x45;}

      write_data(0x0200,0,1);

      delay(1000);

      while(1);

      }

      4 结束语

      AT29C040在单片机中的应用不仅能使用户快速地实现所需功能,而且电擦除的方式为程序和数据的存储和更新提供了方便,随着闪速存储器器件朝着容量越来越大、工作电压越来越低、支持共同的接口标准的方向发展,闪速存储器硬件接口和软件设计将越来越容易。

 
【相关文章】
·闪速存储器AT29C040与单片机的接口设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9