用于初始化半导体存贮器的方法和装置 背景
本发明一般涉及一种用于编程半导体存贮器件的方法和装置,更具体地,本发明涉及一种用于交错E2ROM存贮器与闪速存贮器的编程以便减少整个编程时间的方法和装置。
蜂窝电话一般含有一种或多种非易失性存贮器。例如,一种已知的配置采用闪速存贮器存贮由该蜂窝电话使用的处理程序(即代码),采用EEPROM存储各种配置参数等信息(即非易失性数据段)。Aota等人的U.S.Patent No.5,564,032举例说明了一种采用闪速存贮器和EEPROM的蜂窝电话。在由Aota教导的技术中,闪速存贮器被采用存贮在EEPROM中的程序代码编程。
通常,EEPROM(此后简称为E2ROM)和闪速存贮器在工厂里被采用二进制数据编程。对于闪速存贮器,该二进制数据可以表示在执行蜂窝电话具备的各种功能时由其使用的可执行代码。对于E2ROM,该二进制可以表示非易失性变量(例如序号)。另一方面,E2ROM可以被简单地初始化为全零。由于闪速存贮器和E2ROM的编程需要,编程过程非常费时,因而产生了增加制造蜂窝电话的成本的严重瓶颈。
特别地,典型的闪速存贮器的编程需要两个阶段的处理。在第一阶段,计算机处理器加载一字节或一页数据到其闪速存贮器的内部缓冲器中。在该数据加载完成后,闪速存贮器进入一编程阶段,在该阶段中,闪速存贮器从其内部数据缓冲器写信息至其闪速存贮器阵列。在编程的第二阶段中,该计算机处理器周期性地查询闪速存贮器以确定该闪速存贮器是否完成了编程。否则,该计算机处理器在编程的第二阶段中担当不活动的角色。该第二阶段通常比第一阶段长很多。因此,在编程周期中,计算机处理器在相当多的时间内基本上保持空闲。E2ROM采用类似的两阶段方法编程。
有些实践者建议了很多方法以减少在编程期间的处理器空闲时间量。例如,Hewitt等人的U.S.Patent No.5,488,711公开了从一计算机处理器中下载一串数据至存贮设备的静态随机存取存贮器(SRAM),其中该信息被分成多页。然后,该SRAM顺序地将这些页送至内部EEPROM存贮阵列的一些行中,直到该SRAM被耗尽为止。在这种顺序馈送操作期间,该处理器是空闲的以执行其它的任务。
Kaki等人的U.S.Patent No.5,530,828教导了另一种用于减少处理器地空闲时间的方法。在该技术中,一处理器接收用于写数据至一相关的盘组件中的请求,其中的盘组件包括由一写缓冲存贮器服务的多个闪速存贮设备。该处理器通过将在一请求中的逻辑扇区号转换至与数据被写入其中的该闪速存贮器的区域相关的物理扇区号来响应该请求。更特别地,这些扇区号被确定,使得数据被分配在多个闪速存贮器之间。在这些闪速存贮器之间的具体数据分配被寄存在一写管理表中。
在形成该写管理表后,该处理器下载这些数据至该写缓冲存贮器中。然后,信息从该写缓冲存贮器中被传送至各闪速存贮器中。更具体地,第一数据块被传送至第一相应芯片,然后开始将该数据编程至其内部存贮阵列中。在该芯片被编程的同时,第二数据块被传送到第二芯片,然后开始将该数据编程至其存贮阵列中。这样,该技术重叠了两个或多个闪速存贮器的编程时间。
虽然有用,但上述系统不专门从事在蜂窝电话(或模拟)环境中编程闪速存贮器和E2ROM所面临的独特问题。例如,E2ROM和闪速存贮器存储两个各自离散的数据文件集。E2ROM存储各种用户定义的参数,而闪速存贮器存储由蜂窝电话使用的操作代码。因此,与Kaki不同,在该环境中的处理器不能随意将来自单个二进制文件的数据分配到多个闪速存贮器中。相反,每个设备被加载唯一而特定的二进制文件。该限制呈现出一些难题。例如,与闪速存贮设备相比,E2ROM可能具有不同(例如较小)的存贮容量,并且可能以不同大小的数据块接收信息。例如,E2ROM可能以页为单位最有效地接收信息,而闪速存贮器可能以字节或页为单位最有效地接收信息。上述的文献没有公开或建议如何在两个不同类型的半导体存贮设备之间交错两个分离的数据流。并且上述的文献也没有公开或建议当存储设备在存贮容量和/或存储协议方面变化时,这种交错如何被执行。
因此,本发明的典型目的是提供一种用于初始化半导体存贮设备的技术,该技术不会因上述的缺点而遭受损害。
简述
这些及其它的典型特征通过一种用于交错闪速存贮器编程与E2ROM存贮器编程的方法和装置来实现。在一些示范性实施例中,E2ROM以页为单位接收数据,而闪速存贮器以页或单个字节为单位接收数据。因此,第一示范性技术交错页写E2ROM编程与页写闪速存贮器编程。第二示范性技术交错页写E2ROM编程与字节写闪速存贮器编程。E2ROM编程部分与闪速存贮器编程部分并行执行,因此加速了整个编程时间(与以串行方式执行E2ROM和闪速存贮器编程相比)。
在第一示范性技术中,处理器将第一数据流的一页写闪速存贮设备的内部缓冲器。在该闪速存贮设备正忙于传送其内部缓冲器中的数据至其存贮阵列中的同时,该处理器将第二数据流的第一页写E2ROM设备的内部缓冲器。因此,该闪速存贮器和E2ROM存贮器并行地执行其编程。
在第二示范性技术中,处理器从第一数据流中写一串字节至闪速存贮器中,这些字节共同构成闪速存贮器的一个“伪页”。在闪速存贮器的该伪页下载到闪速存贮器后,处理器从第二数据流写一页至E2ROM的内部缓冲器。然后该E2ROM传送存储在其缓冲器中的信息至其存贮阵列。在该E2ROM正忙于编程其存贮阵列的同时,处理器同时从该第一数据流中下载共同构成第二伪页的下一串字节。伪页的编程与E2ROM的编程并行地执行。
附图简述
在结合附图阅读下面的详细描述的基础上,本发明的上述及其它的目的、性能和优点将更加易于理解,其中:
图1示出了根据本发明的用于初始化半导体存贮器的示范性系统的概观;
图2示出了交错页写E2ROM编程与页写闪速存贮器编程的示范性流程图;
图3示出了与图2的流程图相对应的示范性时序图;
图4示出了交错页写E2ROM编程与字节写闪速存贮器编程的示范性流程图;
图5示出了与图4的流程图相对应的示范性时序图。
详细描述
在下面的描述中,为了解释和非限制的目的,具体的细节被描述以便提供对本发明的全面的理解。但是应该明白的是,对一本领域的技术人员来说,本发明可以以与这些具体细节不同的其它实施例的形式实现。在其它情况下,公知方法、设备和电路的详细描述被省略,以便不会因不必要的细节而使本发明的说明变得模糊。
图1描述了用于编程一蜂窝电话10的示范性系统。蜂窝电话10包括用于存储各种参数和用户定义的信息的E2ROM存贮器12(例如由ATMEL制造的E2ROM存贮器AT28HC256),以及用于存储由蜂窝电话在执行其各种具备的功能中使用的代码的闪速存贮器14(例如由Advanced Micro Devices制造的闪速存贮器AM29F040)。该蜂窝电话还包括CPU24(此后称作“处理器”)和静态RAM22(例如SRAM)。虽然为了简明起见只示出一个蜂窝电话10,但是多个蜂窝电话能够被同时编程。
电话10的SRAM22存储了由蜂窝电话在编程E2ROM存贮器12和闪速存贮器14中使用的二进制程序代码。该二进制文件此后被称作“交错程序”。该交错程序还实现一提供状态信息至编程器站2的串行通信协议,响应来自编程站2的命令,并且还请求和接收来自编程站2的数据包。
编程站2本身包括与I/O电路4和内部存贮器8通信的CPU6。该I/O电路4通过链路21依次与输入设备18(例如键盘或鼠标)、调制解调器20、海量存贮器16、和蜂窝电话10的CPU24对接。海量存贮器16存储包含用于下载到E2ROM存贮器12的二进制数据的文件26和包含用于下载到闪速存贮器14的二进制数据的文件28。
该编程站执行一补充该交错程序的程序(此后称作“加载程序”)。该加载程序监视来自电话10的状态消息,并且发出命令至电话10。该加载程序还响应关于数据包的来自电话10的请求。在执行该功能时,该加载程序分析二进制文件26和28到一些包,这些包的大小符合该交错程序所期望的尺寸。这些包的尺寸能够为了不同的应用而被调整。在一个实施例中,最大尺寸被设置为为了来自数据文件26和代码文件28的信息的临时缓存而分配的可得到的SRAM。
在操作中,存贮器12、14和22最初不包含信息。因此,编程器站2由下载该交错程序至电话的SRAM22开始。当该下载处理成功时,电话10经由串行数据链路21发送一应答至编程器站2。此后,电话10执行存储在其SRAM22中的交错程序。
该交错程序由从该编程器站请求一个数据包开始。该请求确定数据是否应从E2ROM数据文件26和闪速存储器代码文件28中提取。响应接收该请求,编程器站2分析适当的二进制文件(26或28)并且传送所请求的数据至电话10。然后电话存储该数据至一建立在SRAM22中的临时缓冲器。然后,电话10能够从编程器站2请求另外的数据包。
可以采用各种用于从编程器站2下载数据包的协议。电话10交错其用于来自闪速代码流的数据包的请求与用于来自E2ROM数据流的数据包的请求。例如,来自闪速代码流的一数据包或一串数据包能够被下载,随后是来自E2ROM数据流的一个数据包或一串数据包。在另一实施例中,编程器站2能够以各种间隔周期性地下载来自这两个信息流的包,而不需要被电话10提示做这些。无论如何,从编程器站2至电话10的数据下载快于实际的闪速和E2ROM编程。因此,在不耽搁编程的情况下,在闪速和/或E2ROM编程的空闲期间能够执行下载。
根据接收在SRAM22中的部分闪速代码和E2ROM数据流,在CPU24执行存储在SRAM22中的交错程序的管理下,电话10开始编程E2ROM12和闪速存贮器14。更具体地,处理器24交错存贮器12的编程与存贮器14的编程。具体的交错算法将依赖于存贮器12和14的性能。第一交错算法(图2和图3中所述)通过页写E2ROM与页写闪速存贮器交错接收信息。第二交错算法(图4和图5中所述)通过页写E2ROM与字节写闪速存贮器交错接收信息。
从图2开始,为了讨论的目的,假定闪速存贮器编程周期长于E2ROM编程周期。还假定闪速存贮器通常具有大于E2ROM的存储容量。基于这些理由,在该示范性实施例中,算法需要在闪速存贮器编程其存贮阵列期间执行E2ROM编程周期。
更具体地,该算法开始于将闪速页指针(F)、E2ROM页指针(E)和E2ROM尾标志(E-TERM)初始化为零的步骤(在步骤S2)。这些页指针指向在各自的半导体存贮设备内存储数据的存贮单元。在E2ROM的最后存贮单元已经被编程时,该E2ROM尾标志被认定。如后所述,E-TERM标志是必须的,因为在该具体实施例中,闪速页多于E2ROM页。在所有的E2ROM页被编程后,交错结束并且闪速编程以常规方法继续进行。
在步骤S3中,处理器24查询闪速存贮器14。如果闪速存贮器14不忙(当在步骤S4中被确定时),处理器在由闪速指针(F)指示的位置写一页数据至闪速存贮器14,并且递增该闪速指针(在步骤S5中)。如果闪速存贮器14忙,表示它目前正在编程先前加载的数据,则该算法再查询闪速存贮器14,直到闪速存贮器指示准备好接收另外的数据为止。
在下载信息到闪速存贮器14的内部缓冲器之后,处理器24尝试下载信息至E2ROM12。更具体地,处理器24首先确定E-TERM标志是否被设置为1,该标志为1表示E2ROM已经全部被编程(在步骤S6)。如果否,处理器24将询问E2ROM以确定其是否忙(表示其目前正编程前一下载周期接收的在其内部缓冲器中的信息)(在步骤S8)。如果E2ROM 12不忙,则处理器24下载一页数据至E2ROM12的由E指针指示的存储位置,并且然后递增E指针(在步骤S9)。在写步骤S9后,如果E2ROM12的最后一页已经被编程(当在步骤S10中被确定时),处理器24设置E-TERM标志为1(在步骤S11)。
当E-TERM标志被设置为1时,处理器随后跳过步骤S7-S11,并且在该处理中,编程闪速存贮器14的剩余部分。更具体地,处理器将循环步骤S3-S6,直到F指针指示闪速存贮器14已经被完全编程为止(当在步骤S12中被确定时)。如上所述,闪速存贮器14通常包括大于E2ROM 12的存贮容量,因此,闪速存贮器14的编程将不太可能在E2ROM的编程之前完成。如果E2ROM具有比该闪速存贮器多的页,则E和F指针的角色被颠倒;其它方面的算法是等同的。
图3是一个时序图,示出了一页闪速编程如何与一页E2ROM编程交错。在时刻30,处理器查询闪速存贮器12以确定其是否忙。如果不忙,则处理器在时间间隔36中下载数据至闪速缓冲器。该闪速缓冲器在重叠时间间隔40中存储该信息。此后,闪速存贮器12在时间间隔42中从其内部缓冲器至其存贮阵列编程该信息。与此同时,处理器在点32开始查询E2ROM以确定E2ROM是否忙。如果不忙,则处理器在间隔38中下载数据至E2ROM12。该信息在重叠的时间间隔44中由E2ROM12的内部缓冲器接收。然后E2ROM在时间间隔46中从其缓冲器至其内部存贮阵列编程该信息。注意,时间间隔44和46整个被包含在闪速编程周期的编程间隔42内。按此方式,本发明利用了另外的空闲处理时间。
与并行的闪速和E2ROM编程同时地(在间隔42和46),处理器在间隔50中查询闪速存贮器。该查询开始于时刻34并且继续下去直到处理器检测到闪速存贮器在间隔42中已经完成其编程,并且已经进入空闲状态(在间隔52)为止。在该具体实施例中,由于闪速编程的时间长于E2ROM编程,因此E2ROM将同样完成编程并且进入其空闲状态(在间隔48)。此时,处理器重复上述的步骤序列,从而下载第二页闪速和E2ROM数据。
图3所示,可以采用一512K×8闪速存贮器(例如Atmel AT29C040A闪速存贮器),并且可以采用一32K×8E2ROM(例如AtmelAT28HC256)。在该具体例子中,闪速存贮器有2048页,而E2ROM只有512页。由于这一容量的差别,图2的算法可以被修改,使得对于每一页E2ROM,编程2页闪速存贮器,或者对于每一页E2ROM,编程4页闪速存贮器,并且将同样地节省总的编程时间。
如上所述,闪速存贮器可能要求字节写存储,而不是页写存储。在这种情况下,采用第二种算法。如图4所示,该处理通过将闪速字节指针(F)、E2ROM页指针(E)和字节计数(BYTCNT)指针都初始化为零而开始于步骤S18。该闪速字节指针指向存储数据的闪速存贮器12的当前字节位置,该E2ROM页指针指向存储数据的E2ROM14的当前页位置。处理器将一串连续的1024字节数据下载至闪速存贮器12,所述连续的1024字节构成一个伪页。字节计数器提供在伪页范围内的字节计数索引。
跟随在指针初始化之后,处理器写一数据字节至闪速存贮器14中,并且然后递增闪速字节指针(F)和字节计数器(BYTCNT)(在步骤S22)。然后,处理器检测是否已经串行下载1024个连续字节至闪速存贮器14中(在步骤S22)。如果否,则处理器将查询闪速存贮器14(在步骤30)以确定编程先前下载到闪速缓冲器中的数据是否已经完成(当在步骤S32中被确定时)。如果闪速存贮器指示其不忙,则处理器将继续下载另外的数据字节至闪速缓冲器,直到1024字节的位置已经下载到闪速存贮器14为止。
当已经下载1024字节时,处理器写一页数据至E2ROM(在步骤S24)。然后处理器检测该被写的页是否为E2ROM存贮器的最后页(在步骤S28)。如果是,则该算法结束(在步骤S34)。如果它不是最后页,则字节计数被复位为零(在步骤S28)并且该算法进行下去,以便继续写另一串1024字节至闪速存贮器。
显然,1024字节闪速数据对一页E2ROM数据的分配是示范性的,并且根据半导体存贮设备的具体存贮容量被采用。在前述的具体实施例中,写入闪速存贮器的连续字节组(在该例中为1024)构成一个伪页的数据。字节写的周期数可以被选择,以使得在E2ROM中的页数匹配伪页数。这样就使得,在步骤S26中,如果遇到E2ROM的最后页,则闪速存贮器14的编程将同样地已经完成,并且该处理能够在步骤S34中结束。
图5示出了与在图4中所述的算法对应的时序图。在时间间隔70中,处理器下载第一字节(字节0)至闪速存贮器14。闪速存贮器14在时间间隔74中接收该信息到其内部缓冲器中,然后继续进行以便在时间间隔76中传送该信息至其存贮阵列。在传送该第一字节(字节0)至闪速存贮器14后,处理器立即开始(在位置60)查询闪速存贮器以确定其是否已经完成编程,该查询在整个时间间隔72中继续直到闪速存贮器14指示其已经完成编程为止。此后,处理器立即重复上述周期。实际上,该周期被重复与完成闪速存贮器的一个伪页所需的一样多的次数。在示于图5的具体实施例中,一个伪页对应1024字节。
在闪速伪页的最后字节已经被传送到闪速存贮器的缓冲器后,处理器在间隔78中下载一页数据(例如由64字节构成)至E2ROM存贮器12。E2ROM12在时间间隔82接收该页数据,并且然后在时间间隔84从其内部缓冲器传送该信息至其存贮阵列。在处理器已经在间隔78中下载一页数据至E2ROM12后,处理器在时间间隔86从字节1024开始,立即下载另一伪页(即1024字节串)至闪速存贮器14。注意,在间隔84中,第二伪页闪速存贮器的编程与第一页E2ROM存贮器的编程并行执行。上述处理被重复直到遇到闪速存贮器的最后伪页和E2ROM的最后页为止。
上述的示范性的实施例被认为是对本发明的各个方面的说明而不是限制。因此,根据这里的描述,本领域的技术人员能够对本发明在具体的实现中进行各种变化。所有的这种修改和变形被认为在由后面的权利要求所定义的本发明的范围和精神内。
例如,说明书中讨论了用于蜂窝电话的E2ROM和闪速存贮器的应用。所公开的原理并不限于这一具体应用。而且,上述的讨论限于交错具有一定的示范性操作特性和存储容量的E2ROM和闪速存贮器的环境中。还应明白的是,对于本领城的技术人员来说,所公开的原理能够适用于任意一对(或多个)半导体存贮器,而不管其操作特性或存储容量。最后,上面所公开的原理可以用于其中一个或多个半导体存贮器被初始化为零(OOH)的埸合。