CN100470681C - 一种基于与非型闪存实现用户程序引导的方法 - Google Patents
一种基于与非型闪存实现用户程序引导的方法 Download PDFInfo
- Publication number
- CN100470681C CN100470681C CNB2004100460139A CN200410046013A CN100470681C CN 100470681 C CN100470681 C CN 100470681C CN B2004100460139 A CNB2004100460139 A CN B2004100460139A CN 200410046013 A CN200410046013 A CN 200410046013A CN 100470681 C CN100470681 C CN 100470681C
- Authority
- CN
- China
- Prior art keywords
- program
- flash
- user program
- application program
- application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000008569 process Effects 0.000 claims description 12
- 238000005538 encapsulation Methods 0.000 claims description 9
- 238000012937 correction Methods 0.000 claims description 5
- 238000012856 packing Methods 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 abstract 1
- 239000000047 product Substances 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000013500 data storage Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 210000004027 cell Anatomy 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 210000000352 storage cell Anatomy 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 239000012467 final product Substances 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于与非型闪存(NAND Flash)实现用户程序引导的方法,所述与非型闪存用于储存所述用户程序,所述用户程序以预定格式封装,所述方法包括以下步骤:根据所述封装中的关于所述用户程序的信息,查找存储在所述与非型闪存中的所述用户程序的地址和长度信息;以及根据所找到的起始地址和长度信息,将相应的应用程序装入用于执行所述用户程序的存储器中。本发明的方法易于实现,对处理器的要求不高,有广阔的应用前景。
Description
技术领域
本发明涉及一种基于与非型闪存(NAND Flash)实现用户程序引导的方法。
背景技术
目前市场上的消费性产品的功能日益复杂,通常一个产品可以具有多种功能(如电子产品中的优盘加MP3功能的组合等)。这些功能的实现都是通过由该产品内部的处理器执行不同的应用程序来实现的。为此目的,其原理是在该产品上电后将外部应用程序转载到产品内部的RAM(随机存取存储器)里运行。这种转载就需要相应的程序引导(Boot)功能。目前虽然有一些产品具有基于处理器实现的引导功能,其方法是将应用程序存储在外部的介质如与非型闪存或ROM里,上电后再将其读进内存中,由系统在内存中运行。但这种引导功能的实现通常比较复杂,对处理器的要求较高,例如要求处理器具有MMU(存储器管理单元)功能等。
NOR和NAND是目前市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash(或非型闪存)技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了与非型闪存结构,强调降低每比特的成本,具有更高的性能,并且象磁盘一样可以通过接口容易地升级。
或非型闪存的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在闪存内运行,不必再把代码读到系统RAM中。或非型闪存的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是其很低的写入和擦除速度大大影响了它的性能。
与非型闪存的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用与非型的困难在于闪存的管理和需要特殊的系统接口。
闪存是非易失存储器,可以对被称为块的存储器单元块进行擦写和再编程。任何闪存器件的写入操作只能在空的或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。与非型器件执行擦除操作是十分简单的,而或非型则要求在进行擦除前先要将目标块内所有的位都写为0。
由于擦除或非型器件时是以64~128KB的块为单位进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除与非型器件是以8~32KB的块为单位进行的,执行相同的操作最多只需要4ms。
执行擦除时块尺寸的不同进一步拉大了或非型和与非型之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于或非型的单元中进行。这样,当选择存储解决方案时,设计人员必须权衡以下的各项因素。
●或非型的读速度比与非型稍快一些。
●与非型的写入速度比或非型快很多。
●与非型的4ms擦除速度远比或非型的5s快。
●大多数写入操作需要先进行擦除操作。
●与非型的擦除单元更小,相应的擦除电路更少。
或非型闪存带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
与非型器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。
与非型闪存的读和写操作采用512字节的块,这一点与硬盘管理的此类操作相似,很自然地,基于与非型的存储器就可以取代硬盘或其他块设备。
与非型闪存”经常可以与“或非型闪存”互换使用。大多数情况下闪存只是用来存储少量的代码,这时或非型闪存更适合一些。而与非型闪存则是高数据存储密度的理想解决方案。或非型闪存占据了容量为1~16MB闪存市场的大部分,而与非型闪存只是用在8~128MB的产品当中,这也说明或非型主要应用在代码存储介质中,与非型则适合于数据存储。与非型在CompactFlash(CF卡)、Secure Digital(SD卡)、PC Cards(PC卡)和MMC(多媒体卡)存储卡市场上所占份额最大。
对于可靠性和耐用性,可靠性是采用闪存介质时一个需要重点考虑的问题。对于需要扩展MTBF(平均故障间隔时间)的系统来说,闪存是非常合适的存储方案。一般可以从寿命(耐用性)、位交换和坏块处理三个方面来比较或非型和与非型闪存的可靠性。
1、寿命(耐用性):在与非型闪存中每个块的最大擦写次数是一百万次,而或非型的擦写次数是十万次。与非型存储器除了具有10比1的块擦除周期优势,典型的与非型的块尺寸要比或非型器件小8倍,每个与非型存储器块在给定的时间内的删除次数要少一些。
2、位交换:所有闪存器件都受位交换现象的困扰。在某些情况下,一个比特位会发生反转或被报告反转了。
一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。
当然,如果这个位真的改变了,就必须采用错误检测/错误更正(EDC/ECC)算法。位反转的问题更多见于与非型闪存,因此,一般情况下,在使用与非型闪存的情况下,最好附加使用EDC/ECC算法。
这个问题对于用与非型存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
3、坏块处理:与非型器件中的坏块是随机分布的。以往也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不经济。
与非型器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。
此外,在使用的方便性方面,可以非常直接地使用基于或非型的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
由于需要I/O接口,与非型要复杂得多。各种与非型器件的存取方法因厂家而异。在使用与非型器件时,必须先写入驱动程序,才能继续执行其他操作。向与非型器件写入信息需要相当的技巧,因为设计人员绝不能向坏块写入,这就意味着在与非型器件上自始至终都必须进行虚拟映射。
发明内容
为克服现有技术的上述缺陷,本发明的一个目的是提供一种基于与非型闪存的用户程序引导方法,其易于实现并且对处理器的要求不高。
为实现上述目的,本发明提供的基于与非型闪存的用户程序引导方法中,所述与非型闪存用于储存所述用户程序,所述用户程序以预定格式封装,所述方法包括以下步骤:
根据所述封装中的关于所述用户程序的信息,查找存储在所述与非型闪存中的所述用户程序的地址和长度信息;以及
根据所找到的起始地址和长度信息,将相应的应用程序装入用于执行所述用户程序的程序运行存储器中。
根据本发明的采用引导的方法将存储在处理单元外部的用户程序中的应用程序装载到系统的内存中,从而可以减少程序的掩模费用,方便用户程序的升级及个性化定制,加快产品上市时间,提高产品的竞争力。
本发明的方法易于实现,对处理器的要求不高,有广阔的应用前景。
附图的简要说明
图1是应用本发明的系统的结构示意图;
图2是应用本发明所述方法的系统的一个实施例的示意方框图;
图3是应用本发明所述方法的系统的另一实施例的示意方框图;
图4示出了在本发明的方法的优选实施例中,应用程序在闪存中的封装格式;
图5是本发明的方法的优选实施例的工作流程图;
图6是中断服务程序的流程示意图;
图7是详细示出了本发明方法的优选实施例的引导程序的流程图;
图8是在本发明的方法的优选实施例中采用的链表的示意图。
具体实施方式
下面结合附图对本发明的优选实施例进行详细的说明,附图和示例仅用作解释和说明,不是对本发明范围的限制。
在本发明中,术语“用户程序”与“应用程序”的含意是不同的。用户程序里面包含有多个不同的应用程序,而且需要对用户程序解包后才可以得到具体的应用的程序。
如图1所示,在本发明中,使用本发明方法的系统可包括:存储引导程序的引导程序存储器11,如只读存储器(ROM)或者NOR flash(或非闪存)等;存储用户程序的用户程序闪存(UP)12;保存正在运行的应用程序的运行程序存储器,以下简称为内存13,如随机存取存储器(RAM)或同步动态随机存取存储器(SDRAM)、处理器14以及下载接口15。
引导程序用于对存储在与非型闪存中的用户程序进行解包,提取指定的应用程序并装载到内存里。当应用程序装载完毕后,系统进入正常模式,在正常模式下,驻留程序负责动态切换应用程序。引导程序既可以固化在处理器内部也可以固化在处理器外部。即可以与处理器在或不在同一个芯片上。如上所述,其存储介质可以是Prom(只读存储器)也可以是或非闪存。
用户程序可以单独存储在一片专用的闪存(Flash)中,也可以与数据存储在同一个闪存中。相对于存储介质而言,所谓单独存储就是独占存储介质,所谓存储在同一个闪存中就是用户程序与数据存储在一个存储介质里。运行应用程序的存储器(例如RAM)既可以在处理器的内部,也可以在处理器外部。
下载接口用于下载用户程序,可以是如RS 232接口、USB(通用串行总线)接口、SPI接口(单一程序启动接口)或UART接口、SPI接口、IIC接口、或者1394接口等接口中的一个。利用该下载接口,用户可以随时将所需要的应用程序下载到闪存中。
图2是应用本发明所述方法的系统结构的一个实施例的示意方框图。如图2所示,该系统包括引导程序存储器21、用户程序存储器22、内存23、微处理器24、USB模块25、以及ECC(纠错码)模块26。其中,用户程序存储器22由与非闪存实现;USB模块25用作下载接口,其可与外部设备(如PC)建立通信连接,通过该接口将应用程序下载到与非闪存22中。
在上电后,引导程序存储器21中的引导程序将用户程序存储器22中的指定应用程序装载到内存23中运行。为了保证数据的完整性,在将数据写入用户程序存储器22时,ECC模块26进行ECC编码,并将编码值写入用户程序存储器22的每个存储页的冗余区里;在从用户程序存储器22读出数据时,ECC模块26进行ECC解码及纠错,当发现错误且所发现的错误不可纠正时,则终止将应用程序装载到内存中的操作,以保证程序的准确性。
在本实施例中,引导程序存储器21和用户程序存储器22都位于处理器的外部。在具体实施中,通常由常规的处理器所构成的处理单元可以运行外部的引导程序,也可以在处理单元内部增加一个引导内存,将外部的引导程序装入引导内存里运行。区别是,能直接在处理单元外部运行的引导程序存储介质必须是具有RAM一样的特性,这类存储介质是或非型闪存、MRAM等。内部增加引导程序内存是将引导程序存储在外部的与非型闪存里,上电后自动装入处理单元的引导内存里,处理单元运行引导内存里的引导程序完成用户程序的下载。例如HN29V1G91T-30(128M×8bit)的与非型闪存就具有一个特性,上电后该闪存就自动将内部的第一个存储块的第一个单元数据读到自己的内部缓存里,此时用户系统只要连续给出读信号即可,无须给出读命令字及地址。
图3是应用本发明所述方法的系统的另一实施例的示意方框图。如图3所示,该系统包括引导程序存储器31、用户程序存储器32、内存33、微处理器34、以及RS 232模块35。其中,用户程序存储器22由与非闪存实现;在该实施例中,引导程序存储器31和内存33均位于处理器内部,外部用户程序下载通过RS232接口35完成。
上述两种方案中的“内部”与“外部”是指这些存储器与处理器集成为一体或与处理器分开,但这些存储器和处理器仍属于同一个产品装置。
比较上述两个实施例,除了外部用户程序下载方式不同外(主要指外部接口的不同,如可以是USB接口,也可以是串口等其它类型的接口。这些都是公知技术。),其余的处理流程基本一样。以下以USB为外部下载接口为例说明本发明的基于与非型闪存实现用户程序引导的方法的实现过程。
在本发明的方法的优选实施例中,为了能够将与非型闪存中用户程序中的多个应用程序有选择地正确装载到内存中,对装载到与非型闪存中的应用程序进行封装,封装后的包即可称为用户程序,其封装格式在图4中示出。
如图4所示,在本发明的方法中,封装后的用户程序包由包头和应用程序段组成。包头部分由标识符域、程序装载个数域、地址域组成。应用程序段由多个应用程序段域组成(如应用程序段1域、应用程序段2域等)。应用程序段域的数目由包头部分中的程序装载个数域中的数值指定。而应用程序段域由长度和净荷组成。根据地址索引得到相应的程序段起始地址后,再根据该程序段的长度参数得到具体应用程序的起始地址(由于一个封装后的用户程序包可能由多个应用程序组成,所以需要对应具体的应用程序),就可以将需要的应用程序装载到内存中,这将在后文详细描述。
下面具体解释各个域部分的意义。
标识域:在一个实施例中,标识域为4个字节。其起定界及标识作用。如在浮动存储的情况下,可以查找该标识,如果找到了,就认为找到了用户程序包存储的起始地址。
程序个数域:用来指明用户程序包中含有几个应用程序。在一个实施例中,其为一个字节,因而可指示最多256个应用程序。
地址域:表示程序段的入口地址,每个入口地址为4个字节。每个具体应用程序的入口的地址偏移值由程序个数决定。
程序段域:存放应用程序,每个应用程序的起始地址由前面的相应的入口地址提供。程序段域中的格式是固定的,包括程序段长度域和程序净荷。
程序段域中的长度域指示该程序段的实际程序长度,程序段域中的净荷就是应用程序的有效内容。
根据本发明,在将封装的程序装入系统的内存中时,需要对用户程序包进行解包。
用户程序包的解包是指引导程序对存储在用户程序介质中的用户程序包进行包的起始标识符查找及包头信息的提取,并对提取的信息进行解码。需要提取的信息是封装在用户程序包中的应用程序的数量,每个应用程序的入口地址及实际长度。应用程序数量由包头里的程序数域的值得到,有了程序数量就可以准确得出地址域的长度,进而得出各个应用程序的实际存储地址。
图5表示了本发明方法的一个优选实施例的工作流程图。图7是详细示出了图5所示方法中用于实现将用户程序包中的指定应用程序引导的引导程序的流程图。
如图5所示,根据本发明的优选实施例的方法在执行时包括如下几个步骤:上电初始化501、用户程序检测502、装载应用程序503、接口初始化504、用户程序下载505、擦除错误数据506、模式切换507等几个步骤。下面对每个步骤进行具体说明。
上电初始化501主要完成对引导区的操作,进行初始化,包括清内存、读用户程序的地址(在地址域里有定义,只有通过读地址才可以进一步得到每个应用程序的起始地址)、设置读取的数据长度等步骤。
用户程序检测步骤502对存储在闪存中的应用程序进行检查,判断其是否已经存在及其有效性。可在内部设置一个状态变量如状态寄存器来用于判断有效性。具体的过程是:
首先读取开始标识符,即标识域中的4字节32位的标识。由于与非型闪存的特性,程序存储是按浮动方式存储的,即程序存储的首地址不是从固定地址开始而是从某一个不确定的(由于是浮动存储,所以无需指定确定的起始存储地址)地址开始的,因而需要在整个程序储存空间里查找该开始标识符。在查找标识符的过程中,如果没有找到希望的标识符,说明还没有用户程序装载在外部的程序存储区里。进一步地,引导程序将进行下载接口初始化,随后进行下载的操作(这将在后文详细描述)。
如果找到标识符号,则按存储格式读取包头数据,如程序个数、地址等,将需要读取程序的地址装载到地址寄存器里,将数据长度装载到长度寄存器里。当有多个应用程序时,则通过提取程序数得到实际的应用程序数量,为每个应用程序编号。在将应用程序装载到内存中时,由用户选择需要装载的程序号,一旦选定则引导程序就会读取该应用程序的前4个字节,这4个字节的内容是该程序段的有效长度,根据该长度值就可以准确地将整个应用程序读取到内存。
应用程序装载(步骤503)将存储在闪存里的应用程序装载到内存中。由于已经得到了应用程序的实际起始存储地址及长度值,所以可以将应用程序读到内存里。装载的过程是:首先根据地址寄存器的值得到应用程序的起始地址及从长度寄存器得到长度值,然后根据这两个参数将存储有用户应用程序的闪存中的用户程序读到内存中。
应用程序装载到内存中时,其内存起始地址要与应用程序编译时的起始地址一样,一般是从内存的最低地址开始存储。在读出时需要进行数据完整性检查及EDC或ECC检错(在应用程序进行了EDC或ECC编码时)及纠错处理,如果读出的应用程序有错且不可纠,则引导程序将进入错误处理(步骤506)。在步骤506中,将擦除闪存中存有的相应的应用程序,然后进行接口初始化(步骤504),并进行程序下载(步骤505)。
由于可能有多个应用程序被选择,所以在装载程序时需要确定装载哪个程序。为了解决这个问题,可以预留任务号,将任务号与相应的程序段对应起来,在装载程序时,通过选择具体的任务号,自动或手动地将程序装载到内存中。在选择引导程序时如果就绪信号Ready有效,则直接取应用程序号寄存器的值作为对应的引用程序的编号,将其装载到内存。该Ready就像上面提到的内部状态变量一样,是在程序运行时设置的。当然也可以采用外部管脚的使能信号的方法来直接让引导程序将应用程序装载到内存里。
对于用户程序中的应用程序,要考虑其最大长度不能超过应用程序内存大小,所以在具体设计时根据应用功能的不同,需要考虑好最大的应用程序的长度来定制应用程序的内存大小。
为了便于选择装载的应用程序,可提取出用户程序包里的应用程序数并进行编码,该编码值与用户使用中选择的应用程序一一对应,在驻留程序(在后文说明)中该编码值就是用户可以选择的应用程序号。
应用程序装载完毕后,需要将驻留程序(驻留程序时可以和用户程序存储在一个存储介质里,也可以单独存储在一个独立的介质里)装载到内存中的固定位置,一般是装载到与应用程序不同的存储空间中,但在处理器的取址空间内。为了不至于在应用程序存储空间发生重叠,可以将其存储在高端位置。驻留程序用于实现应用程序的动态切换,是应用程序的中断服务程序。
在驻留程序装载完后,将指令指针指向内存中应用程序的起始地址,具体地可以在引导程序最后一条指令后加多条无条件跳转指令。跳转指令中的跳转地址就是应用程序的起始地址。此后将闪存作为指令取值空间(即处理器所执行的应用程序的指令的取值空间)。此后设备进入正常应用模式,进入正常模式后,READY状态置为有效。
装载后的驻留程序存储在内存的一个单独区间中,且起始地址要与中断向量的入口地址一致。在正常模式下,用户可以通过中断模式进入下载服务程序。图6示出了中断服务程序的流程图。
如图6所示,在中断服务程序中,首先读取新的应用程序服务号(步骤601),判断用户新申请的应用程序与当前应用程序是否一样(步骤602),如果用户新申请的应用程序与当前的应用程序不一样,则更新应用程序装载号(步骤603),复位指针指到引导程序的入口地址,重新进入引导过程(步骤604)。再次引导时由于系统状态标记READY已经有效,所以不需要经过选择应用程序(步骤601)这一步了,直接将应用程序装载到内存即可。如果用户新申请的应用程序与当前应用程序一样(即图中的“是“),则返回主程序。
下载接口初始化(步骤504)是对作为用户程序下载接口的USB接口(见图2)或RS232接口(见图3)或其他接口如UART接口、SPI接口、IIC接口、或者1394接口进行常规的初始化(如接口配置、设备描述符等),并设置应用程序存储盘的容量。初始化后系统可以与USB接口进行基本的数据通讯。基本的数据通讯功能包括识别和读写存储有用户应用程序的引导盘。在本文中,把用户的程序存储区视为一个引导盘,该盘的容量大小依处理器的不同而不同,是一个固定的值。该引导盘可以被读和写,但是相对于其他盘来说,对该盘的写操作是先将存储区的数据全部擦除后再写入新的数据,不再考虑是否一个块(block)内的数据有新旧之分。这样可以简化设计。在初始化之后,下载接口(如USB接口)被启动,等待PC等下载设备下载应用程序。
在用户程序下载的步骤(步骤505)中,等待用户通过USB接口将程序下载到指定的外部存储区里。由于USB接口已经可以与PC通讯,所以此时外部的存储区被下载设备(PC)视作一个盘,只需将事先准备好的文件即用户程序写到盘里即可。由于该文件已经按预先定义的格式进行封装,所以下载设备可以对该文件进行处理。优选地,数据写入闪存时进行ECC编码。
在程序下载到闪存里时,可以利用内存作为缓存,先将需要下载的程序存入缓存中,保留第一个存储单元的数据不写,先写其他存储单元的数据,目的是为了能最后确定包头里的地址域里的地址值,由上面的分析可知,不能一开始就确定多个应用程序的起始存储地址,只有将第N-1个程序段的数据全部写完后才可以确定最后一个程序段的起始存储地址。直到所有的程序段数据写完后得出准确的地址值,最后将第一个单元的数据写入一个好的存储单元里。
由于与非型闪存在多次写入时会发生存储失效现象,而且这个现象往往在写入后再次读出时才会发现,也就是说“写“操作会引起存储失效现象。所以在程序写入与非型闪存后需要再次读取刚刚写入的数据,并与暂存在内存中的数据进行比较,若比较结果一致,则说明写入操作没有问题,否则说明刚刚写入数据存储单元(通常时一个存储页面)已经有失效单元,该单元不能再作为数据存储单元使用。当发生这样的情况后,需要将该块跳过写到下一个存储单元里,这样就造成了存储地址不连续。为了解决因跳过坏块导致存储地址不连续的问题,需要用链表来指出下一个存储单元的地址。可以将链表存储在与非型闪存里的16个字节的冗余区里。
链表的存储结构见图8,其中数据区用于存储用户程序数据,冗余区使用N个字节指向下一个用户程序的实际存储地址,这样一个数据存储单元指向下一个数据存储单元的方法就是链表实现方式。在使用链表的情况下,每一个数据块写完后将链表指向后一个存储单元里,至此程序下载的过程结束
为了增加程序存储的可靠性,保证应用程序正确,在用户程序下载到闪存时优选进行ECC编码,从闪存中装载到内存时进行ECC解码。ECC编解码可以由微处理器(MCU)完成即用软件实现,也可以由专门的硬件电路实现。如果解码结果有错且不可纠正时需要终止用户程序的下载,将闪存中未下载完的用户程序或出错的用户程序擦除并返回到重新下载状态(步骤506)。
如图所示,一旦下载结束就又回到用户程序检测的步骤(步骤502)中,再次进行用户程序的检测。
步骤507所示的模式切换即从加载状态切换到正常模式。
图7显示了实现图5所示方法的引导方法的具体步骤。如图7所示,首先查找地址并进行长度初始化,即查找存储用户程序的存储区,并设定长度为最大的查找范围,例如64K(步骤701)。在查找过程中如果用户程序存储介质地址指针已经溢出,则说明用户程序存储介质中没有用户程序。读取地址域的地址值,该域紧接在标识符号之后。由于每个应用程序有其自己的确定长度,所以通过提取长度参数得到各应用程序的实际长度,然后去读取该应用程序。随后读取当前数据(步骤702),将数据指针加1(步骤703),该步骤应在判断地址是否等于最大值之后。判断是否找到标识符(步骤704),如果没有找到标识符,并且地址不是最大值(步骤705的“否”),则将当前数据区的地址指针加1后返回步骤702。如果地址已是最大值,则设置标识符未找到标志(步骤719),初始化并启动下载接口(步骤720)。
如果找到了标识符(步骤704的“是”),则设置找到标记,并读取程序包中的程序数目(步骤706),并计算每个应用程序的起始地址(步骤707)。如果READY信号有效(步骤708中的“是”)则读取指定应用程序的长度,设定缓存(BUFF)的起始地址(步骤710)。如果READY信号无效(步骤708中的“否”),则需增加由用户选择应用程序的步骤(步骤709)。在步骤710之后,计算当前选择的应用程序的起始地址(步骤711),将指定长度的数据读取到缓存中(步骤712)。当读取发生错误时(步骤713的“是”)则擦除闪存中的相关数据,并初始化和启动下载接口(步骤720)。
当数据读取正确(步骤713的“否”),则设置装载成功标记(步骤715)、设置程序指针及切换标记(步骤716),进行程序切换(步骤717),进入正常状态(步骤718)。
在步骤720之后,等待从下载接口下载程序(步骤721),如果下载成功(步骤722中的“是”),则设置下载成功标志(步骤723),返回步骤701。
以上为说明的目的对本发明的优选实施例进行了详细描述。本领域的普通技术人员可以理解,对本发明的上述实施例的各种改进、添加和替换都是可能的,并且都在本发明的权利要求所限定的保护范围内。
Claims (11)
1.一种基于与非型闪存实现用户程序引导的方法,其特征在于,所述与非型闪存用于储存所述用户程序,所述用户程序以预定格式封装,所述方法包括以下步骤:
根据所述封装中的关于所述用户程序的信息,查找存储在所述与非型闪存中的所述用户程序的地址和长度信息;以及
根据所找到的起始地址和长度信息,将相应的应用程序装入用于执行应用程序的程序运行存储器中。
2.根据权利要求1所述的方法,其特征在于,所述存储在所述与非型闪存中的用户程序被封装在程序包中,所述程序包中包括包头和程序净荷。
3.根据权利要求2所述的方法,其特征在于,所述包头含有标识信息、应用程序地址信息和应用程序长度信息;
查找所述用户程序的地址和长度信息的步骤进一步包括通过查找所述包头中的所述标识信息并利用所述的应用程序地址信息查找所述应用程序的起始地址。
4.根据权利要求2所述的方法,其特征在于,所述存储在所述与非型闪存中的封装的用户程序包括多个应用程序,所述方法进一步包括,在将相应的应用程序装入用于执行应用程序的程序运行存储器中之前,选择所要装入所述程序运行存储器的应用程序。
5.根据权利要求4所述的方法,其特征在于,所述程序包中含有程序数量信息,并且选择所要装入所述程序运行存储器的应用程序的步骤进一步包括利用所述程序数量信息选择所要装入内存的程序。
6.根据权利要求3所述的方法,其特征在于,进一步包括:在根据所述包头中的所述标识信息找不到需要装入所述程序运行存储器中的应用程序时,或将所述应用程序载入所述程序运行存储器的过程中出错时,将含有所述应用程序的用户程序下载到所述与非型闪存中。
7.根据权利要求6所述的方法,其特征在于,进一步包括:通过USB接口、UART接口、RS 232接口、SPI接口、IIC接口、或者1394接口将所述的用户程序下载到所述与非型闪存中。
8.根据权利要求6所述的方法,其特征在于,进一步包括:在将用户程序下载到所述与非型闪存中时进行错误检测或错误更正编码,在将所述与非型闪存中的所述用户程序中的指定应用程序读入所述程序运行存储器中时,进行错误检测或错误更正解码。
9.根据权利要求7所述的方法,其特征在于,进一步包括:在将所述用户程序下载到所述与非型闪存之后,将下载的用户程序与存储在所述与非型闪存中的所述用户程序进行比较,判断所述下载的用户程序是否正确。
10根据权利要求9所述的方法,其特征在于,进一步包括,使用链表来指示所述用户程序存储的单元地址,所述链表存储在所述与非型闪存的冗余区中。
11.根据权利要求2到10中任一项所述的方法,其特征在于,将相应的应用程序装入用于执行应用程序的程序运行存储器中的步骤还包括将中断服务程序装入所述程序运行存储器。
12.根据权利要求11所述的方法,其特征在于,进一步包括:提取所述程序包里的应用程序数并进行编码,各编码值分别与所述应用程序之一对应,所述中断服务程序利用所述编码值作为待被选择的应用程序号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100460139A CN100470681C (zh) | 2004-06-01 | 2004-06-01 | 一种基于与非型闪存实现用户程序引导的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100460139A CN100470681C (zh) | 2004-06-01 | 2004-06-01 | 一种基于与非型闪存实现用户程序引导的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1705041A CN1705041A (zh) | 2005-12-07 |
CN100470681C true CN100470681C (zh) | 2009-03-18 |
Family
ID=35577410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100460139A Expired - Lifetime CN100470681C (zh) | 2004-06-01 | 2004-06-01 | 一种基于与非型闪存实现用户程序引导的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100470681C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100458697C (zh) * | 2006-12-26 | 2009-02-04 | 北京中星微电子有限公司 | 用户程序引导方法及用户程序引导系统 |
CN102279757B (zh) * | 2010-06-11 | 2016-08-17 | 无锡中感微电子股份有限公司 | 一种系统程序启动的方法及装置 |
CN103268284B (zh) * | 2013-05-14 | 2017-01-18 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN103412778A (zh) * | 2013-08-12 | 2013-11-27 | 上海盈方微电子股份有限公司 | 一种片上系统NANDFlash程序引导方法与装置 |
CN103544112B (zh) * | 2013-10-17 | 2016-08-17 | Tcl通讯(宁波)有限公司 | 一种移动终端的存储器坏块处理方法及移动终端 |
-
2004
- 2004-06-01 CN CNB2004100460139A patent/CN100470681C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CN1705041A (zh) | 2005-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102317928B (zh) | 修改命令 | |
CN106990977B (zh) | 主机看到的设备固件更新效果的管理 | |
US9043549B2 (en) | Memory storage apparatus, memory controller, and method for transmitting and identifying data stream | |
US7310726B2 (en) | Booting from non-linear memory | |
US8370611B2 (en) | Memory card, memory system including the same, and operating method thereof | |
US20130283081A1 (en) | Memory Array Power Cycling | |
US20040076069A1 (en) | System and method for initializing a memory device from block oriented NAND flash | |
US9235534B2 (en) | Data protecting method, memory controller and memory storage apparatus | |
US20100241789A1 (en) | Data storage method for flash memory and data storage system using the same | |
CN109783396A (zh) | 存取闪存模块的方法及相关的闪存控制器与电子装置 | |
CN102169459A (zh) | 一种访问数据的方法、装置和智能卡 | |
CN101640069A (zh) | 用于闪速存储器的平均磨损方法、储存系统与控制器 | |
CN100458697C (zh) | 用户程序引导方法及用户程序引导系统 | |
CN102193871B (zh) | 非挥发性存储器存取方法、系统及非挥发性存储器控制器 | |
CN100470681C (zh) | 一种基于与非型闪存实现用户程序引导的方法 | |
US8595420B2 (en) | Method for dispatching and transmitting data streams between host system and memory storage apparatus having non-volatile memory and smart card chip, memory controller, and memory storage apparatus | |
CN103218300B (zh) | 数据处理方法、存储器控制器与存储器储存装置 | |
CN101788916B (zh) | 配置芯片的方法和装置 | |
US7979606B2 (en) | Method for storing data | |
CN116185299A (zh) | 闪存控制器及相关装置和方法 | |
CN108108118B (zh) | 数据写入方法以及存储控制器 | |
CN101661432B (zh) | 闪存区块管理方法、闪存储存系统及控制器 | |
JP2008158964A (ja) | メモリ用アドレスマッピング方法、それを適用したメモリデバイス | |
CN102591738A (zh) | 数据管理方法、存储器控制器与嵌入式存储器储存装置 | |
US8312205B2 (en) | Method for identifying a page of a block of flash memory, and associated memory device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20090318 |
|
CX01 | Expiry of patent term |