系统开机代码存储器管理方法、存储器装置及其制造方法与流程

文档序号:18214050发布日期:2019-07-19 22:30阅读:197来源:国知局
系统开机代码存储器管理方法、存储器装置及其制造方法与流程

本发明是有关于一种存储程序代码的存储器装置。特别是,本技术用以管理及升级程序代码,例如存储于非易失性存储器(non-volatilememory)的基本输入输出系统(basicinput/outputsystem,bios)。



背景技术:

一般而言,当计算机系统第一次开机或重启,软件中首先被执行的部分是系统开机代码,例如存储于非易失性存储器的基本输入输出系统(bios)。当开机代码被执行,计算机系统通常会运行一自我测试(self-test)。开机代码也包括用以初始化或控制计算机系统的基本元件的功能,基本元件例如键盘、显示器、各种碟盘机(例如硬盘、磁盘驱动器、cd-rom、dvd光驱等)以及各种通信端口,例如串行端口(例如通用串行总线(usb)等)。开机代码可初始化开机引导程序(bootloader),开机引导程序可从适当的所选硬盘中加载操作系统。若没有有效且具有功能的开机代码,计算机系统将无法开机。

开机代码通常存储在非易失性存储器中,因而不会在每次计算机系统重启时被擦除,且可于新版本发布时进行更新,例如改进开机代码的效率或功能,或例如修正原本开机代码的错误(bug)。随着时代演进,开机代码的更新也变得更加容易。例如,在新版本的开机代码发布时,许多计算机系统都具备通过网络下载新版本开机代码的自我更新的功能。

由于开机代码的重要性,没有采取任何预防手段就直接擦除目前的开机代码及下载新版本或直接开始覆盖目前的开机代码,都是不安全的。这是因为可能会发生电源错误或系统错误,或下载到损坏的文件。在没有安全防护的情况下,用户可能会面临目前的开机代码全部或部分被擦除且更新的开机代码还无法用来执行。这将导致用户的计算机系统无法正常开机。为了完成保存及更新开机代码的程序,传统的计算机系统采用双bios系统(dualbios或twinbios)。双bios系统允许下载较新版本的开机代码到另一个备份闪存存储器。例如,传统计算机系统包括具有一主bios(开机代码)闪存存储器的主板(motherboard)及一备份bios(开机代码)闪存存储器(注意,这个技术所用的「主bios闪存存储器」及「备份bios闪存存储器」是不同的,仅是指两个不同的闪存存储器,用来存储开机代码或其他类型的数据)。这些双bios系统下载新的开机代码到备份闪存存储器。当新的开机代码完全下载且被验证,接着计算机系统就会为了下一个开机循环将新的开机代码复制到主闪存存储器,或是在下一个开机循环以备份闪存存储器开机。通过这个架构,双bios系统也能够保有目前正在运行的开机代码的备份,以便在发生像是病毒、电源浪涌或突发电源错误造成的崩溃事件时,能够在下一个开机循环执行备份的开机代码。一般而言,主闪存存储器中的开机代码会被评估,若此开机代码无法通过评估,那么开机代码将会从备份闪存存储器中执行。

这种传统的系统需要用到两个不同的闪存存储器来存储、更新及执行开机代码。计算机系统的主板上的空间是很珍贵的资源。较新的主板包括内建绘图处理器(graphicsprocessors)、音效处理器(audioprocessors)及许多额外的外围接口,这使得空间非常吃紧。使用两个不同的闪存存储器需要用到主板上额外的空间。例如,此些闪存存储器自身需要占用主板上的空间且也需要额外的电源线、数据线等。近日来,使用开机代码及需要进行开机代码更新的计算机系统的类型不仅限于个人或桌上型计算机,而扩展到可穿戴装置、电缆及卫星机顶盒、媒体中心接收器、物联网设备、家用电器、汽车部件、服务器、数据中心等,这些装置的空间限制都是最受重视的。

因此,需要提供一种系统,这种系统能够使用双bios型系统,却不需要两个不同的闪存存储器。



技术实现要素:

本发明的一方面提供一种存储器装置。此处所述的存储器装置包括一非易失性存储器,此非易失性存储器配置有一区块(block),此区块具有一第一部分及一第二部分,其中第一部分以一第一范围的实体地址表示,以及第二部分以一第二范围的实体地址表示。存储器装置也包括一地址译码器,此地址译码器将接收的命令地址映像至非易失性存储器的实体地址。存储器装置也包括控制电路(controlcircuitry),用以保存一目前状态,此目前状态用以指示(1)非易失性存储器的第一部分为存储信息的一目前区域且非易失性存储器的第二部分用来通过最新的信息进行更新,或者(2)非易失性存储器的第一部分用来通过最新的信息进行更新且非易失性存储器的第二部分为存储信息的一目前区域,且控制电路用以实行更新操作。由控制电路实行的更新操作包括:回应于接收一写入命令序列,此写入命令序列包括区块的一写入命令地址;致使存储器译码器执行(1)映像写入命令地址至第一部分及第二部分的其中一者,其中是回应于目前状态以选择,以及(2)通过最新的信息更新所选的第一部分及第二部分的其中一者,更新操作还包括当完成更新所选的第一部分及第二部分的其中一者后,变更目前状态以指示所选的第一部分及第二部分的其中一者为存储信息的目前区域且指示非所选的第一部分及第二部分的其中一者用来通过最新的信息进行更新。

本发明的另一方面提供一种存储器装置的操作方法。本方法包括在存储器装置的一非易失性存储器设置一区块,且此区块具有一第一部分及一第二部分,其中第一部分以一第一范围的实体地址表示,以及第二部分以一第二范围的实体地址表示。此外,本方法包括:映像接收的命令地址至非易失性存储器的实体地址,以及保存一目前状态,此目前状态用以指示是否(1)非易失性存储器的第一部分为存储信息的一目前区域且非易失性存储器的第二部分用来通过最新的信息进行更新,或者(2)非易失性存储器的第一部分用来通过最新的信息进行更新且非易失性存储器的第二部分为存储信息的一目前区域。本方法也包括:实行一更新操作,其中更新操作包括:回应于接收一写入命令序列,此写入命令序列包括区块的一写入命令地址;致使存储器译码器执行(1)映像写入命令地址至第一部分及第二部分的其中一者,其中是回应于目前状态以选择,以及(2)通过最新的信息更新所选的第一部分及第二部分的其中一者,且更新操作还包括当完成更新所选的第一部分及第二部分的其中一者后,变更目前状态以指示所选的第一部分及第二部分的其中一者为存储信息的目前区域且指示非所选的第一部分及第二部分的其中一者用来通过最新的信息进行更新。

本发明的另一方面提供一种制造存储器装置的方法。本方法包括:提供一非易失性存储器,此非易失性存储器配置有一区块,此区块具有一第一部分及一第二部分,其中第一部分以一第一范围的实体地址表示,以及第二部分以一第二范围的实体地址表示。本方法也包括:提供及配置一地址译码器,此地址译码器将接收的命令地址映像至非易失性存储器的实体地址。本方法还包括提供控制电路,用以保存一目前状态,此目前状态用以指示(1)非易失性存储器的第一部分为存储信息的一目前区域且非易失性存储器的第二部分用来通过最新的信息进行更新,或者(2)非易失性存储器的第一部分用来通过最新的信息进行更新且非易失性存储器的第二部分为存储信息的一目前区域,且控制电路用以实行更新操作。由控制电路实行的更新操作包括:回应于接收一写入命令序列,此写入命令序列包括区块的一写入命令地址;致使存储器译码器执行(1)映像写入命令地址至第一部分及第二部分的其中一者,其中是回应于目前状态以选择,以及(2)通过最新的信息更新所选的第一部分及第二部分的其中一者,更新操作还包括当完成更新所选的第一部分及第二部分的其中一者后,变更目前状态以指示所选的第一部分及第二部分的其中一者为存储信息的目前区域且指示非所选的第一部分及第二部分的其中一者用来通过最新的信息进行更新。

本发明的其他方面及优点可通过后续的附图、详细说明及权利要求进一步了解。

附图说明

图1绘示用以实行更新操作的一种系统的功能性方块图,其中此系统包括一主控制器、一存储器控制器及一存储器装置;

图2绘示用于依据一更新操作更新一存储器装置的一非易失性存储器的第一及第二部分的第一及第二配置的功能性方块图;

图3绘示图1的系统的部分的功能性方块图;

图4绘示操作于一「双区域更新模式」的一存储器装置的功能性方块图;

图5a、图5b及图5c绘示当系统操作于「双区域更新模式」下,为了执行更新操作的各种操作的流程图;

图6绘示一集成电路的简化方块图,此集成电路例如一nor闪存存储器装置,其包括命令逻辑及支持处于双区域更新模式下的操作的控制电路。

【符号说明】

100:系统

110:主控制器

112:通信总线

120:存储器控制器

122:通信总线

130:存储器装置

132:总线接口

134:控制电路

136:地址译码器

137:映射表

138:状态逻辑

139:非易失性存储器

140:页/区块

142:第一部分

143:开机代码区域

144:第二部分

145:更新代码区域

200:第一配置

202:第二配置

302:闩锁逻辑

304:禁止写入逻辑

402:程序代码x

404:更新代码x

502~562:步骤

600:集成电路

602:i/o区块

605:频率产生器

606a:映射译码器

606b:x译码器

607:地址产生器

608:状态逻辑

614:数据缓存器

620:命令逻辑

622:状态机

624:sram缓冲器

626:高电压产生器

628:闪存存储器阵列

632:y译码器

634:感测放大器

636:输出缓冲器

具体实施方式

以下将搭配附图图1~图6对本发明的实施例进行详细说明。

图1绘示用以实行更新操作的一种系统的功能性方块图,其中此系统包括一主控制器(host)、一存储器控制器及一存储器装置。

明确来说,图1绘示一系统100的简化的功能性方块图。系统100包括一主控制器110、一通信总线112、一存储器控制器120、一通信总线122以及一存储器装置130。在系统100中,主控制器110执行以逻辑地址读取及写入数据的程序。主控制器110通过通信总线112与存储器控制器120通信,且存储器控制器120通过通信总线122与存储器装置130通信。

主控制器110例如是运行一操作系统的一计算机系统。操作系统通过通信总线112传递请求(例如写入及读取)至存储器控制器120。

主控制器110与存储器控制器120之间的通信总线112例如是外围元件互联标准(peripheralcomponentinterconnect,pci)总线、快捷外围元件互联标准(peripheralcomponentinterconnectexpress,pcie)总线、串行ata(sata)及其他可用适合的通信协议通信的总线。

存储器控制器120可通过一微控制单元(microcontrollerunit,mcu)中的软件或其他逻辑结构来实现,或者可通过专用的存储器控制器芯片来实现。在其他实施例中,主控制器110与存储器控制器120可实现在单一的处理器上,或者主控制器110与存储器控制器120可包括复杂数据处理系统的一部分。存储器控制器120可作为主控制器110与存储器装置130之间的接口。存储器控制器120的其中一个功能是将高阶读取及写入请求翻译为特定存储器装置130的命令语言,这种命令语言可用来存取存储器装置130上的非易失性存储器139。存储器控制器120可包括一接口层(未绘示),接口层负责以兼容于存储器装置130及非易失性存储器139的方式构成用来执行从存储器装置130读取及写入存储器装置130操作的命令序列。命令序列的构成可通过将来自主控制器110的逻辑地址翻译为用于存储器装置130的实体地址来完成。

存储器控制器120通过通信总线122连接至存储器装置130。为了说明的目的,通信总线122可为一通信系统,此通信系统于存储器控制器120及存储器装置130之间传送数据。通信总线122可包括连接到存储器控制器120及存储器装置130的总线(例如物理层连接,像是电线、光纤电缆、无线连接等)。

例如,存储器控制器120可使用一总线结构,此总线结构具有多个总线线i/o0~n,且沿着一芯片选择线(chipselectline,csb)(高态动作(activehigh)或低态动作(activelow))及一频率线(ck)。通信总线122可包括一串行外围接口(serialperipheralinterface,spi)总线或其他同步串行通信接口,此些同步串行通信接口具有下列特征:一同步频率线、一芯片选择线及一或多数据线通过同步频率线上的一同步频率信号同步。spi装置通常使用四线同步串行通信协议,四线串行通信协议可在全多任务模式(ck、csb、主进/从出(masterin/slaveout,miso)、主出/从进(masterout/slavein,mosi))下通信。

存储器装置130包括一总线接口132、控制电路134、一地址译码器136及非易失性存储器139。存储器装置的非易失性存储器139可为每个存储单元一位或每个存储单元多位nor非易失性闪存存储器装置。在其他例子中,非易失性存储器139可包括其他类型的非易失性存储器装置,例如每个存储单元一位或每个存储单元多位nand非易失性闪存存储器装置、相变化存储器、磁性存储器、金属氧化物可编程电阻存储器等。

进一步来说,非易失性存储器139的一些部分可配置一或多个页(page)及区块(block)140用来执行读取及写入操作。例如图1所示,非易失性存储器139的页及区块140可包括一第一部分142及一第二部分144。第一部分142及第二部分144可代表非易失性存储器139的区域。例如,第一部分142可代表从一确切地址xxx(例如,地址000000h)开始的一连续范围的实体地址,且第二部分144可代表从一确切地址yyy(例如地址800000h)开始的另一连续范围。第二部分144可从第一部分142的终止地址的下一个实体地址开始,或者第一部分142与第二部分144之间有额外空间可保留给其他用途或用于扩展第一部分142及/或第二部分144的范围。

非易失性存储器139可进一步包括第三及第四部分(未绘示)等。如后面搭配图2所说明的,第一部分142与第二部分144可做为一集合(或一组)而动作,其中信息是从二者其中之一中被读取,直到最新的信息完全被写入(以及选择性地被认证)到两者中的另一,接着数据可从具有最新的信息的那个部分被读取,其中具有较旧的信息的另一部分可被用在下一个更新写入最新的信息。「最新的信息」可以是改变程序代码的一或多行,或者是将程序代码整个替换掉。这将在非易失性存储器139的这两个部分之间来回运作。上面提到但未绘示的第三及第四部分也可以与第一部分142与第二部分144相同的方式而被使用。在一实施例中,可要求每一「集合」的两个部分(例如第一部分142与第二部分144)是位在非易失性存储器139中不同的区块(bank)。在另一实施例中,可要求每一「集合」的两个部分是位在非易失性存储器139中同一个区块(bank)。这些「集合」的部分可通过逻辑配置或指定于存储器装置130上,例如映像或控制电路。

存储器装置130的地址译码器136包括一映像表137,且控制电路134包括状态逻辑138。映像表137映像通过总线接口132从存储器控制器120接收的命令地址(例如读取命令地址及写入命令地址)至非易失性存储器体139的实体地址。状态逻辑138可用以指示映像表137要读取或写入一集合中的哪个部分(例如第一部分142或第二部分144)。在一实施例中,映像表137可像一多任务器一样动作,此多任务器响应由状态逻辑138输出的一状态位(例如用以指示系统100目前确切状态的一目前状态位)以决定要读取一集合中的哪一个部分以及要写入一集合中的哪一个部分。控制电路134及/或状态逻辑138也可指示存储器装置130是操作于何种模式。例如,控制电路134及/或状态逻辑138可决定并指示存储器装置130是处于一一般模式或一双区域更新模式,其中双区域更新模式下,第一部分142及第二部分144被用来存储及更新程序代码(例如开机代码)。

状态逻辑138不需要全部位于控制电路134。例如,一部分的状态逻辑138可位于存储器装置的其他地方,状态逻辑138所用的状态位也是。这个存储器装置130的图标只是为了说明存储器装置130中的元件及执行的功能,底下所述的各种操作及信息可存储或实行在存储器装置130不同部分,系统100也是如此。

包括状态逻辑138的控制电路134可存取非易失性存储器139、执行存储器读取及写入操作以及保存一目前状态,其中目前状态用以决定非易失性存储器中各集合的哪一个部分(例如第一部分142或第二部分144)要被使用或存取。目前状态可允许映射表137决定(映像)一集合的哪一部分要被读取。

在一实施例中,第一部分142及第二部分144用以存储bios或开机代码,目前状态可被状态逻辑138用来引导一写入操作以将更新的bios或开机代码写入至非易失性存储器139的部分的其中之一,使得系统100不会在非易失性存储器139的该部分上的更新的程序代码完全更新及验证完成之前「开机(bootup)」。于下次「开机」(也就是完成更新及验证之后)时,状态会被更新且状态逻辑138结合映像表137会致使系统100从非易失性存储器139中具有更新的程序代码的部分开机。这些操作的细节将在底下搭配图2~图5c进行说明。

控制电路134也可译码通过总线接口132从存储器控制器120接收的命令序列。这些命令序列可包括对应于操作程序代码(例如读取、写入、擦除等)、命令地址及/或数据(例如要被写入非易失性存储器139的数据)。控制电路134根据接收的多个命令序列执行多个操作,并执行逻辑(至少一部分的逻辑)以在非易失性存储器139上执行更新程序代码(例如bios或开机代码)的更新操作。

更新操作可例如在控制电路134接收到一第一命令序列及当控制电路134接收到一第二命令序列时被执行,其中第一命令序列包括一写入命令(以写入/更新数据(例如数据x))及一写入地址;第二命令序列包括一读取命令(以读取数据(例如数据x))。非易失性存储器139的页/区块140配置有用以执行读取及写入的地址。读取及写入地址的配置可通过存储器装置130上的逻辑来设定。例如,读取命令地址可由存储器装置130的映像表137指定以读取数据。就bios或开机代码而言,非易失性存储器139可包括一开机区块,此开机区块包括第一部分142及第二部分144,而读取命令地址可用以总是从开机区块中的特定地址读取数据。相似地,写入地址可用以写入开机区块中的特定地址。替代地,存储器控制器120可用以基于存储器控制器120上的逻辑(部分逻辑)及/或基于主控制器110的操作系统的配置或逻辑将读取命令地址及写入命令地址指派(预先配置)给某些操作。

因为从存储器控制器120接收到的读取命令地址被地址译码器136映像到例如非易失性存储器139的第一部分142,而使得更新存储于非易失性存储器139上的数据的更新操作能够被执行。另一方面,从存储器控制器120接收到的写入命令地址由地址控制器136映像到例如非易失性存储器139的第二部分144。例如,从非易失性存储器139的第一部分142读取开机代码的一读取操作可被用在系统100的「开机」期间,而用以更新开机代码的写入命令继续将更新的开机代码写入到非易失性存储器139的第二部分144。当写入操作全部完成时,系统100可通过从非易失性存储器139的第二部分144读取而使用更新的开机代码或bios「开机」。每当开机代码或bios被更新(例如新的开机代码被写入并验证),这个程序便通过在第一部分142与第二部分144之间转换而能够继续运行。

在完成数据更新及验证后,这个更新操作需要存储器装置130更新状态,使得地址译码器136能够适当地映像读取(例如系统开机)及写入(更新bios或开机代码)至合适的部分(例如第一部分142或第二部分144)。换而言之,地址译码器136与控制电路134的结合实现了切换被映像到读取地址及写入地址的非易失性存储器139的部分的操作。

图2绘示用于依据一更新操作更新一存储器装置的一非易失性存储器的第一及第二部分的第一及第二配置的功能性方块图。

明确来说,图2绘示一第一配置200及一第二配置202。根据第一配置200,图1的非易失性存储器139的第一部分142用以存储在「开机」期间要读取的数据(例如开机代码),而非易失性存储器139的第二部分144用以写入更新的数据(例如更新的开机代码)。在图2的这个例子中,第一部分142及第二部分144可用以存储bios或开机代码。根据第一配置200,第一部分142包括一开机代码区域143,其中开机代码区域143存储有在「开机」期间使用的开机代码。第二部分144包括一更新代码区域145,其中更新代码区域145被用来写入更新的开机代码。这仅仅是本发明的一个示例性范例且不应被限制于bios或开机代码。开机代码区域143也可指存储目前版本的程序代码的一「目前程序代码区域」,而更新代码区域145则是用来存储「目前程序代码区域」中的程序代码的更新版本。

在图2的第一配置200中,非易失性存储器139的第一部分142的起始地址被指派从实体地址000000h(十六进制制)(电就是二进制制的000000000000000000000000)开始,而非易失性存储器139的第二部分144的起始地址则被指派为从800000h(也就是二进制制的100000000000000000000000)开始。非易失性存储器139的第一部分142及/或第二部分144的终止地址被指派为实体地址ffffffh(也就是二进制制的111111111111111111111111)。

进一步地,根据第一配置200,当主控制器执行一读取操作以从非易失性存储器139的地址000000h开始读取开机代码时,会被导向实体地址000000h。再根据第一配置200,当主控制器执行一写入操作以写入更新的开机代码到非易失性存储器139的地址800000h,会被导向实体地址800000h。

图2也绘示了变量bootcode-def(位)为「致能(enable)」。bootcode-def可为「致能」或「禁能(disable)」。当bootcode-def为「致能」时,存储器装置130(图1)是处于一双区域更新模式(例如简称「双模式」),其中在双模式下,允许在继续使用目前开机代码时,更新bios或开机代码。换句话说,当bootcode-def为「致能」时,第一配置200与第二配置202皆被用来读取/写入数据(开机代码)。若bootcode-def指示为「禁能」时,存储器装置130会操作于一传统模式,这表示第一配置200与第二配置202皆不会被使用(亦即双模式被禁用)。换句话说,bootcode-def的改变代表启用或禁用本发明的「双区域更新模式」。bootcode-def可由用户设定且bootcode-def的值可存储于一非易失性存储器缓存器(未绘示),像是重要存储器(criticalmemory)。图1的控制电路134及状态逻辑138根据bootcode-def操作。「bootcode-def」的命名仅为一个例子,是用来指示被存储器装置130用来决定要操作于传统模式还是双模式的一个变量。任何其他的命名方式皆可以被使用。

此外,根据第一配置200,变量bootaddr-def等于0。这可代表第一部分142与第二部分144是根据第一配置被使用。在这个例子中,当bootaddr-def等于0(也就是第一配置),在「开机」期间要被读取的程序代码(开机代码)是从非易失性存储器139中为开机代码指派的最低的地址开始存储的。此第一配置也可指示程序代码是从非易失性存储器139(或非易失性存储器139的一区块)的最高地址或非易失性存储器139的特定区块的最高地址或其他类型的配置开始存储。bootaddr-def可由用户设定且可被存储于一非易失性存储器缓存器(未绘示)。图1的控制电路134及状态逻辑138根据变量bootaddr-def操作。同样地,「bootaddr-def」的命名方式只是一个例子,是用以指示非易失性存储器139的哪一个部分存储要被读取的目前程序代码,以及非易失性存储器139的哪一个部分要被写入更新的程序代码。

在第一配置200中,当主控制器意图要从地址000000h(亦即主控制器地址(host-addr)为000000h)读取目前程序代码,存储器装置130从实体地址000000h(亦即存储器地址(mem-addr)为000000h)开始读取。当主控制器意图写入更新的程序代码到地址800000h(亦即主控制器地址为800000h),存储器装置从地址800000h(亦即存储器地址800000h)开始写入。

根据第二配置202,非易失性存储器139的第二部分144用以存储在开机期间要被读取的数据(例如开机代码),且非易失性存储器139的第一部分142用以写入更新的数据(例如更新的开机代码)。此外,当bootcode-def为「致能」且bootaddr-def为1时,存储器装置130实行第二配置202。明确来说,在第二配置202中变量bootaddr-def等于1,这可代表第一部分142与第二部分144根据第二配置而被使用。在这个例子中,当bootaddr-def等于1(也就是第二配置)开机期间要被读取的程序代码(开机代码)的存储处是从非易失性存储器的最低地址以外的实体地址开始(例如实体地址800000h,不同于第一配置200(第一配置)中的实体地址000000h)。

如图2所示,根据第二配置202,当主控制器意图要从地址000000h(亦即主控制器地址(host-addr)为000000h)读取目前程序代码,存储器装置130从实体地址800000h(亦即存储器地址(mem-addr)为800000h)开始读取。当主控制器意图写入更新的程序代码到地址800000h(亦即主控制器地址为800000h),存储器装置从地址000000h(亦即存储器地址000000h)开始写入。

此外,参照图2,第一配置200中第一部分142(开机代码区域143)的二进制制地址开始于000000000000000000000000,而在第二配置202中第二部分144(开机代码区域143)的二进制制地址起始于100000000000000000000000。因此,通过简易地翻转地址的最高有效位,开机代码区域143的实体地址可取决于所执行的配置而改变。如搭配图3所描述的更多细节,指定给bootaddr-def的值可致使控制电路134与状态逻辑138变换物理内存地址的最高有效位,以使得能够从非易失性存储器139中适合的区域读取程序代码,以及将程序代码更新(写入)到非易失性存储器139中适合的区域。

图3绘示图1中的部分的功能性方块图。

明确来说,图3绘示图1的系统100的控制电路134、地址译码器136以及非易失性存储器139等部分。请参照图3,系统100可包括地址逻辑300以及闩锁逻辑302。地址逻辑300与闩锁逻辑302皆为图1中控制电路134的状态逻辑138第一部分。

bootaddr-def的值如参照图2与前文所述的可存储于一非易失性存储器缓存器中。bootaddr-def的值可由闩锁逻辑302接收。如前面说明的,变量bootaddr-def可为「1」或「0」,用以指示系统100使用第一配置或第二配置操作。第一配置可指图2的第一配置200,而第二配置可指图2的第二配置202。

每次系统100开机时,闩锁逻辑302也会接收一上电触发信号(poweruptrigger)。当闩锁逻辑302接收到上电触发信号,会将变数bootaddr设为bootaddr-def的值。例如在系统100的操作期间,bootaddr-def的值可从「1」变更为「0」或从「0」变更为「1」。然而,bootaddr的值将不会被改变直到系统100重启且上电触发信号致使闩锁逻辑302将bootaddr设为等于bootaddr-def的值。因此,系统100可继续使用第一配置200进行操作直到系统100重启。重启之后,系统100会使用第二配置202进行操作。换句话说,单单改变bootaddr-def各不会使得bootaddr改变。需要同时满足(1)改变bootaddr-def以及(2)重启系统100(也就是上电触发信号)才能使得bootaddr的值改变。

如图3所示,地址逻辑300取得变量bootcode-def的值以及一写入命令的一写入地址的最高有效位。变量bootcode-def如前面参照图2所说明的。基本上,bootcode-def指示双区域更新模式(即双模式)是启用还是禁用。若双模式被禁用,系统100将操作在一传统方法下。若双模式被启用,系统100将使用如图2所示的两个不同配置进行操作。bootcode-def的值可为「0」或「1」,其中如图3所示,「0」代表禁用双模式,「1」代表启用双模式。上述的值仅仅是个示例,其意义是可以对调的。

由地址逻辑300获得的「主控制器写入地址最高有效位(hostmostsignificantbitofwriteaddress)」(或写入地址可替换为读取地址)是由主控制器写入(或读取)命令标示出的写入地址(或读取地址)的最高有效位。也就是主控制器意图要写入的地址的最高有效位。在这个例子中,图3将写入地址的主控制器最高有效位标示为「hmsbaddr」。地址逻辑300也接收由闩锁逻辑302决定的bootaddr的值。地址逻辑300的操作如下所述。

当bootcode-def为禁能,(1)由地址逻辑300输出的变量「mmsaddr」等于hmsbaddr,且(2)变量bootaddr以及inhibit-write被忽略或不提供功能。当bootcode-def为致能,(1)当bootaddr-def等于「0」(注意,在一个新的上电周期或重启后bootaddr等于bootaddr-def)变数mmsaddr等于hmsbaddr,而(2)当bootaddr-def等于「1」(注意,在一个新的上电周期或重启后bootaddr等于bootaddr-def)变数mmsaddr等于hmssbaddr的反相值(invertedvalue)。

地址译码器136接收地址逻辑300提供的mmsaddr以及其余的部分主控制器写入地址(也就是「写入地址的主控制器最低有效位(hostleastsignificantbitsofwriteaddress)」或「hlsbaddr」)。地址译码器结合mmsaddr与hlsbaddr,并使用映射表137(如图1所示)以辨别非易失性存储器139的哪个实体地址应该要被存取。例如,若主控制器发送一写入命令到地址000000h(即000000000000000000000000),当bootcode-def为致能且bootaddr为1时,地址逻辑136会将由mmsaddr表示的此写入命令的最高有效位从「0」翻转(反相)为「1」,并结合具有「1」的mmsaddr与具有值「00000000000000000000000」的hlsbaddr。其结果为「100000000000000000000000」,被映像表137用来寻址到对应的实体地址。实质上,地址逻辑300与闩锁逻辑302致使地址译码器136使用一配置,以令更新的开机代码被写入一个不同于目前开机代码的位置(例如图2中的第二配置202)。在这个例子中,写入更新的程序代码是执行在第二部分144(更新代码区域145)上,并从地址800000h(即100000000000000000000000)开始。相同的操作被执行以从非易失性存储器139中读取程序代码。控制电路134能够判断一个命令是一个写入命令还是一个读取命令,然后导向读取适当的部分。参数可由控制电路134及/或状态机(statemachine)存储以区分用于读取命令及写入命令的逻辑。在这个例子中,目前程序代码会从第一部分142(开机代码区域143)读取,并从地址000000h开始。

为了增加一层安全防护,禁止写入逻辑304被用来避免开机代码区域143在更新代码区域145上的程序代码更新并验证完成之前被覆写或擦除。禁止写入逻辑304接收(1)来自闩锁逻辑302的bootaddr、(2)来自地址逻辑300的mmsaddr及(3)bootcode-def。基于这些输入,禁止写入逻辑304可为开机代码区域143及更新代码区域145致能或禁能一禁止写入的状态。明确来说,当bootcode-def为0,也就是双模式被禁用,inhibit-write及bootaddr将不提供功能。然而,当bootcode-def为1,也就是双模式被启用,禁止写入逻辑304决定要致能或禁能inhibit-write(也就是inhibit-write设为1或inhibit-write设为0)。例如,禁止写入逻辑304像xor门一般动作,bootaddr及mmsaddr为输入,inhibit-write的值为输出。因此,当禁止写入逻辑304以xor门实现时,在bootaddr与mmsaddr有相同的值(例如同为「0」或同为「1」)的情况下,inhibit-write会被致能(也就是inhibit-write的值为1)。反之,在bootaddr与mmsaddr有不同的值(例如一个为「1」,另一个为「0」)的情况下,inhibit-write会被禁能(也就是inhibit-write的值为0)。上述以逻辑实现禁止写入逻辑304的方式仅仅是一个例子而已,任何其他类型的逻辑对于本领域的技术人员而言都是显而易见的。对于开机代码区域143而言,当变量inhibit-write为致能(例如inhibit-write为1),开机代码区域143不能被写入。换句话说,存储有目前开机代码的非易失性存储器139的实体地址被设为「只读」,以使得目前开机代码无法被覆写。反之,对于更新代码区域145而言,当变量inhibit-write为禁能(例如inhibit-write为0),更新代码区域145不是「只读」而能够被写入或擦除。

变量bootaddr及inhibit-write的值无法由用户设置,只能由系统100或系统100的逻辑设置。此外,这些值可存储于易失性或非易失性存储器中。

图4绘示存储器装置操作于双区域更新模式(也就是双模式)下的功能性方块图。明确来说,图4绘示存储器装置130包括控制电路134、状态逻辑138、具有映像表137的地址译码器136以及非易失性存储器139。非易失性存储器139可包括多个页/区块(未绘示,请参照图1),其中这些页/区块包括第一部分142及第二部分144。图4中的存储器装置130的操作类似于图1中的存储器装置130的操作,也类似于参照图3于上文所做的说明。因此,重复的叙述将被省略。

存储器装置130的地址译码器136部分基于状态逻辑138执行主控制器发出的读取/写入命令地址与非易失性存储器139的实体地址之间的映像。此外,如图4所示,用来执行读取及写入操作的命令序列从存储器控制器(未绘示)处被接收。读取操作是以实线表示,写入操作是以虚线表示,以及地址译码器136的映像表137执行的映像以点线表示。

如前文提到的,存储器装置130的非易失性存储器139可包括第一部分142及第二部分144,其中第一部分142从实体地址000000h开始,第二部分144从实体地址800000h开始。不同于主控制器(未绘示)或主控制器运行的软件所采用的逻辑地址,第一部分142及第二部分144是位于非易失性存储器130的页/区块上的实体地址。

存储器装置130的控制电路134可译码来自存储器控制器的命令序列,其中命令序列包括操作程序代码(例如读取、写入、擦除等)、命令地址、数据以及其他信息。基于接收到的命令序列,控制电路134会输出经过译码及调整的命令地址。明确来说,接收到的命令序列可包括一读取命令地址,此读取命令地址是由地址译码器136的映像表137预先配置的,用以从非易失性存储器139的一特定部分(例如页的一特定集合)读取数据,命令序列也可包括写入命令地址,此写入命令地址是由地址译码器136的映像表137预先配置的,用以写入数据到非易失性存储器139的一特定部分(例如页的特定集合)。

如图3所示,控制电路134的状态逻辑138包括的逻辑为执行地址逻辑300、闩锁逻辑302以及禁止写入逻辑304的操作。明确来说,状态逻辑138包括保存目前状态的逻辑,其中目前状态指示(1)非易失性存储器139的第一部分142为存储信息的一目前区域(例如一开机代码区域143)且非易失性存储器139的第二部分144可用来通过最新的信息进行更新(例如更新代码区域145),或(2)非易失性存储器139的第二部分144为存储信息的一目前区域(例如一开机代码区域143)且非易失性存储器139的第一部分142可用来通过最新的信息进行更新(例如更新代码区域145)。

控制电路134接收来自主控制器的命令序列以及取得变量(例如参照图3所述的bootcode-def、hmsbaddr、hlsbaddr、bootaddr-def、上电触发信号等)的值。控制电路134将命令序列译码并提供经过译码的命令及命令地址给地址译码器136,如同参照图3所描述的细节。地址译码器136的映像表137可将读取命令地址映像(点线)到非易失性存储器139中适当的部分。地址译码器136的映像表137也能将写入命令地址映像到非易失性存储器139中适当的部分。

明确来说,映像表137与状态逻辑138可被用来执行将读取命令地址映像到非易失性存储器139中适当的部分(例如第一部分142及/或第二部分144)。映像表137与状态逻辑138也可被用来执行将写入命令地址映像到非易失性存储器139中适当的部分(例如第一部分142及/或第二部分144)。地址译码器136的映像表137可为一简单的表或其他更复杂的形式。此外,映像表137可为专门用来映像写入部分或读取部分的地址,或者只用来在双区域更新模式下操作时映像。如参照图3所做的叙述,状态逻辑138为映像表137及/或地址译码器136指示哪一个实体地址(例如代表第一部分142及第二部分144起始地址的两个不同的实体地址)应该要被选择来进行读取操作,以及哪一个实体地址应该要被选择来进行写入操作。这个由状态逻辑138提供的指示是基于例如地址逻辑300、闩锁逻辑302及禁止写入逻辑304取得及设定的变量的状态,就如同前面参照图3所描述的。

在图4所示的实施例中,地址译码器136的映像表137提供了(1)经过译码及调整后用来从非易失性存储器139的一或多个部分读取数据的读取命令地址(读取命令地址包括在从存储器控制器处接收的命令序列中)以及(2)非易失性存储器139的第一部分142及非易失性存储器139的第二部分144之间的转译(映射)。相似地,地址译码器136的映像表137提供了(1)经过译码及调整后用来写入数据到非易失性存储器139的一或多个部分的写入命令地址(写入命令地址包括在从存储器控制器处接收的命令序列中)以及(2)非易失性存储器139的第一部分142及非易失性存储器139的第二部分144之间的转译(映射)。

如前面提到的,第一部分142与第二部分144可被配置为非易失性存储器139的部分的一个集合(即由两个部分(如第一部分及第二部分组成的集合),后文或称之为部分集合(setofportions))。在这个例子中,地址译码器136的映像表137能够将经过译码及调整后来自控制电路134的读取命令地址映像到部分集合的第一部分142,并能够将经过译码及调整后来自控制电路134的写入命令地址映像到部分集合的第二部分144。如参照图3所述,基于变量的状态及基于主控制器命令地址,状态逻辑138能根据例如由控制电路134所保存的目前状态来控制应读取部分集合中的哪一部分与要写入部分集合中的哪一部分。需要注意的是,状态逻辑138与控制电路134可将上述功能执行在不只一组的部分集合上。基于状态逻辑138保存的目前状态,映像表137能够:(1)当根据图2的第一配置200开机代码区域143是在第一部分142中,以及根据第二配置202开机代码区域143是在第二部分144中,从开机代码区域143读取目前程序代码,以及(2)当根据图2的第一配置200更新代码区域145是在第二部分144中,以及根据第二配置202更新代码区域145是在第一部分142中,将更新的程序代码写入到更新代码区域145。

例如,若目前状态指示非易失性存储器139的第一部分142是存储信息的目前区域,且非易失性存储器139的第二区域144可用来通过最新的信息进行更新,则控制电路134与地址译码器136的结合会译码、调整并映像读取命令序列到第一部分142,以及会译码、调整并映像写入序列到第二部分144。相反地,若目前状态指示非易失性存储器139的第一部分142可用来通过最新的信息进行更新,且非易失性存储器139的第二区域144是存储信息的目前区域,则控制电路134与地址译码器136的结合会译码、调整并映像读取命令序列到第二部分144,以及会译码、调整并映像写入序列到第一部分142。

此外,控制电路134也可保持地址译码器136持续更新,以使正确的(主控制器)命令序列地址被映像到正确的非易失性存储器139的实体地址。

当读取操作被映像到例如第一部分142,读取操作可继续通过存储器控制器从第一部分142读取数据,并且最终送到主控制器及运行于主控制器的软件。不同的时序(varioustiming)、缓冲与快取机制(未绘示)通常会被施行以协助通过控制器将读取请求传送到存储器装置130,以及将读取的数据从存储器装置130传送出来,并最终传回主控制器(操作系统)。本领域中普通技术人员应能了解完成此读取操作所需的不同时序、缓冲与快取机制。

参照图4,提供了数个例子,其中包括从存储器装置130的第一部分142读取「程序代码x」402的读取操作的例子,以及将「更新的程序代码x」写入存储器装置130的第二部分144的例子。明确来说,图4绘示的是用来读取「程序代码x」的命令序列以及用以更新「程序代码x」的命令序列已被接收,上述的命令序列皆来自主控制器/控制器。如背景技术中所述,传统的存储器系统是以两个物理存储器芯片来存储开机代码或bios。然而,基于本发明所提供的双更新区域模式的独特结构,在同一个存储器装置130的非易失性存储器139中,写入操作可更新「程序代码x」,且可从中读取目前的「程序代码x」402。只有在「更新的程序代码x」完成存储并验证,系统才会在重启时从存储器装置130中读取更新的程序代码。由于读取命令地址会由控制电路134译码并调整,再由地址译码器136映像至适当的部分(例如图4的第一部分142),而该部份不同于「更新的程序代码x」404要写入的部分,故能够达到上述效果。于是,「新的」或「更新的」版本的「程序代码x」能够在不遗失「程序代码x」402的情况下被写入。

当「更新的程序代码x」404存储至非易失性存储器139的第二部分144后,本发明可验证「更新的程序代码x」404是完整且正确的。当完成验证,变量bootaddr-def可被变更/更新,以使得在下次重启时上电触发信号会致使闩锁逻辑302更新bootaddr的值以符合已更新/变更的bootaddr-def。于是,更新的开机代码或bios将于开机时从第二部分144中被读取。由存储器装置130执行以验证更新的程序代码及完成双区域更新模式的程序的各种操作将在底下搭配图5a、图5b及图5c进一步说明。

图5a、图5b及图5c绘示当系统操作于「双区域更新模式」下,为了执行更新操作的各种操作的流程图。明确来说,图5a、图5b及图5c的流程图500a、500b及500c绘示了存储器装置130为了操作在双区域更新模式下所执行的操作。

请参照图5a所绘示的流程图500a。流程图500a可由图1~图4所述的系统100(或其等效物)来执行。在操作502中,系统100执行开机。

在开机之后的操作504中,系统100判断「lowboot-def」是否等于「boodaddr-def」。变量bootaddr-def已在前文说明,特别是参考图3所做的说明。变量「1owboot-def」会在操作512中配置,并在下文进一步说明细节。

若「lowboot-def」等于「bootaddr-def」,系统100执行操作506,其中在操作506中判断程序代码已经更新。然后系统100在操作508中来到一般系统操作并继续从非易失性存储器139的适当的部分读取更新的程序代码。

若操作504中「lowboot-def」不等于「bootaddr-def」,系统仍旧设定为运行目前的开机代码(而不是更新的开机代码)。于是,系统100执行操作510,其中操作510检查变量「eraseok」是否等于或已被「重设(reset)」。「eraseok」指示非易失性存储器139的部分是否已被擦除。若「eraseok」已被重设(reset),系统100执行操作512,其中在操作512中bootaddr-def被设定为等于lowboot-def,接着执行操作514以致使重启或树立一上电循环(powerupcycle)。由于操作512使得lowboot-def等于bootaddr-def,故于下次系统开机的操作502中,操作504的判断会为「是」,且系统最终会来到操作508的一般系统操作。

在操作510中,若系统100判断eraseok不等于或还未被重设(亦即新的开机代码已经快要完成更新,但仍未完成),系统执行操作516以判断变量「pgmok」是否等于或已被设定(set)。若pgmok已被设定,系统100执行操作518,其中系统518中eraseok会被重设。在操作518之后,系统100执行操作512及上述后续操作。

在操作516中,若系统100判断pgmok不等于或未被设定(亦即开机代码的更新未完成),系统100执行操作520以将lowboot-def设定为等于bootaddr-def。

接着,在操作522a中,系统100更新程序代码,如图5b所示。在图5b中,流程图500b是延续操作522b中程序代码的更新。接着,在操作524中,lowboot-def的值会被反相或翻转,例如「1」变更为「0」及「0」变更为「1」。

在操作524之后,系统100执行操作526以判断变量「eraseok」是否已被设定。若eraseok已被设定,系统100执行操作528以判断所有内容是否为空白,接着执行操作530或程序a536,其中程序a536会在图5c中进一步说明细节。操作530中,系统100开始更新程序代码。系统100会在操作532中定期检查程序代码是否已完成更新。若程序代码还未完成更新,系统100会继续执行操作530。当在操作532中判断程序代码已经完成更新,系统100会执行程序b534,其中程序b534会在图5c中进一步说明细节。

回到操作526,当系统100判断eraseok还未被设定,系统100将会执行操作538以擦除更新代码区域(例如第1~3图所示的更新代码区域145)。在操作540中,系统100判断更新代码区域是否已完全擦除。若更新代码区域未完全擦除,系统100会继续执行操作538,并意图再次擦除更新代码区域。

在操作540中,若系统100判断更新代码区域已完全擦除,系统100会执行操作544以设定eraseok(也就是eraseok等于set)。接着,如同前文所述的,系统100将执行操作530,并且当程序代码完成更新时,最终来到程序b534。

请参照图5c,绘示了程序a536(接续图5b),当在操作528(请参照图5b)中,系统100判断(更新代码区域的)所有的内容不是空白的,系统100会接着执行操作546。在操作546中,系统100将存储于更新代码区域的新的开机代码与被用来更新在更新代码区域中的开机代码的新的开机代码进行比较,以判断存储于更新代码区域的新的开机代码是否正确。

在操作548中,若存储于更新代码区域的新的开机代码被判断为是正确的,系统100会执行操作550以检查所有的新的开机代码是否全部存储于更新代码区域(亦即检查新的开机代码的最后一字节是否有存储在更新代码区域中)。若所有的新的开机代码并非全部存储在更新代码区域,系统回头继续执行操作546。若所有的新的开机代码全部存储在更新代码区域,操作继续来到程序b534,然后执行操作552。需要注意的是,若操作532中程序代码的更新完全完成(参照图5b),会跳到程序b534,并执行操作552。

在操作552中,系统100设定pgmok并重设eraseok。接着,系统在操作554中将bootaddr-def设定为等于lowboot-def(也就是bootaddr-def=lowboot-def)。接着,系统100在操作556中重启或树立一上电循环,这将致使系统100执行图5a中的系统开机操作502。

回到操作548,若存储于更新代码区域的所有的新的开机代码不是正确的,系统100会执行操作558。在操作558中,系统100检查以确认更新代码区域的剩余空间是否为空白的。若更新代码区域的剩余空间不是空白的,系统100会跳到程序c522,致使系统100执行图5b中的操作538。操作538已在前文搭配图5b叙述过,故此处不再赘述。

相反地,若所有的剩余区域是空白的,系统100通过继续更新更新代码区域中的程序代码执行操作560。系统100会继续在操作560中检查程序代码的更新是否完成。若未完成,操作560会继续。当操作560中程序代码更新完成(亦即操作562,判断程序代码是否完成升级),系统100会跳到程序b534,这将致使系统100执行操作552,其中操作522的细节已在前文说明。若操作562判断操作560未完成,操作560便会继续升级程序代码,而系统100将不会跳到程序b534直到程序代码升级完成。需要注意的是,在操作556执行重启后,操作502将开始系统开机。由于图5c的操作554将bootaddr-def设定为等于lowboot-def,图5a的操作504的判断将为「是」,而系统100将继续执行操作506及508。

图6绘示一集成电路的简化方块图,此集成电路例如一nor闪存存储器装置,其包括命令逻辑及支持处于双区域更新模式下的操作的控制电路。集成电路600可实现于一单一芯片。例如,图1、图3及图4的存储器装置130的部分或全部的元件(及其执行的操作)可被包括在集成电路600中。替代地,图1的存储器控制器120的部分元件(及其执行的操作)可被包括在集成电路600。

输入输出(i/o)区块602示出兼容于串行外围接口(serialperipheralinterface,spi)标准的一同步串行接口(serialinterface),且i/o区块602具有标准接脚(pins)。cs#为芯片选择,可对应到前文所述的csb(chipselectbar)线。当cs#为低准位时,装置就会被选择。reset#信号允许装置被重设,终止目前运行的程序并重设状态机。gnd与vdd分别为接地及电源供应。在标准的spi中,si及so分别为串行数据输入及串行数据输出。在双spi(dualspi)操作下,si及so改为双向输入输出接脚:sio0及sio1。在四spi(quadspi)操作下,sio2及sio3可用来高速传输。上述仅仅为一个示例而已,其他的接脚配置也是可行的。串行频率sclk604(或者也可以是ck604)同样被提供。集成电路上的频率产生器605为命令逻辑620及其他元件产生频率信号。在这个实施例中,频率产生器605接收来自slck604接脚的slck。由i/o区块602代表的总线接口可支持双倍数据率(doubledatarate,ddr)或单倍数据率(singledatarate,sdr)协议。

其他类型的串行接口可被用在各种实施例中。不同于nor闪存存储器的存储器技术也可以被运用。

在一些例子中,此处所述的用于指示命令序列开始及结束的控制信号可为区块602中总线线上的一或多个信号。例如,在一些实施例中,cs#或reset#可被切换,像是在一第一过度期由低准位转为高准位,在一第二过渡期由高准位转为低准位。替代地或额外地,一终止事件可由芯片控制逻辑于内部产生。

状态逻辑608包括电路及逻辑,此些电路及逻辑用以保存一目前状态以及执行图1的状态逻辑138及/或控制电路134实行的部分或全部的逻辑。目前状态指示是否(1)nor闪存存储器阵列628的第一部分为存储信息的一目前区域且nor闪存存储器阵列628的第二部分用来通过最新的信息进行更新,或者(2)nor闪存存储器阵列628的第一部分用来通过最新的信息进行更新且nor闪存存储器阵列628的第二部分为存储信息的一目前区域。nor闪存存储器628可配置有多个页/区块,此些页/区块具有第一部分及第二部分。第一部分及第二部分可来自相同的区块(bank)或可来自不同的区块(bank)。如前文所述,除了此两个部分的集合外也可包括其他两两部分所组成的集合(例如第三部分及第四部分)。而在本实施例中,只有第一部分与第二部分所组成的一第一集合会被说明。这个架构下的两两部分所组成的集合及目前状态的细节皆已在前文搭配图1~图4说明。

状态逻辑608可包括能够指示nor闪存存储器阵列628的哪一个部分被指派给目前程序代码(例如开机代码区域143)及哪一个部分被指派用来更新(例如更新代码区域145)的逻辑。例如,状态逻辑608保存的目前状态可指示第一部分142为开机代码区域143或第二部分144为开机代码区域143,这取决于变量bootaddr-def的值。此外,状态逻辑608保存的目前状态可指示第二部分144为更新代码区域145或第一部分142为更新代码区域145。如前文所述,当存在其他两两部分组成的集合时,状态逻辑608将会持续追踪其他两两部分组成的集合中哪一部分是开机代码区域及/或哪一部分是更新代码区域。更明确来说,如参照hmsbaddr及参照图3所做的描述,状态逻辑608对主控制器地址的最高有效位执行反相或翻转。如前文所述,由状态逻辑608反相hmsbaddr会使得系统写入第一部分及/或第二部分,或从第一部分及/或第二部分读取。状态逻辑608可从地址产生器607或集成电路600的其他元件取得第一部分及第二部分的实体地址。如参照图1~图4所做的说明,状态逻辑138的功能可被状态逻辑608实现。

映像译码器606a执行例如包括映像表137的地址译码器136的操作,这些操作可参照前面针对图1~图4所做的说明。特别是,映像译码器606a实现基于状态逻辑608提供的状态及将命令地址映像到物理存储器(例如nor闪存存储器阵列628)的页及区块(bank)(部分)的实体地址的逻辑。映像译码器606a可基于一映像表(例如图1、图3及图4的映像表137)及基于逻辑(例如图1、图3及图4的状态逻辑138)将读取命令地址及写入命令地址映像到物理存储器的页及区块(bank)(部分)的实体地址。

与集成电路600的其他电路及逻辑结合的映像译码器606a执行图1~图5中描述的双区域更新模式。部分重复描述在此会被省略。特别需要注意的是,状态逻辑608、映像译码器606a以及集成电路600中其他元件的组合可执行图5a、图5b及图5c所示的流程图500a、500b及500c的操作。换句话说,状态逻辑608及映像译码器606a根据图5a~图5c所示的操作通过写入/读取快闪bios阵列的适当部分(例如第一部分及第二部分)执行来回交替(ping-ponging)。

地址产生器607包括的电路可用来为存取nor闪存存储器阵列628而提供实体地址序列。

在一些实施例中,数据缓存器614可作为命令序列输入到存储部分的缓冲器。数据及参数可被存储在支持可中断写入操作及其他操作的sram缓冲器624中。在一些例子中,数据缓存器614可为sram缓冲器624第一部分。

集成电路600也可包括命令逻辑620及控制电路,其中命令逻辑620可产生内部控制信号,控制电路例如支持偏压电路的状态机622。高电压产生器626产生任何需要的高电压,可例如用于读取、编程或擦除操作。命令逻辑620执行命令程序,其中命令程序指读取、写入、擦除或与其相关的数据。在本实施例中,包括状态机622的控制电路在命令逻辑的致能下执行存取存储器阵列628的内嵌程序、擦除及写入操作。

除了映射译码器606a之外,存储器阵列628包括x译码器606b及y译码器632,且数据信号通过感测放大器634输出。输出缓冲器636可保存从存储器输出的输出数据。

在图6所示的例子中,命令序列包括从i/o区块602中的sio接脚接收的由字节(bytes)组成的序列。命令逻辑620可包括逻辑来译码操作程序代码,发送起始地址到地址计数器,并提供控制信号以设定及初始化命令序列中标示的内嵌程序,包括使用状态机622的写入(例如编程及擦除)及读取程序。图6例子是一个使用串行总线接口的串行快闪装置,用来存取序列数据。串行总线接口包括至少一同步频率信号ck、数据信号以及至少一芯片选择信号csb,其中存储数据的存储单位的宽度大于或等于一位。在使用串行总线接口的情况下,前文所述的命令序列是可以被支持的。

这种配置可用以支持兼容于串行外围接口标准总线架构的总线,其中cs对应于spi低态动作(activelow)芯片选择(chipselect)csb,ck对应于spi串行频率(serialclock)sclk;端口0(port0)对应于spi主出/从进端口(master-out/slave-inport,mosiport),端口1(port1)对应于spi第一主进/从出端口(firstmaster-in/slave-outport,miso1port),端口2(port2)对应于spi第二主进/从出端口(secondmaster-in/slave-outport,miso2port),以及端口3(port3)对应于spi第三主进/从出端口(thirdmaster-in/slave-outport,miso3port)。本发明的技术可用在任何标准及非标准总线结构,包括例如i2c。

本领域的技术人员可清楚地了解本图只是用来说明其中一个实施例而已;如本文描述的支持可中断写入命令序列的装置可与本图有很大的不同,例如包括不同元件或以不同的连接方式等。

图6所示的实施例包括一nor闪存存储器阵列628,nor闪存存储器阵列628是用以存储开机代码或bios或其他类型非易失性信息的存储器阵列。然而,其他类型的存储器系统电可被采用,包括相变化存储器(phasechangememory,pcm)、电阻式存储器(resistivememoryelementmemory,reramorrram)、nand闪存存储器及磁阻式存储器(magnetoresistivememory)等。此外,其他类型的存储器系统也可被采用,包括易失性存储器,例如dram。

本文说明了多个由存储器装置或存储器控制器所执行的逻辑的流程图。所述逻辑可使用处理器编程及存储于存储器的计算机程序来实现,所述计算机程序可被计算机系统存取,且可被处理器、专用逻辑硬件或专用逻辑硬件与计算机程序的结合执行,其中专用逻辑硬件包括现场可编程集成电路、以电路实现的状态机等。对于本文中的所有流程图,许多步骤可以被组合在一起、平行(并行)执行或者以不同的顺序执行,而不会影响所能达到的功能。在一些情况下,读者将理解到只有在进行了某些其他更改时,重新排列步骤才能获得相同的结果。在其他情况下,读者也将理解到只有在满足某些条件时,重新排列步骤才能达到相同的结果。此外,本文里的流程图仅示出有助于理解本发明的相关步骤。可以理解的是,在所示出的步骤之前、之后及之间可加入用于完成其他功能的许多额外步骤。

虽然本发明已通过参考实施例及各种例子对细节说明如上,但可以理解的是此些例子仅是作为说明之用,并非用来限制本发明。本领域的技术人员将能轻易地在本发明的精神和所附权利要求的范畴内进行修改和组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1