通信终端中使用单分区Flash作为存储器的方法

文档序号:6376827阅读:207来源:国知局
专利名称:通信终端中使用单分区Flash作为存储器的方法
技术领域
本申请涉及一种通信终端,特别是涉及一种使用单分区Flash作为存储器的通信终端。
背景技术
Flash存储器(Flash EEPROM Memory)又称闪存,是一种应用广泛的非易失性存储器。请参阅图l,Flash存储器可分为NOR Flash和NAND Flash两大类。NOR Flash的地址线和数据线是独立的,可以实现快速的随机寻址,具备XIP CeXecute In Place,本地执行)功能。NAND Flash的地址线和数据线是共用的,不具有随机寻址和XIP能力。NOR Flash又分为并口( Paral IeI )Flash和串口( SPI )Flash两小类,它们在传输数据时分别是并行和串行的处理方式。NOR Flash具有多层的存储结构。一个NOR Flash器件由一个或多个分区(bank)组成。每个分区由多个扇区(sector)组成。每个扇区由多个逻辑块(block)组成。每个逻辑块由多个字节(byte)组成。不同厂商的NOR Flash产品在存储结构的层数划分、每层名称上可能有所差异,因而上述存储结构仅作为一个示例。NOR Flash的最小读单位是一个字节,最小写单位是一个字节,最小擦除单位是一个扇区。在对NOR Flash写入之前必须确保写入位置已经过擦除且未写入。并口Flash 又分为多分区(multi bank) Flash 和单分区(single bank) Flash 两种。串口 Flash则均为单分区Flash。多分区Flash具有引脚多、价格高的特点,并且允许同时对不同分区各自进行读、写、或擦除操作。串口 Flash和单分区Flash具有引脚少、价格低的特点,但在一个时间点上只能进行一项读、写、或擦除操作。目前在嵌入式系统平台上普遍使用多分区flash来存放系统代码和用户数据。如将系统代码和用户数据分别存放在不同分区,则在擦除用户数据的同时,还可读取系统代码。如果在嵌入式系统平台上使用单分区Flash,则会出现如下错误嵌入式系统中的线程是具有优先级的,当一个低优先级的擦除Flash的线程(或进程,以下省略)正在执行时,有高优先级的读Flash的线程要求执行。那么该低优先级的线程就会被挂起,系统转而执行高优先级的线程,此时就发生了对单分区Flash的擦除操作与读操作同时发生的错误情况。为了预防上述错误情况发生,目前对于嵌入式系统平台上使用单分区Flash都配合采用临界区保护的操作方法。所述临界区是指一种线程(或进程,以下省略)的同步机制,将单分区Flash设置为临界区后,多个线程必须互斥地对它进行访问。具体而言,每次只准许一个线程进入临界区,进入后不允许其他线程进入,并一直持续到进入临界区的线程离开。临界区在被前一个线程释放后,其他线程才可以进入。这种临界区保护的操作方法可以防止对单分区Flash的多个操作同时发生的错误情况。但是针对以手机为代表的通信终端,即使采用了单分区Flash配合临界区保护的方式,仍然会出现如下错误通信终端都具有射频模块,该射频模块需要周期性地接收来自基站的寻呼消息等,在接收寻呼消息时必须从单分区Flash里面读取用于接收的系统代码。如果此时某一个访问单分区Flash的线程正在执行,由于单分区Flash为临界区就不允许其他线程访问,那么该射频模块的工作线程就无法读取到用于接收的代码,也就无法接收寻呼消息,这种现象持续一段时间可能会导致通信终端掉网等严重后果。

发明内容
本申请所要解决的技术问题是提供一种在通信终端中使用单分区Flash作为存储器的方法。通信终端中的存储模块分为易失性存储器和非易失性存储器两种,前者就是内存,后者就是本申请所述的存储器。该方法在临界区保护的基础上有所发展,使其不再对射频模块接收信息造成影响。为解决上述技术问题,本申请在通信终端中使用单分区Flash作为存储器的方法,将单分区Flash设置为临界区,各个线程先根据优先级、优先级相同的情况下再根据先后顺序互斥地访问该临界区;还将向单分区Flash的写入操作分为先写入至缓存,再从缓存写入至单分区Flash两部分,并设定“从缓存写入至单分区Flash”、擦除单分区Flash的操作均只在射频模块接收寻呼消息的间隙内进行。进一步地,还将射频模块接收寻呼消息时从单分区Flash读取系统代码的线程的优先级设为高于其他从单分区Flash读取数据的线程。由此,本申请彻底解决了单分区Flash的访问与射频模块接收寻呼消息之间的冲突,使得通信终端可以使用单分区Flash作为存储器存放系统代码和用户数据。这样在不影响通信终端的功能与性能的前提下,降低了其制造成本。


图1是Flash存储器的分类示意图;图2是单分区Flash器件的多层存储结构示意图;图3是本申请所定义的扇区的二种状态及其转换不意图;图4是本申请向单分区Flash写入数据的方法第一部分流程图;图5是本申请向单分区Flash写入数据的方法第二部分流程图;图6是本申请擦除单分区Flash的扇区的方法流程图;图7是本申请从单分区Flash读取数据的方法流程图。
具体实施例方式请参阅图2,本申请所述的单分区Flash在物理上分为多层存储结构。一个单分区Flash器件由多个扇区(sector)组成。每个扇区由多个逻辑块(block)组成。每个逻辑块由多个字节(byte)组成。单分区Flash的最小读单位是一个字节,最小写单位是一个字节,最小擦除单位是一个扇区,这是硬件层面的根本设置。在对单分区Flash写入之前必须确保写入位置已经过擦除且未写入。单分区Flash作为嵌入式系统平台的存储器使用时,分为存储系统代码和用户数据的两个区域。系统第一次开机就将用户数据区域的扇区格式化为多个逻辑块,之后系统向用户数据区域读、写数据都是以逻辑块为单位的,擦除数据是以扇区为单位的,这是软件层面的实际操作。并且,写数据时,一起将逻辑块编号写入。读数据时,根据逻辑块编号查询其存储位置并读取。对于系统代码区域,除烧录过程之外,不会有擦除和写操作,只可能有读操作,读操作是以机器字长(word)为单位的。请参阅图3,本申请将扇区定义为三种状态写入中(writing)、擦除开始(erasing begin)、擦除挂起(erasing suspend)。“写入中”是指扇区被擦除后,可用于逻辑块写入的状态。“擦除开始”是指对扇区的擦除操作刚开始的状态。“擦除挂起”是指对扇区的擦除操作已开始、尚未完成的状态。处于“写入中”状态的扇区,一旦没有“空闲”状态的逻辑块,就转为“擦除开始”状态。处于“擦除开始”状态的扇区,一旦经过预设的时间后擦除操作完成,就转为“写入中”状态。处于“擦除开始”状态的扇区,一旦经过预设的时间后擦除操作未完成,就转为“擦除挂起”状态。处于“擦除挂起”状态的扇区,一旦经过预设的时间后擦除操作完成,就转为“写入中”状态。处于“擦除挂起”状态的扇区,一旦经过预设的时间后擦除操作未完成,仍维持“擦除挂起”状态。本申请将逻辑块也定义为三种状态空闲、有效(dirty)、无效。 “空闲”是指逻辑块所在扇区被擦除、且逻辑块未被写入数据的状态。“有效”是指逻辑块已写入数据的状态。“无效”是指逻辑块中的数据被转移到其他逻辑块之后,原逻辑块的状态。本申请在通信终端中使用单分区Flash作为存储器的方法仍然采用临界区保护的操作方法,将单分区Flash设置为临界区,各个线程(或进程,以下省略)必须互斥地对它进行访问。具体而言,每次只准许一个线程进入临界区,进入后不允许其他线程进入,并一直持续到进入临界区的线程离开。临界区在被前一个线程释放后,其他线程才可以进入。本申请向单分区Flash写入数据分为先写入至缓存,再从缓存写入至单分区Flash两部分。请参阅图4,第一部分包括如下步骤第I步,系统准备向单分区Flash的一个或多个逻辑块写入数据;第2步,系统根据准备写入数据的逻辑块的编号查询缓存节点;如果缓存节点中的数据有所查询的逻辑块编号,则将逻辑块的内容和编号覆盖该缓存节点中的数据;如果缓存节点中的数据没有所查询的逻辑块编号,则系统向内存申请空间以生成新的缓存节点,缓存节点的大小与逻辑块的大小相同;接着系统将每个逻辑块的内容和编号写入到该新申请的缓存节点中。优选地,上述方法第2步中,各个缓存节点可以形成单链表的数据结构。生成新的缓存节点后,就加入到单链表的末尾。请参阅图5,第二部分包括如下步骤
第I步,系统判断缓存节点的数量是否为零;如果是,这表明缓存中的内容已全部写入到单分区Flash中,则重复第I步等待新的缓存节点的出现;如果否,则进入第2步;第2步,系统判断当前是否是射频模块接收寻呼消息的间隙;如果是,进入第3步;如果否,则重复第2步等待所述时间间隙的到来;第3步,系统判断是否所有扇区都是“写入中”的状态;如果是,则进入第4步;如果否,则返回第2步;本申请将对单分区Flash器件的擦除操作的优先级设定为比写入操作(指从缓存写入到单分区Flash的这部分)要高,而擦除操作所需时间也远大于写入操作。因而当有任何扇区处于“擦除开始”或“擦除挂起”状态,都表明该时间间隙中有擦除操作,那么相对优先级更低的写入操作就不能在该时间间隙内进行,而只能等待下一个时间间隙的到来。第4步,系统判断在该时间间隙内对单分区Flash的写入操作次数是否大于预设次数;如果是,则返回第2步;如果否,系统先将每个缓存节点中的数据写入到单分区Flash的一个状态为“空闲”的逻辑块中,并累计在该时间间隙内的写入操作次数,然后重复第4步。在移动通信网络中,基站向通信终端发送的寻呼消息是周期性的,并且周期固定。因此,通信终端在何时接收寻呼消息的时间点是清楚的,对于接收寻呼消息的时间间隙的长度、起始时刻、终止时刻也是知道的。不同的制造厂商也均会给出对于单分区Flash进行一次写入操作的时间。通常,单分区Flash的单次写入时间远小于射频模块接收寻呼消息的时间间隙的长度,因此在一个时间间隙内可以进行多次写入操作。将所述时间间隙的长度除以单次写入时间所得到的整数商,就作为预设的写入操作次数。超出预设的写入操作次数,则表明该时间间隙的剩余时间不足以完成一次写入操作,因而等待下一个时间间隙。上述方法第2步中,在将每个缓存节点中的数据写入到单分区Flash的一个逻辑块以后,还需要将该单个缓存节点删除掉以释放内存。这个删除缓存节点的操作可以在所述时间间隙内进行,也可以在所述时间间隙外进行,只要在该缓存节点中的数据转移到单分区Flash之后即可。请参阅图6,本申请擦除单分区Flash的扇区的方法包括如下步骤第I步,系统判断单分区Flash的一个或多个状态为“写入中”的扇区中,有没有状态为“空闲”的逻辑块?如果有,表明该扇区还可以写入数据,无需进行擦除,则重复第I步等待该扇区写满数据;如果没有,表明该扇区中没有可写入数据的逻辑块,需要将该扇区擦除,进入第2
止/J/ O第2步,系统判断当前是否是射频模块接收寻呼消息的间隙;如果是,则系统开始计时,并进入第3步;
如果否,则重复第2步;第3步,系统判断所要擦除的扇区上是否有状态为“有效”的逻辑块;如果有,则将这些状态为“有效”的逻辑块中的数据转移到其他扇区上状态为“空闲”的逻辑块中,再将转移出数据的逻辑块的状态改为“无效”,转移进数据的逻辑块的状态改为“有效”,重复第3步等待将所有状态为“有效”的数据块中的数据转移完毕;如果没有,则对该扇区进行擦除操作,并将该扇区改为“擦除开始”状态;第4步,系统判断经过预设的时间后擦除操作是否完成;计时包括第3步转移逻辑块中的数据的时间;如果是,则将该扇区改为“写入中”状态;如果否,则将该扇区改为“擦除挂起”状态,返回第2步等待下一个时间间隙继续擦除。由于擦除操作需要耗费较长的时间,不同制造厂商的单分区Flash器件对一个扇区的擦除可能在一个接收寻呼消息的时间间隙内完成,也可能在多个所述的时间间隙内才能完成。为此,本申请在开始擦除扇区时,将扇区的状态改为“擦除开始”。如果在该时间间隙内无法完成擦除操作,则将该时间间隙结束之前将扇区的状态改为“擦除暂停”,并利用随后的一个或多个时间间隙继续擦除操作,直至擦除操作完成才将该扇区的状态改为“写入中”。相应的第4步中预设的时间必须小于所述时间间隙的长度,并且越接近于所述时间间隙的长度越好。在通信终端中使用单分区Flash作为存储器,涉及的操作不外乎写、擦除和读三项。请参阅图7,本申请从单分区Flash读取数据包括如下步骤第I步,系统准备从单分区Flash的一个或多个逻辑块读取数据;第2步,系统根据准备读取数据的逻辑块的编号查询缓存节点;如果缓存节点中的数据有所查询的逻辑块编号,则将读取该缓存节点中的数据;如果缓存节点中的数据没有所查询的逻辑块编号,则在单分区Flash中根据要读取的逻辑块的编号找到相应的逻辑块并读取。本申请将射频模块用于接收寻呼消息而从单分区Flash中读取系统代码的线程(例如称为线程A)的优先级设为高于其余从单分区Flash中读取数据的线程。如果在射频模块接收寻呼消息时,有其他线程正在读取单分区Flash,则由于优先级较低而让位给所述线程A,从而确保了射频模块总能及时接收到寻呼消息。优选地,本申请在通信终端的嵌入式系统中设置一个优先级最低的线程(或进程,以下省略),该线程定时启动以开启图5所示的“从缓存写入到单分区Flash”的操作和图6所示的“擦除单分区Flash”的操作。至于图4所示的“将写入数据先写入到缓存”的操作和图7所示的“读取数据”的操作,都是由通信终端的应用程序启动的。上述对单分区Flash的写入、擦除和读取方法,配合临界区保护的方式,就可以避免射频模块无法接收寻呼消息的情况。这是由于本申请将写入操作分为写入缓存,从缓存转移到单分区Flash两部分,后者只在接收寻呼消息的间隙进行。本申请的擦除操作也只在接收寻呼消息的间隙进行。这样便避免了接收寻呼消息期间“从缓存写入到单分区Flash”的写入操作与所述线程A的读取操作之间的冲突、以及擦除操作与所述线程A的读取操作之间的冲突。“从缓存写入到单分区Flash”的写入操作与擦除操作之间则通过优先级的低与高避免冲突。至于避免接收寻呼消息期间对单分区Flash的读取操作之间的冲突,是通过提高所述线程A的优先级来实现的。以上仅为本申请的优选实施例,并不用于限定本申请。对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
权利要求
1.一种通信终端中使用单分区Flash作为存储器的方法,其特征是,将单分区Flash设置为临界区,各个线程先根据优先级、优先级相同的情况下再根据先后顺序互斥地访问该临界区;还将向单分区Flash的写入操作分为先写入至缓存,再从缓存写入至单分区Flash两部分,并设定“从缓存写入至单分区Flash”、擦除单分区Flash的操作均只在射频模块接收寻呼消息的间隙内进行。
2.根据权利要求1所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,所述写入操作的第一部分“先写入至缓存”包括如下步骤 第I步,系统准备向单分区Flash的一个或多个逻辑块写入数据; 第2步,系统根据准备写入数据的逻辑块的编号查询缓存节点; 如果缓存节点中的数据有所查询的逻辑块编号,则将逻辑块的内容和编号覆盖该缓存节点中的数据; 如果缓存节点中的数据没有所查询的逻辑块编号,则系统向内存申请空间以生成新的缓存节点,缓存节点的大小与逻辑块的大小相同;接着系统将每个逻辑块的内容和编号写入到一个新申请的缓存节点中。
3.根据权利要求2所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,所述方法第2步中,各个缓存节点形成单链表的数据结构;生成新的缓存节点后,就加入到单链表的末尾。
4.根据权利要求1所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,所述写入操作的第二部分“从缓存写入至单分区Flash”包括如下步骤 第I步,系统判断缓存节点的数量是否为零; 如果是,则重复第I步; 如果否,则进入第2步; 第2步,系统判断当前是否是射频模块接收寻呼消息的间隙; 如果是,进入第3步; 如果否,则重复第2步; 第3步,系统判断是否所有扇区都是“写入中”的状态; 如果是,则进入第4步; 如果否,则返回第2步; 第4步,系统判断在该时间间隙内对单分区Flash的写入操作次数是否大于预设次数; 如果是,则返回第2步; 如果否,系统先将每个缓存节点中的数据写入到单分区Flash的一个状态为“空闲”的逻辑块中,并累计在该时间间隙内的写入操作次数,然后重复第4步。
5.根据权利要求1所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,擦除单分区Flash的操作包括如下步骤 第I步,系统判断单分区Flash的一个或多个状态为“写入中”的扇区中,有没有状态为“空闲”的逻辑块? 如果有,则重复第I步; 如果没有,则进入第2步;第2步,系统判断当前是否是射频模块接收寻呼消息的间隙; 如果是,则系统开始计时,并进入第3步; 如果否,则重复第2步; 第3步,系统判断所要擦除的扇区上是否有状态为“有效”的逻辑块; 如果有,则将这些状态为“有效”的逻辑块中的数据转移到其他扇区上状态为“空闲”的逻辑块中,再将转移出数据的逻辑块的状态改为“无效”,转移进数据的逻辑块的状态改为“有效”,重复第3步; 如果没有,则对该扇区进行擦除操作,并将该扇区改为“擦除开始”状态; 第4步,系统判断经过预设的时间后擦除操作是否完成; 如果是,则将该扇区改为“写入中”状态; 如果否,则将该扇区改为“擦除挂起”状态,返回第2步等待下一个时间间隙继续擦除。
6.根据权利要求4或5所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,擦除单分区Flash的操作具有比写入操作的第二部分“从缓存写入至单分区Flash”更高的优先级。
7.根据权利要求1所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,从单分区Flash读取数据包括如下步骤 第I步,系统准备从单分区Flash的一个或多个逻辑块读取数据; 第2步,系统判断在缓存节点中是否有要读取的逻辑块的编号; 如果有,则读取相应的缓存节点中的数据; 如果没有,则在单分区Flash中根据要读取的逻辑块的编号找到相应的逻辑块并读取。
8.根据权利要求7所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,射频模块接收寻呼消息时从单分区Flash读取系统代码的线程或进程的优先级高于其他从单分区Flash读取数据的线程或进程。
9.根据权利要求1所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,所述单分区Flash由多个扇区组成,每个扇区具有三种状态写入中、擦除开始、擦除挂起; “写入中”是指扇区被擦除后,可用于逻辑块写入的状态; “擦除开始”是指对扇区的擦除操作刚开始的状态; “擦除挂起”是指对扇区的擦除操作已开始、尚未完成的状态; 处于“写入中”状态的扇区,一旦没有“空闲”状态的逻辑块,就转为“擦除开始”状态;处于“擦除开始”状态的扇区,一旦经过预设的时间后擦除操作完成,就转为“写入中”状态; 处于“擦除开始”状态的扇区,一旦经过预设的时间后擦除操作未完成,就转为“擦除挂起”状态; 处于“擦除挂起”状态的扇区,一旦经过预设的时间后擦除操作完成,就转为“写入中”状态; 处于“擦除挂起”状态的扇区,一旦经过预设的时间后擦除操作未完成,仍维持“擦除挂起”状态。
10.根据权利要求9所述的通信终端中使用单分区Flash作为存储器的方法,其特征是,每个扇区由多个逻辑块组成,每个逻辑块具有三种状态空闲、有效、无效;“空 闲”是指逻辑块所在扇区被擦除、且逻辑块未被写入数据的状态; “有效”是指逻辑块被写入数据的状态; “无效”是指逻辑块中的数据被转移到其他逻辑块之后,原逻辑块的状态。
全文摘要
本申请公开了一种在通信终端中使用单分区Flash作为存储器的方法,将单分区Flash设置为临界区,各个线程先根据优先级、优先级相同的情况下再根据先后顺序互斥地访问该临界区;还将向单分区Flash的写入操作分为先写入至缓存,再从缓存写入至单分区Flash两部分,并设定“从缓存写入至单分区Flash”、擦除单分区Flash的操作均只在射频模块接收寻呼消息的间隙内进行。本申请彻底解决了单分区Flash的访问与射频模块接收寻呼消息之间的冲突,使得通信终端可以使用单分区Flash作为存储器存放系统代码和用户数据。这样在不影响通信终端的功能与性能的前提下,降低了其制造成本。
文档编号G06F9/38GK103064656SQ20121033726
公开日2013年4月24日 申请日期2012年9月12日 优先权日2012年9月12日
发明者曹小红 申请人:锐迪科科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1