一种机顶盒数据存储方法及装置制造方法
【专利摘要】本发明适用于数据存储【技术领域】,提供了一种机顶盒数据存储方法及装置,所述方法包括:在Flash中划分出数据存储容量相等的第一存储区和第二存储区;分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;在写入机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块;对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入。本发明通过将两个存储区进行分为数据块,将数据进行交替写入不同存储区的数据块,解决了现有技术存在的,Flash空间浪费、Flash频繁擦写容易损坏和在擦写Flash时断电丢失数据的问题。
【专利说明】一种机顶盒数据存储方法及装置
【技术领域】
[0001]本发明属于数据存储【技术领域】,尤其涉及一种机顶盒数据存储方法及装置。
【背景技术】
[0002]机顶盒在运行过程中,需要动态更新一些数据,并且存储到闪存(英文:Flash)中,例如动态更新、系统的加密密钥(英文:Key)、用户的设置数据等。传统的方法是将这些数据以一定的数据类型(一般为自定义)存储到Flash中的某个固定的地址,并且用特定的接口对这个地址进行读写访问。Flash是有一定的寿命的,当超出某个擦除和写入的次数后,Flash就会坏掉,所以持续的对某个固定的地址进行读写访问,会增大该区域损坏的概率,在某种程度上会减少机顶盒的使用寿命。
[0003]Flash的擦除一般是以块(英文:Block)为单位的,这样,不同类型的数据就不能放到同一个Block上。否则,在更新一种数据时,需要首先备份另一种数据,这样会增加操作的难度和出错的概率。而对于不同数据类型占用不同的Block块,每种类型的数据总的大小又比Block小很多,这样就造成了 Flash空间的严重浪费。
[0004]另外,如果擦除Flash的过程中断电,那么所有的数据就会丢失。有些数据是机顶盒正常运行必须的,如果丢失就会影响机顶盒的正常工作甚至不能工作。
【发明内容】
[0005]本发明的目的在于提供一种机顶盒数据存储方法及装置,以解决现有技术存在的,Flash空间浪费、Flash因为频繁擦写容易损坏和在擦写时断电丢失数据导致机顶盒工作不正常的问题。
[0006]本发明是这样实现的,一种机顶盒数据存储方法,所述方法包括以下步骤:
[0007]在闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区;
[0008]根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;
[0009]在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块;
[0010]对第一存储区当前数据块和第二存储区当前数据块交替进行写入。
[0011]本发明的另一目的在于提供一种机顶盒数据存储装置,所述装置包括:
[0012]第一分区单元,用于在闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区;
[0013]第二分区单元,用于根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;
[0014]确定单元,用于在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块;[0015]存储单元,用于对第一存储区当前数据块和第二存储区当前数据块交替进行写入。
[0016]本发明通过将两个存储区进行分为数据块,将数据进行交替写入不同存储区的数据块,解决了现有技术存在的,Flash空间浪费、Flash因为频繁擦写容易损坏和在擦写Flash时断电丢失数据导致机顶盒工作不正常的问题,提高了 Flash使用寿命和Flash利用率,并且即使擦写Flash时断电也不会丢失数据而影响机顶盒工作。
【专利附图】
【附图说明】
[0017]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018]图1是本发明一实施例提供的机顶盒数据存储方法的实现流程图;
[0019]图2是本发明一实施例提供的机顶盒中块数据结构图;
[0020]图3是本发明另一实施例提供的机顶盒数据读取方法的实现流程图;
[0021]图4是本发明另一实施例提供的机顶盒数据存储装置的模块结构图;
[0022]图5是本发明另一实施例提供的机顶盒数据读取装置的模块结构图。
【具体实施方式】
[0023]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0024]本发明一实施例提供了机顶盒数据存储方法,所述方法如图1所示,具体步骤包括:
[0025]在步骤SlOl中,在Flash中划分出数据存储容量相等的第一存储区和第二存储区。
[0026]在本实施例中,第一存储区和第二存储区都是Block,当然第一存储区和第二存储区根据不同的使用场合,也可以是其它的存储形式。
[0027]在步骤S102中,根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块。
[0028]需要说明的是,数据类型大小是指数据类型需要的最小存储空间大小,不同的数据类型对数据块的数据存储容量需求不一样,根据数据类型大小对第一存储区和第二存储区的数据存储容量依次进行划分,可以划分出多个与数据类型大小相同的数据块。若第一存储区和第二存储区的数据存储容量是数据类型大小的整数倍则可完全划分,否则最后一块数据块与数据类型大小不同,则舍弃。例如,假定第一存储区和第二存储区的数据存储容量都是64K,若数据类型大小为8K,那么第一存储区和第二存储区分别被完整划分成8个8K的数据块;但是若数据类型对应数据块的数据存储容量为9K,也就是数据类型大小为9K,那么第一存储区和第二存储区分别被划分成7个9K的数据块和I个IK的数据块,该IK的数据块将不用于存储数据。[0029]在步骤S103中,在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块。
[0030]需要说明的是,当前数据块是指已经存储数据的数据块的后一数据块,以第一存储区为例,假定第一存储区被划分为7个9K和I个IK的数据块,如果前3个9K的数据块都已经存储了数据,但是第4个9K的数据块没有存储数据,那么第4个数据块就是第一存储区的当前数据块,如果7个9K的数据块都已经存储了数据,而I个IK的数据块不能存储该类型的数据,那么第一存储区就没有当前数据块,或者表述为第一存储区都被写满,没有写入空间。
[0031]具体地,实现确定第一存储区的当前数据块方法为:
[0032]从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据;
[0033]对所述数据块的数据进行每个字节遍历校验;
[0034]校验得到第一个全是OxfT的数据块为当前数据块。
[0035]需要说明的是,以第一存储区为例进行说明,假定第一存储区从左到右有A、B、C、D、E共5个数据块,首先读取数据块A的数据,进行遍历校验,如果数据块A的数据存在不是Oxff的数据,说明数据块A中写有有效数据,继续读取数据块B中的数据进行遍历校验,如果数据块B的数据存在不是OxfT的数据,说明数据块B写有有效数据,继续读取数据块C中的数据进行遍历校验,如果数据块C的数据不存在不是Oxff的数据,那么说明数据块C就是当前数据块。
[0036]在步骤S104中,对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入。
[0037]具体地,实现步骤S104的方法具体为:
[0038]根据控制数据(英文:Control Data)中的奇偶标志(英文:Index),将需要存储的机顶盒数据写入奇偶Index对应的存储区的当前数据块;
[0039]在所述奇偶Index对应的存储区写入所述机顶盒数据时,为所述机顶盒数据添加包头(英文:Head),所述Head包括序列号(英文:Identity,简称:ID)、版本(英文:Version)和所述机顶盒数据的循环冗余校验(英文:Cyclic Redundancy Check,简称:CRC),所述 Version 与 Control Data 中的奇偶 Index 相等;
[0040]将Control Data 中的奇偶 Index 加 I。
[0041]需要说明的是,控制数据存储在内存中,奇偶Index用来控制机顶盒数据写入哪一个存储区。奇偶Index为偶数时,奇偶Index对应的存储区为第一存储区,奇偶Index为奇数时,奇偶Index对应的存储区为第二存储区。当控制数据中的奇偶Index为偶数时,机顶盒数据会被写入第一存储区的当前数据块,然后奇偶Index加1,变为奇数;当控制数据中的奇偶Index为奇数时,机顶盒数据会被写入第二存储区的当前数据块,然后奇偶Index加1,变为偶数,这样交替写入第一存储区和第二存储区的当前数据块。对于两个存储区中还没有数据的时候,奇偶Index会被初始化为0,这个时候如果需要写入机顶盒数据时,会写入第一个存储区的第一个数据块,或者成为第一个存储区的起始数据块,在第一个存储区的第一个数据块被写入机顶盒数据后,Control Data中的奇偶Index通过在O的基础上加I改变了奇偶属性,当再次有机顶盒数据需要写入时,会写入第二存储区的第一个数据块。可以确定的是,通过其他方法或者其他参数也可以控制,实现将需要存储的机顶盒数据交替写入第一存储区和第二存储区。
[0042]参考图2,Head包括标识ID、CRC和Version共3个字段,ID是固定的,CRC是把数据块中的数据做CRC32校验得到的值,在写入数据时,将Control Data中的奇偶Index写入Version,因此Version与奇偶Index相等。
[0043]在本实施例中,通过对两个存储区进行分区,将机顶盒数据交替写入两个存储区的数据块,使得写入新数据时候不用频繁擦掉存储区上的数据,保证了 Flash的使用寿命和利用效率,而且交替对两个存储区写入,即使在写入时断电,导致某一存储区上新写入的数据不成功,但另一存储区还保存有数据,不会导致影响机顶盒工作的情况出现。
[0044]可选的,所述方法还包括:
[0045]当第一存储区没有写入空间时,擦除第一存储区,将需要存储的机顶盒数据写入第一存储区的起始数据块;
[0046]当第二存储区没有写入空间时,擦除第二存储区,将需要存储的机顶盒数据写入第二存储区的起始数据块。
[0047]需要说明的是,假设第一存储区没有写入空间时,执行写操作时,擦除第一存储区,机顶盒数据会被写入到第一存储区的第一个数据块,或者称为第一个存储区的起始数据块,对于第二个存储区也是同样的道理;擦除第一存储区并不擦除分区,仅仅是将里面存储的机顶盒数据擦除。
[0048]可选的,所述步骤S104之后还包括:
[0049]当机顶盒重新启动时,分别从第一存储区和第二存储区读取所有数据块;
[0050]将第一存储区和第二存储区中的数据块分别从右到左查找有效数据块;
[0051]将有效数据块中的Version进行比较,Version值最大的为最有效数据块;
[0052]将最有效数据块中的机顶盒数据读入内存;
[0053]根据所述最有效数据块中的机顶盒数据的Head中的Version重置Control Data中的奇偶Index ;
[0054]擦除所述奇偶Index对应的存储区,将所述最有效数据块中的机顶盒数据复制到所述奇偶Index对应的存储区的起始数据块;
[0055]将所述奇偶Index加I后,将所述奇偶Index对应的存储区擦除。
[0056]需要说明的是,根据所述最有效数据块中的机顶盒数据的Head中的Version重置Control Data中的奇偶Index具体为:
[0057]当Head中的Version为奇数时,将Control Data中的奇偶Index重置为O,当Head中的Version为偶数时,将Control Data中的奇偶Index重置为I。
[0058]在本实施例中,在机顶盒重新启动时,通过重置Control Data中的奇偶Index,避免奇偶Index数据过大,造成数据溢出。
[0059]本发明另一实施例提供了机顶盒数据读取方法,所述方法如图3所示,具体步骤包括:
[0060]在步骤S301中,在Flash中划分出数据存储容量相等的第一存储区和第二存储区。
[0061]在步骤S302中,根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块。[0062]在步骤S303中,在读取机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块。
[0063]在步骤S304中,确定读取哪个存储区的数据。
[0064]具体地,实现步骤S304具体为:
[0065]根据控制数据Control Data中的奇偶标志Index,确定读取奇偶Index不对应的存储区的数据。
[0066]需要说明的是,奇偶Index不对应的存储区是与奇偶Index对应的存储区相反的概念,奇偶Index为偶数时,奇偶Index对应的存储区为第一存储区,奇偶不对应的存储区就是第二存储区,奇偶Index为奇数时,奇偶Index对应的存储区为第二存储区,奇偶Index不对应的存储区就是第一存储区。
[0067]在步骤S305中,从确定的存储区的当前数据块的前一数据块中读取数据。
[0068]需要说明的是,例如奇偶Index对应的为第一存储区,那么不对应的存储区为第二存储区,如果第二存储区的当前数据块为第3个数据块,那么确定的存储区的当前数据块的前一数据块是第二存储区的第2个数据块。
[0069]可选的,实现所述步骤S303中,在读取机顶盒数据时,确定第一存储区的当前数据块具体为:
[0070]从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据;
[0071]对所述数据块的数据进行每个字节遍历校验;
[0072]校验得到第一个全是Oxff的数据块为当前数据块。
[0073]本发明另一实施例提供了机顶盒数据存储装置,所述装置的模块结构如图4所示,具体包括:
[0074]第一分区单元41,用于在Flash中划分出数据存储容量相等的第一存储区和第二存储区;
[0075]第二分区单元42,用于根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;
[0076]确定单元43,用于在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块;
[0077]存储单元44,用于对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入。
[0078]可选的,所述确定单元43在确定第一存储区的当前数据块时,具体用于:
[0079]从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据;
[0080]对所述数据块的数据进行每个字节遍历校验;
[0081]校验得到第一个全是Oxff的数据块为当前数据块。
[0082]可选的,所述存储单元44具体用于:
[0083]根据控制数据Control Data中的奇偶标志Index,将需要存储的机顶盒数据写入奇偶Index对应的存储区的当前数据块;
[0084]在所述奇偶Index对应的存储区写入所述机顶盒数据时,为所述机顶盒数据添加包头Head,所述Head包括序列号ID、版本Version和所述机顶盒数据的循环冗余校验CRC,所述Version与Control Data中的奇偶Index相等;
[0085]将Control Data 中的奇偶 Index 加 I。
[0086]可选的,所述装置还包括:
[0087]擦除单元,用于当第一存储区没有写入空间时,擦除第一存储区,通知存储单元44将需要存储的机顶盒数据写入第一存储区的起始数据块;
[0088]当第二存储区没有写入空间时,擦除第二存储区,通知存储单元44将需要存储的机顶盒数据写入第二存储区的起始数据块。
[0089]可选的,所述装置还包括:
[0090]重启处理单元,用于当机顶盒重新启动时,分别从第一存储区和第二存储区读取所有数据块;
[0091]将第一存储区和第二存储区中的数据块分别从右到左查找有效数据块;
[0092]将有效数据块中的Version进行比较,Version值最大的为最有效数据块;
[0093]将最有效数据块中的数据读入内存;
[0094]根据所述最有效数据块中的数据的Head中的Version重置Control Block中的奇偶Index ;
[0095]擦除所述奇偶Index对应的存储区,将所述最有效数据块中的数据复制到所述奇偶Index对应的存储区的起始数据块;
[0096]将所述奇偶Index加I后,将所述奇偶Index对应的存储区擦除。
[0097]本发明另一实施例提供了机顶盒数据读取装置,所述装置的模块结构如图5所示,具体包括:
[0098]第一分区单元51,用于在Flash中划分出数据存储容量相等的第一存储区和第二存储区;
[0099]第二分区单元52,用于根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;
[0100]第一确定单元53,用于在读取机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块;
[0101]第二确定单元54,用于确定读取哪个存储区的数据;
[0102]读取单元55,用于从确定的存储区的当前数据块的前一数据块中读取数据。
[0103]可选的,所述第一确定单元53具体用于:
[0104]从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据;
[0105]对所述数据块的数据进行每个字节遍历校验;
[0106]校验得到第一个全是Oxff的数据块为当前数据块。
[0107]可选的,所述第二确定单元54具体用于:
[0108]根据控制数据Control Data中的奇偶标志Index,确定读取奇偶Index不对应的存储区的数据。
[0109]本领域普通技术人员可以理解为上述实施例所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。[0110]本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于可读取存储介质中,所述的存储介质,包括R0M/RAM等。
[0111]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种机顶盒数据存储方法,其特征在于,所述方法包括: 在闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区; 根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块; 在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块; 对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入。
2.如权利要求1所述的方法,其特征在于,所述在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块具体为: 从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据; 对所述数据块的数据进行每个字节遍历校验; 校验得到第一个全是Oxff的数据块为当前数据块。
3.如权利要求1所述的方法,其特征在于,所述对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入具体为: 根据控制数据Control Data中的奇偶标志Index,将需要存储的机顶盒数据写入奇偶Index对应的存储区的当前数据块; 在所述奇偶Index对应的存储区写入所述机顶盒数据时,为所述机顶盒数据添加包头Head,所述Head包括序 列号ID、版本Version和所述机顶盒数据的循环冗余校验CRC,所述Version 与 Control Data 中的奇偶 Index 相等; 将Control Data中的奇偶Index加I。
4.如权利要求1所述的方法,其特征在于,所述方法还包括: 当第一存储区没有写入空间时,擦除第一存储区,将需要存储的机顶盒数据写入第一存储区的起始数据块; 当第二存储区没有写入空间时,擦除第二存储区,将需要存储的机顶盒数据写入第二存储区的起始数据块。
5.如权利要求1所述的方法,其特征在于,所述对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入之后还包括: 当机顶盒重新启动时,分别从第一存储区和第二存储区读取所有数据块; 将第一存储区和第二存储区中的数据块分别从右到左查找有效数据块; 将有效数据块中的Version进行比较,Version值最大的为最有效数据块; 将最有效数据块中的机顶盒数据读入内存; 根据所述最有效数据块中的机顶盒数据的Head中的Version重置Control Data中的奇偶Index ; 擦除所述奇偶Index对应的存储区,将所述最有效数据块中的机顶盒数据复制到所述奇偶Index对应的存储区的起始数据块; 将所述奇偶Index加I后,将所述奇偶Index对应的存储区擦除。
6.一种机顶盒数据读取方法,其特征在于,所述方法包括: 在闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区; 根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块; 在读取机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块; 确定读取哪个存储区的数据; 从确定的存储区的当前数据块的前一数据块中读取数据。
7.如权利要求6所述的方法,其特征在于,所述在读取机顶盒数据时,确定第一存储区的当前数据块具体为: 从第一存储区的起始地址,根据从左到右的顺序读取数据块的数据; 对所述数据块的数据进行每个字节遍历校验; 校验得到第一个全是Oxff的数据块为当前数据块。
8.如权利要求6所述的方法,其特征在于,所述确定读取哪个存储区的数据具体为: 根据控制数据Control Data中的奇偶标志Index,确定读取奇偶Index不对应的存储区的数据。
9.一种机顶盒数据存储装置,其特征在于,所述装置包括: 第一分区单元,用于在 闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区; 第二分区单元,用于根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;确定单元,用于在写入需要存储的机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块; 存储单元,用于对第一存储区的当前数据块和第二存储区的当前数据块交替进行写入。
10.一种机顶盒数据读取装置,其特征在于,所述装置包括: 第一分区单元,用于在闪存Flash中划分出数据存储容量相等的第一存储区和第二存储区; 第二分区单元,用于根据需要存储的机顶盒数据的数据类型大小,分别对所述第一存储区和第二存储区的数据存储容量进行划分,划分出多个与数据类型大小相同的数据块;第一确定单元,用于在读取机顶盒数据时,确定第一存储区的当前数据块和第二存储区的当前数据块; 第二确定单元,用于确定读取哪个存储区的数据; 读取单元,用于从确定的存储区的当前数据块的前一数据块中读取数据。
【文档编号】G06F12/06GK103440205SQ201310367010
【公开日】2013年12月11日 申请日期:2013年8月21日 优先权日:2013年8月21日
【发明者】张迎伟 申请人:深圳市九洲电器有限公司