一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种FLASH的容量识别方法及容量识别系统与流程

2021-09-04 06:31:00 来源:中国专利 TAG:容量 识别系统 识别 方法 存储器

一种flash的容量识别方法及容量识别系统
技术领域
1.本发明涉及flash存储器技术领域,具体涉及一种flash的容量识别方法及容量识别系统。


背景技术:

2.对于大多数中小型嵌入式系统,基于成本和方案软硬件设计考虑,存储介质绝大多数会采用nor(not or) flash或者nand(not and) flash(闪存)。现有技术一般采用读id(identity document身份标识)的命令方法,对照每款flash的规格书进行容量识别。但不同厂家不同型号的flash id一般不同,假如方案后期硬件flash型号替换,软件(包括产品配置信息)则需要不断更新,以兼容多款flash,否则主控芯片无法控制与之连接的新型号的flash。
3.对于nor flash,可以通过读到的型号id的某个字节进行容量的换算;对于nand flash,不同型号id差异甚大,无法采用相应的id值换算出容量。容量的计算虽然也可以通过读取flash出厂内置的sfdp表(serial flash discoverable parameter串行闪存预设参数表)而获知;但对于个别型号的flash,原厂商也不内置sfdp表,只能按照规格书将id换算为容量。
4.某些时候晶元厂厂能缩紧,会造成flash供货紧张;有些供应商会采用一些flash原厂商筛选不通过的flash晶元或者较差等级的flash晶元供货,形成杂牌、黑片(有可能出现没有内置id或者id“货不对版”的风险)的flash,导致无法通过id换算或读系统表信息的方式获得flash的容量。


技术实现要素:

5.本发明公开一种flash的容量识别方法及容量识别系统,所述容量识别方法是通过对flash内的一些特定起始地址的块空间进行一定字节的数据读写比对,从而识别flash的真实存储空间的容量,兼容不同厂商或不同型号的flash的容量识别,具体技术方案包括:一种flash的容量识别方法,所述容量识别方法包括:步骤1、在flash内设置出标准起始地址处的块,记为初始块空间,再擦除初始块空间;然后将当前设置的初始块空间内的特定字节的地址配置为第一批测试数据,并将第一批测试数据写入对应的初始块空间;然后进入步骤2;其中,第一批测试数据在flash内所占用的字节数是预配置数量;步骤2、在flash内设置出起始容量识别地址,并在flash内设置出以起始容量识别地址为起始地址的块,记为待测块空间,再擦除待测块空间;然后将当前设置的待测块空间内的特定字节的地址配置为第二批测试数据,并将第二批测试数据写入对应的待测块空间;然后进入步骤3;其中,第二批测试数据在flash内所占用的字节数是预配置数量;步骤3、判断从初始块空间内读取出预配置数量个字节的数据与从待测块空间读取出的预配置数量个字节的数据是否满足预设匹配条件,是则确定所述初始块空间内存储的第一批测试数据被所述待测试块
空间内存储的第二批测试数据覆盖,进而确定识别出flash的有效容量信息,否则进入步骤4;步骤4、在flash内,以最新获得的起始容量识别地址相对于标准起始地址的偏移量为地址增量,确定下一个容量识别地址,再将下一个容量识别地址更新为所述起始容量识别地址,然后返回步骤2。
6.该技术方案首先在flash内设置一个初始块空间作为存储参考数据的块空间,用于参与地址递增变化的待测块空间内的数据对比,进而在此基础上对所述起始容量识别地址进行地址递增更新,当所述起始容量识别地址更新覆盖到所述初始块空间时,确定完成flash的有效总容量的识别检测,与现有技术相比,不用考虑flash的特定id型号或特定规格文件的正确与否,而是使用一些通用的flash命令参数;本技术方案是使用涉及到具体字节数的命令参数,本技术方案每次对所述起始容量识别地址进行地址递增后,进行的数据对比中都是将预先写入块空间的数据按预配置数量个字节读取出来进行比较,识别出flash当前的有效容量信息,这一容量识别方法能够兼容不同类型的flash,保证当前识别出的容量对于不同类型flash存储器具备硬件适应性。
7.进一步地,所述配置第二批测试数据为当前设置的待测块空间内的特定字节的地址的方式是:在当前设置的待测块空间内,将当前操作的4个字节的最低位字节的地址作为当前操作的4个字节的测试数据,以使得每次更新过起始容量识别地址的待测块空间被写入的一批测试数据是不同的;其中,第二批测试数据被配置为以4个字节地址为单位对齐的形式存储在flash;所述配置第一批测试数据为当前设置的初始块空间内的特定字节的地址的方式是:在当前设置的初始块空间内,将当前操作的4个字节的最低位字节的地址作为当前操作的4个字节的测试数据;其中,第一批测试数据被配置为以4个字节地址为单位对齐的形式存储在flash。该技术方案在起始容量识别地址不断更新的基础上,控制每次写入最新的待测块空间的一批测试数据与所述初始块空间写入的固定的一批测试数据都是不同,直到遍历完flash的有效总容量才被读取为相同的数据,提高容量识别的有效性。
8.进一步地,所述步骤3具体包括:从所述初始块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成基准二进制数组;从所述待测块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成待测二进制数组;判断基准二进制数组的所有比特位和待测二进制数组的所有比特位中是否存在大于或等于预匹配数量个字节的且在相同排序的比特位上的二进制数相同,是则确定基准二进制数组和待测二进制数组满足所述预设匹配条件,进而确定识别出flash的有效容量信息,否则进入所述步骤4;其中,预匹配数量是所述预配置数量的一半,在判断到满足所述预设匹配条件时,已识别出的flash的有效容量是:最新获得的所述起始容量识别地址相对于所述标准起始地址的偏移量的一半。
9.本技术方案分别从所述初始块空间内和从所述待测块空间内读取相同字节数的数据进行同位置的比特位上的二进制数值比较,充分考虑到nand快闪存储器中存在的坏块对容量识别结果的影响后,本技术方案只是以同一块空间读取出的所有字节数的一半的二进制数的位置及数值作为判断基准确定数据对比的匹配度,在此基础上确定识别出flash中的有效容量是最新获得的所述起始容量识别地址的一半,避免在容量识别的过程中加入对坏块读写测试以排除flash内的坏块位置,简化容量识别步骤;由于nor快闪存储器内不存在坏块,所以,本实施例不用特地考虑坏块位置,从而既兼容flash类型,又简化相应的二
进制数的对比方式,还保证容量识别效果。
10.进一步地,所述步骤3具体包括:步骤31、从所述初始块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成基准二进制数组,再控制所述基准二进制数组按照4个字节的容量进行分组,得到数目为预配置数量与4的比值的子基准二进制数组,以保证分出的每个子基准二进制数组的最小字节数都是4;同时,从所述待测块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成待测二进制数组,然后控制所述待测二进制数组按照4个字节的容量进行分组,得到数目为预配置数量与4的比值的子待测二进制数组,以保证分出的每个子待测二进制数组的最小字节数都是4;然后进入步骤32;步骤32、设置出一个对比结果计数量;然后进入步骤33;步骤33、每当判断到一个子基准二进制数组中存在一个比特位与相同组别的子待测二进制数组的相同排序的比特位上的二进制数相同时,控制对比结果计数量加一,否则控制对比结果计数量不变;直到判断完所有的子基准二进制数组,再进入步骤34;步骤34、判断所述对比结果计数量的变化量是否大于或等于预匹配数量的8倍,是则确定基准二进制数组和待测二进制数组满足所述预设匹配条件,进而确定识别出flash的有效容量信息,否则进入所述步骤4;其中,预匹配数量是所述预配置数量的一半,在步骤34判断到满足所述预设匹配条件时,已识别出的flash的有效容量是:最新获得的所述起始容量识别地址相对于所述标准起始地址的偏移量的一半。使得每个子基准二进制数组存在32比特位的二进制数,每个子待测二进制数组存在32比特位的二进制数,都比256个字节小,且都作为字节单位或字单位被cpu调用,以加快比特位的对比判断。
11.进一步地,所述步骤4中,所述以最新获得的起始容量识别地址相对于标准起始地址的偏移量为地址增量,确定下一个容量识别地址的方法具体包括:首次执行至步骤4时,将起始容量识别地址相对于所述标准起始地址的偏移量设置为第一次获取到的地址增量,其中,所述起始容量识别地址的更新次数为0,步骤4的执行次数为1;然后,控制起始容量识别地址加上第一次获取到的地址增量,得到所述下一个容量识别地址,使得所述下一个容量识别地址为第一次获取到的地址增量的两倍;自第一次执行完步骤4之后,每当执行至步骤4时,将最新更新出的起始容量识别地址相对于所述标准起始地址的偏移量设置为最新一次获取到的地址增量,其中,最新更新出的起始容量识别地址的更新次数为(n

1),步骤4的执行次数为n,n为大于或等于2的整数;然后,控制最新更新出的起始容量识别地址加上最新一次获取到的地址增量,得到所述下一个容量识别地址,使得所述下一个容量识别地址等于第一次获取到的地址增量与2的n次幂的乘积;当当前确定的所述下一个容量识别地址更新为所述最新更新出的起始容量识别地址后,返回所述步骤2。从而让初始确定的起始容量识别地址相对于标准起始地址的偏移量以倍数递增的方式变化更新,使所述起始容量识别地址以最新设置的所述地址增量的递增变化遍历过flash的不同块。
12.进一步地,每次执行步骤4时,更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域所允许容纳的最大数据容量大于或等于flash的擦除命令一次所擦除的最大数据容量,更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域所允许容纳的最大数据容量大于所述待测块空间的容量;更新前的起始容量识别地址与所述标准起始地址之间的地址区域所允许容纳的最大数据容量大于flash的擦除命令一次所擦除的最大数据容量,更新前的起始容量识别地址与所述标准起始地址之间的地址区
域所允许容纳的最大数据容量大于所述初始块空间的容量;其中,更新前的起始容量识别地址处设置的所述待测块空间的容量与更新后的起始容量识别地址处设置的所述待测块空间的容量相等。从而步骤4执行的次数越多,更新后的起始容量识别地址与更新前的起始容量识别地址的地址差值越大,使得起始容量识别地址及其对应的块空间所覆盖的地址空间范围越大,且保证每一次新扩展遍历的地址区域预留有部分冗余区域不需被flash擦除;且保证不同起始地址处的块所占用的空间之间是存在无存储数据的空闲区域。
13.进一步地,所述预配置数量个字节是小于或等于nor快闪存储器对应配置的擦除命令一次所擦除的最小数据容量,所述预配置数量个字节也是小于nand快闪存储器对应配置的擦除命令一次所擦除的最小数据容量;其中,所述初始块空间的容量大于或等于预配置数量个字节,所述待测块空间的容量大于或等于预配置数量个字节;flash包括nor快闪存储器和nand快闪存储器。使得前述的标准起始地址处的块内写入的预配置数量个字节和所述待测块空间写入的预配置数量个字节都支持被flash的任意擦除命令完全擦除,从而不用将所述待测块空间写满即可执行容量识别。保证识别效率。
14.进一步地,nor快闪存储器对应配置的擦除命令的最小擦除单位包括256字节、4k字节、32k字节、64k字节,nand快闪存储器对应配置的擦除命令仅限于以128k字节为最小擦除单位;其中,所述初始块空间和所述待测试块空间都设置为256;第一次执行至所述步骤1时,标准起始地址是0;第一次执行至所述步骤2时,起始容量识别地址是0x20000,等效于128k字节。
15.本技术方案将所述初始块空间的容量和所述待测块空间的容量都定为256字节,使得所述初始块空间和所述待测块空间都能被flash的任意擦除命令完全擦除,减小上一次写入同一块的数据对当前从同一块读取出的数据的影响,而且,本技术方案中将起始容量识别地址设置为128k字节的倍数,能够防止所述flash擦除越过更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域。
16.进一步地,在执行所述步骤1之前,还包括:读取flash内置寄存器的低八位上存储的二进制数,并在读缓存空间内获取到硬件块保护标志位上存储的二进制数;其中,读取的flash内置寄存器在nor快闪存储器中是指状态寄存器,读取的flash内置寄存器在nand快闪存储器中是指配置寄存器;状态寄存器和配置寄存器都在相同的位上设置硬件块保护标志位;当判断到硬件块保护标志位上存储的二进制数为1时,则在写使能所述flash内置寄存器后,在读缓存空间内将硬件块保护标志位对应的二进制数配置为0,再在写指令的控制下用二进制数0将所述flash内置寄存器的硬件块保护标志位清零,直到所述flash内置寄存器的硬件块保护标志位所存储的二进制数被读取为0;当判断到硬件块保护标志位上存储的二进制数为0,确定所述flash当前不处于硬件保护状态,进而确定解除所述flash的内存空间的块保护,然后开始执行所述步骤1。该技术方案限定所述flash内置寄存器通过将硬件块保护标志位清零的方式或反复清零的方式完成所述flash的块空间的硬件保护状态的解除,以开始接受后续对块空间的写入读取操作。提高所述flash的容量识别的准确效果。
17.一种基于flash的容量识别系统,包括flash和总线控制模块,flash包括flash内置寄存器和以块组成的内存空间,其中,flash以块为单位进行数据擦除;总线控制模块用于控制flash执行所述容量识别方法。与现有技术相比,该容量识别系统不用考虑flash的
特定id型号或特定规格文件的正确与否,而是使用一些通用的flash命令参数;该容量识别系统是使用涉及到具体字节数的命令参数,每次对所述起始容量识别地址地址递增后,进行的数据对比中都是将预先写入flash内部的块空间的数据按预配置数量个字节读取出来进行比较,识别出flash当前的有效容量信息,这一容量识别系统能够兼容不同类型的flash,保证当前识别出的一容量对于不同类型flash存储器具备硬件适应性。
附图说明
18.图1为本发明一实施例公开的一种flash的容量识别方法的流程图。
19.图2是本发明一实施例公开的flash块的空间地址递增的示意图。
具体实施方式
20.下面结合附图对本发明的具体实施方式作进一步说明。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成,所以,由n个触发器构成的寄存器是n位地址位宽的寄存器。flash的数据是以bit的方式保存在存储单元中,一般来说,一个存储单元中只能存储一个bit。这些存储单元以8个为单位形成一个字节,或者以32个为单位形成一个字。
21.需要说明的是,nor快闪存储器及nand快闪存储器。nor及nand快闪各自具有超越彼此的某些优点。举例来说,nor快闪存储器通常具有比nand快闪慢的写入及擦除速度。此外,nand快闪存储器通常具有比nor快闪存储器大的耐久性。然而,nor快闪存储器通常启用对存储于存储器装置内的数据的随机存取,而nand快闪存储器大体上要求以较大群组存取及写入数据。举例来说,nand快闪存储器通常包括各自包括多个页的多个块,其中每一页包括大量字节的数据。在操作中,每次一个块地擦除数据,且每次一个页地写入数据。
22.对于nor快闪存储器及nand快闪存储器内部空间,比如一个块,为了方便描述,一般也需要指定一个块的起始地址。而块,是nand flash的擦除操作的基本/最小单位,nand闪存阵列分为一系列区块(block),这些区块是nand 器件中最小的可擦除实体。nand快闪存储器擦除一个区块就是把所有的位(bit)设置为“1”(而所有字节(byte)设置为ffh)。nand快闪存储器的编程则是将已擦除的位从“1”变为“0”,最小的编程实体是字节(byte)。一些nor快闪存储器能够将存储空间进行分区,分区的最小单位为逻辑块。系统为前述的区块或逻辑块分配一定数量的逻辑块用于存储系统信息和坏块表信息。
23.本实施例适用的flash读写控制硬件系统中,无论是内嵌flash die(晶元)或者外挂flash闪存芯片,实际方案应用中均有可能会选择不同厂家不同型号不同容量的nor快闪存储器或nand快闪存储器。每款flash均有自己特有的id(identity document身份标识)和sfdp表(serial flash discoverable parameter串行闪存预设参数表)。对于nor快闪存储器,可以直接从id号某个字节换算出flash容量,或者从sfdp表读出容量;而对于nand快闪存储器,因不同型号的id号差异较大,无统一的命名规律直接换算容量,但也可以从sfdp表读出容量。但某些flash原厂商出厂前可能不烧录某款flash的sfdp表,或者随着某段时间晶元厂的产能缩紧,flash的供货也紧张,一些供应商会考虑将flash原厂商筛选不通过或者较差等级的die/芯片重新封装测试后出售,可能存在id/sfdp表与实际芯片“货不对版”的情况出现,此时,读id或者sfdp表而获知flash容量的方式存在无法奏效的风险。
24.为了能够避免背景技术中提及的在系统表信息或id号不确定的情况下无法获知flash容量的问题,且可以兼容不同厂或者不同型号的flash,本发明的一实施例公开一种flash的容量识别方法,所述容量识别方法包括:步骤s1、在flash内设置出标准起始地址处的块,记为初始块空间,其中,标准起始地址等效于内存空间分段后的段首地址;再擦除初始块空间,将当前设置的初始块空间内的特定字节的地址配置为第一批测试数据;其中,第一批测试数据在flash内所占用的字节数是预配置数量。优选地,初始块空间的容量大于或等于预配置数量个字节,当前写入的一批测试数据是存储在所述初始块空间内的连续地址上。为了更完整地描述flash空间,将标准起始地址设置为0,对应于图2的flash的地址0x00000000,初始块空间为地址0x00000000右侧箭头指向的填充斜线的矩形区域;预配置数量设置为与flash一次擦除的字节数相关联,然后进入步骤s2。
25.步骤s2、在flash内设置出起始容量识别地址,并在flash内设置出以起始容量识别地址为起始地址的块,记为待测块空间,再擦除待测块空间;然后将当前设置的待测块空间内的特定字节的地址配置为第二批测试数据;然后进入步骤s3;其中,第二批测试数据在flash内所占用的字节数是预配置数量。在本实施例中,当前设置的起始容量识别地址与所述标准起始地址之间的地址区域所允许容纳的最大数据容量大于或等于flash的擦除命令一次所擦除的最大数据容量,让flash的擦除命令在擦除标准起始地址处设置的初始块空间时,不能擦除至当前设置的起始容量识别地址对应的所述待测块空间内的数据;起始容量识别地址与所述标准起始地址之间的地址区域所允许容纳的最大数据容量大于所述初始块空间的容量,所述预配置数量个字节是小于或等于flash对应配置的擦除命令一次所擦除的最小数据容量,由此可知,第二批测试数据不一定将所述待测块空间写满,第二批测试数据可以存储在所述待测块空间的连续地址,本实施例中,flash对应配置的擦除命令一次能擦除所述待测块空间内的最新写入的预配置数量个字节的数据,或者,flash对应配置的擦除命令一次能擦除所述待测块空间内现存的所有数据,即flash对应配置的擦除命令一次所擦除的最小数据容量等于所述待测块空间的容量。
26.需要说明的是,nor快闪存储器对应配置的擦除命令的最小擦除单位包括256字节、4k字节、32k字节、64k字节,nand快闪存储器对应配置的擦除命令仅限于以128k字节为最小擦除单位。结合图2可知,第一次执行至步骤s2时,起始容量识别地址设置为地址0x00020000,表示为128kb,则相对于地址0x00000000的地址长度是128kb,也可以用于表示空间容量大小。以起始容量识别地址0x00020000为起始地址设置的待测块空间为地址0x00020000右侧的箭头指向的填充斜线的矩形区域,与地址0x00000000指向的填充斜线的矩形区域与地址0x00000000指向的填充斜线的矩形区域之间存在空白区域没有被写入数据;优选地,预配置数量设置为256,所述待测块空间的容量设置为256字节,使得所述待测块空间能够被任意一种擦除命令完整擦除。
27.步骤s3、判断从初始块空间内读取出预配置数量个字节的数据与从待测块空间读取出的预配置数量个字节的数据是否满足预设匹配条件,是则进入步骤s4。否则进入步骤s5。在步骤s3中,可以按照写入相应的块空间的数据的缓存顺序,逐个字节将所述测试数据读取出来,存在一定的读取先后顺序。步骤s3是比较初始块空间内读取出预配置数量个字节的数据与从待测块空间读取出的预配置数量个字节的数据在每一个匹配的比特位上的
异同。所述步骤s3具体包括:从所述初始块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成基准二进制数组;在完成所述初始块空间的读取操作后,从所述待测块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成待测二进制数组;然后,判断所述基准二进制数组的所有比特位和所述待测二进制数组的所有比特位中是否存在大于或等于预匹配数量个字节的且在相同排序的比特位上的二进制数相同,是则进入步骤s4,否则进入步骤s5。
28.步骤s4、确定所述初始块空间内存储的第一批测试数据被所述待测试块空间内存储的第二批测试数据覆盖,进而确定识别出flash的有效容量信息,即识别出flash的有效总容量。步骤s4确定所述待测块空间的更新后的起始容量识别地址覆盖到所述初始块空间内的地址,确定基准二进制数组和待测二进制数组满足所述预设匹配条件,进而确定识别出flash的有效总容量,在预匹配数量是所述预配置数量的一半时,已识别出的flash的有效总容量是最新获得的所述起始容量识别地址相对于所述标准起始地址的偏移量的一半。
29.需要说明的是,最新设置的待测块空间内部缓存的预配置数量个字节的数据在步骤s3中被匹配识别出一半或一半以上的数据大小容量后,确定当前已识别出的flash的有效容量是当前参与步骤s3判断的待测块空间对应的起始容量识别地址(视为最新获得的所述起始容量识别地址)相对于所述标准起始地址的偏移量的一半。
30.具体是在字节对齐的基础上,在表缓存空间内进行两组二进制数中的同排序的比特位的二进制数比较,在两组所述预配置数量个字节的数据对应转换出的两组二进制数中,每当检测到同序号的比特位上的二进制数是相同时,则确定增加一个证明对比测试成功的一位二进制数,直到证明对比测试成功的二进制数的数目增加至大于或等于所述预匹配数量,才确定基准二进制数组和待测二进制数组满足所述预设匹配条件。其中,所述的字节对齐至少要求相比较的两组二进制数组相对于同一起始地址的地址偏移量是成整数倍的,两者产生的地址偏移量的差值可以是所述预配置数量的倍数;当然,所述初始块空间的容量与所述待测块空间的容量是相等的,所述初始块空间的起始地址与所述待测块空间的起始地址是对齐的。在本实施例中,预匹配数量是所述预配置数量的一半,使得步骤s3在判断到满足所述预设匹配条件时,已识别出的flash的有效容量是最新获得的所述起始容量识别地址的一半。与现有技术相比,本实施例分别从所述初始块空间内和从所述待测块空间内读取相同字节数的数据进行同位置的比特位上的二进制数值比较,充分考虑到nand快闪存储器中存在的坏块对容量识别结果的影响后,本实施例只是以同一块空间读取出的所有字节数的一半的二进制数的位置及数值作为判断基准确定数据对比的匹配度,在此基础上确定识别出flash中的有效总容量是最新获得的所述起始容量识别地址的一半,避免在容量识别的过程中加入对坏块读写测试,简化容量识别步骤;由于nor快闪存储器内不存在坏块,所以,本实施例不用检测排除坏块位置,从而既兼容flash类型,又简化相应的二进制数的对比方式,还保证容量识别效果。
31.作为另一种实施例,所述步骤s3具体包括:步骤31、从所述初始块空间内读取出预配置数量个字节的数据,再分别转换为二进制数,组成基准二进制数组,再控制所述基准二进制数组按照4个字节的容量进行分组,得到数目为预配置数量与4的比值的子基准二进制数组,以保证分出的每个子基准二进制数组的最小字节数都是4;同时,从所述待测块空间内读取出预配置数量个字节的数据,再
分别转换为二进制数,组成待测二进制数组,控制所述待测二进制数组按照4个字节的容量进行分组,得到数目为预配置数量与4的比值的子待测二进制数组,以保证分出的每个子待测二进制数组的最小字节数都是4;然后进入步骤32;优选地,当预配置数量是256时,从所述初始块空间内读取出256个字节的标准测试数据转换为基准二进制数组后,按照4个字节的分组方式分得64个子基准二进制数组,同理地,分出64个子待测二进制数组,其中,每个子基准二进制数组存在32比特位的二进制数,每个子待测二进制数组存在32比特位的二进制数,都比256个字节小,且都作为字节单位或字单位被cpu调用,以加快比特位的对比判断。
32.步骤32、设置出一个对比结果计数量;然后进入步骤33;对比结果计数量在步骤32中优选设置为0。
33.步骤33、每当判断到一个子基准二进制数组中存在一个比特位与相同组别的子待测二进制数组的相同排序的比特位上的二进制数相同时,控制对比结果计数量加一;每当判断到一个子基准二进制数组中存在一个比特位与相同组别的子待测二进制数组的相同排序的比特位上的二进制数不相同时,控制对比结果计数量不变。按照步骤33的判断方式遍历完每个子基准二进制数组中的每个比特位上的二进制数与相同组别的子待测二进制数组的相同排序的比特位上的二进制数的异同情况后,再进入步骤34。
34.步骤34、判断所述对比结果计数量的变化量是否大于或等于所述预匹配数量的8倍,是则确定所述基准二进制数组和所述待测二进制数组满足所述预设匹配条件,进而确定识别出flash的有效容量信息,否则进入所述步骤s5;其中,预匹配数量是所述预配置数量的一半,当所述预配置数量是256时,预匹配数量是128,所述对比结果计数量的变化量达到128的8倍,即1024时,确定所述基准二进制数组和所述待测二进制数组满足所述预设匹配条件,已识别出的flash的有效总容量是最新获得的所述起始容量识别地址相对于所述标准起始地址的偏移量的一半,并确定所述初始块空间内存储的第一批测试数据被所述待测试块空间内存储的第二批测试数据覆盖。需要说明的是,最新设置的待测块空间内部缓存的预配置数量个字节的第二批测试数据在步骤31至步骤34中被匹配出一半或一半以上的数据大小容量(即预配置数量个字节的一半)与相同大小容量的第一批测试数据相同后,也确定最新获得的所述起始容量识别地址更新变化为所述初始块空间内的地址,即至少与所述初始块空间内一半容量的特定字节的地址相同,等效于至少与预配置数量个字节的第一批测试数据的一半相同。
35.优选地,在执行所述步骤s3的过程中,还支持将256字节的第二批测试数据写入所述待测块空间的方式具体为:先将256个字节的第二批测试数据平均分成64个4字节的测试数据,组成64个字的测试数据,并相应地在同一所述待测块空间内划分出64个子区块;其中,1个字所占的内存空间等于4个字节所占的内存空间;然后将每个字的测试数据分别写入对应子区块的地址处。本实施例将写入flash的块空间的一批测试数据分成64个组,使得每组形成4个字节大小的数据参与所述步骤s4的判断,从而每提取32比特位的二进制数则比较相应一组低位宽的数据的异同,降低256个字节的数据整体对比判断难度,也方便调用cpu等主控单元以字或者字节为单位进行比对。
36.步骤s5、在flash内,以最新获得的起始容量识别地址相对于标准起始地址的偏移量为地址增量,确定下一个容量识别地址,再将下一个容量识别地址更新为下一次写操作
的所述起始容量识别地址,然后返回步骤s2,则下一个容量识别地址(即更新后的起始容量识别地址)处设置的待测块空间的容量等于更新前的起始容量识别地址处设置的待测块空间的容量,在本实施例中,待测块空间的容量是保持不变的,预配置数量个字节的标准测试数据也是保持不变;优选地,待测块空间的容量等于所述初始块空间的容量。
37.具体地,首次执行至步骤s5时,将起始容量识别地址相对于所述标准起始地址的偏移量设置为第一次获取到的地址增量,其中,所述起始容量识别地址的更新次数为0,步骤s5的执行次数为1;然后,控制起始容量识别地址加上第一次获取到的地址增量,得到所述下一个容量识别地址,使得所述下一个容量识别地址为起始容量识别地址的两倍;结合图2可知,首次执行至步骤s5时,起始容量识别地址已经在前述步骤s2中被设置为0x00020000,同时所述标准起始地址配置为0,则起始容量识别地址相对于所述标准起始地址的偏移量为0x00020000,等效于128k字节,即第一次获取到的地址增量;然后,控制起始容量识别地址0x00020000加上第一次获取到的地址增量128k字节,得到所述下一个容量识别地址0x00040000,使得所述下一个容量识别地址为第一次获取到的地址增量的两倍。
38.自第一次执行完步骤s5之后,每当执行至步骤s5时,将最新更新出的起始容量识别地址相对于所述标准起始地址的偏移量设置为最新一次获取到的地址增量,其中,最新更新出的起始容量识别地址的更新次数为(n

1),步骤s5的执行次数为n,n为大于或等于2的整数;然后,控制最新更新出的起始容量识别地址加上最新一次获取到的地址增量,得到所述下一个容量识别地址,使得所述下一个容量识别地址等于第一次获取到的地址增量与2的n次幂的乘积;当当前确定的所述下一个容量识别地址更新为所述最新更新出的起始容量识别地址后,返回所述步骤s2,使所述起始容量识别地址以最新设置的所述地址增量的递增变化遍历过flash的不同块。
39.优选地,步骤s1所述的第一批测试数据的大小为256字节时,先将256个字节的第一批测试数据平均分成64组4字节的测试数据,每组是1个字的测试数据,其中,4个字节等于1个字,每组的1个字的测试数据方便flash外部的主控模块读写,因为主控模块,包括spi接口控制模块、或集成spi接口控制模块的主控芯片可以以字为单位进行比特位的处理操作;对256个字节的第一批测试数据平均分成64组的同时,相应地在同一所述待测块空间内划分出64个连续排列的子区块,分别为划分的每组测试数据分配4字节的地址,使得每个子区块都分配到对应的地址值;然后将每个字的测试数据分别写入对应子区块的地址处。在这里的写操作按地址从低到高的顺序执行。在后续的读操作中,这一批已经平均分为64组的测试数据可以按照时间先后顺序被逐组地读取出来。
40.需要说明的是,在本实施例中,前述第一批测试数据和前述第二批测试数据都被配置为以4个字节地址为单位对齐的形式存储在flash内,则所述第一批测试数据和所述第二批测试数据可以是被写入flash内部的存储阵列中。
41.所述步骤s1中配置测试数据为当前设置的初始块空间内的特定字节的地址的方式是:在当前设置的初始块空间内,将当前操作的每4个字节的最低位字节的地址值作为当前操作的4个字节的测试数据,其中,所述的当前操作是每次发起对初始块空间的写操作或读操作,而被读写操作的初始块空间在所述步骤s3判断到满足所述预设匹配条件之前是不被更新的,包括其对应的标准起始地址,以使得每次操作的4个字节的第一批测试数据都是相同的,但与第二批测试数据是不同的;但是,所述初始块空间在所述步骤s3判断到满足所
述预设匹配条件之后,其内部存储的第一批测试数据被所述待测试块空间内存储的第二批测试数据更新。
42.所述步骤s2中配置测试数据为当前设置的待测块空间内的特定字节的地址的方式是:在当前设置的待测块空间内,将当前操作的每4个字节的最低位字节的地址值作为当前操作的4个字节的测试数据,其中,所述的当前操作是每次发起对待测块空间的写操作或读操作,而每次被读写操作的待测块空间是被更新的,包括其对应的起始容量识别地址,以使得每次操作的4个字节的测试数据都是不同的;但在所述步骤s3判断到满足所述预设匹配条件之前所述初始块空间是保持不变。本实施例在起始容量识别地址不断更新的基础上,控制每次写入最新的待测块空间的一批测试数据是不同的,保证每次读写比对判断都采用新的空间进行新的测试数据,以有效地与写入所述初始块空间内的第一批测试数据进行比对,提高容量识别的准确性。
43.需要说明的是,所述将当前操作的每4个字节的最低位字节的地址值作为当前操作的4个字节的测试数据的一种示例性实施方式包括:在flash的内存空间中,设置8个顺序地址依次为0x03、0x04、0x05、0x06、0x07、0x08、0x9、0x0a;本实施例以4个字节的测试数据为单位配置测试数据,按照低到高的顺序,地址0x03至地址0x06存储测试数据的第一个字;地址0x07至地址0x0a存储同一批测试数据的第二个字;其中,测试数据的第一个字,以其最低位字节的地址值0x03作为测试数据,即组成0x00000003;则按照小端模式低地址填低位数据,高地址填高位数据,由0x00000003可获知:0x03地址值为0x03,0x04至0x06的地址值都为0。同理,测试数据的第二个字,以其最低位字节的地址值0x07作为测试数据,也就是0x00000007;则按照小端模式低地址填低位数据和高地址填高位数据的存储模式可知:0x07地址值为0x07,0x08至0x0a的地址值都为0。
44.按照前述步骤s1至步骤s5的实施方式,结合图2的flash空间的地址值可知:第一次执行至步骤s4,并由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00020000(等于128k字节)处的待测块空间读写测试成功,进而确定当前识别到的flash的有效容量为128k字节/2=64k字节。其中,标准起始地址是0。
45.第一次执行完步骤s5之后,若在由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00040000(等于256k字节)处的待测块空间读写测试成功,进而确定当前识别到的flash的有效容量为256k字节/2=128k字节;其中,第一次获取到的地址增量等于128k字节,即0x00020000。
46.第二次执行完步骤s5之后,若在由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00080000(等于512k字节)处的待测块空间读写测试成功,进而确定当前识别到的flash的有效容量为512k字节/2=256k字节。其中,最新更新出的起始容量识别地址0x00080000是0x00020000与2的2次幂的乘积。
47.第三次执行完步骤s5之后,若在由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00100000(等于1m字节)处的待测块空间读写测试成功,进而确定当前识别到的flash的有效容量为1m字节/2=512k字节。其中,最新更新出的起始容量识别地址0x00100000是0x00020000与2的3次幂的乘积。
48.第四次执行完步骤s5之后,若在由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00200000(等于2m字节)处的待测块空间读写测试成功,进而确定当前
识别到的flash的有效容量为2m字节/2=1m字节。其中,最新更新出的起始容量识别地址0x00200000是0x00020000与2的4次幂的乘积。
49.第五次执行完步骤s5之后,若在由步骤s4判断到满足所述预设匹配条件时,确定起始容量识别地址0x00400000(等于4m字节)处的待测块空间读写测试成功,进而确定当前识别到的flash的有效容量为4m字节/2=2m字节。其中,最新更新出的起始容量识别地址0x00400000是0x00020000与2的5次幂的乘积。
50.需要补充的是,所述起始容量识别地址递增至flash的最大地址时,则变化回地址0x00000000,实现所述第二批测试数据覆盖所述初始块空间内的第一批测试数据,然后确定识别出flash的有效总容量。
51.综上,本实施例让初始确定的起始容量识别地址相对于标准起始地址的偏移量以倍数递增的方式变化更新,使所述起始容量识别地址以最新设置的所述地址增量的递增变化遍历过flash的不同块或所有起容量识别作用的地址。
52.前述步骤s1至步骤s5,首先在flash内设置一个初始块空间作为存储参考数据的块空间,用于参与地址递增变化的待测块空间内的数据对比,进而在此基础上对所述起始容量识别地址进行地址递增更新的过程中完成flash的多个存储空间的容量的识别检测,与现有技术相比,不用考虑flash的特定id型号或特定规格文件的正确与否,而是使用一些通用的flash命令参数;前述实施例是使用涉及到具体字节数的命令参数,每次对所述起始容量识别地址进行地址递增后,进行的数据对比中都是将预先写入块空间的数据按预配置数量个字节读取出来进行比较,识别出flash当前的有效容量信息,即包括前述的flash的有效总容量。这一容量识别方法能够兼容不同类型的flash,保证当前识别出的一容量对于不同类型flash存储器具备硬件适应性。
53.在前述实施例中,每次执行步骤s5时,更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域所允许容纳的最大数据容量大于或等于flash的擦除命令一次所擦除的最大数据容量,更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域所允许容纳的最大数据容量大于所述待测块空间的容量;更新前的起始容量识别地址与所述标准起始地址之间的地址区域所允许容纳的最大数据容量大于flash的擦除命令一次所擦除的最大数据容量,更新前的起始容量识别地址与所述标准起始地址之间的地址区域所允许容纳的最大数据容量大于所述初始块空间的容量;其中,更新前的起始容量识别地址处设置的所述待测块空间的容量与更新后的起始容量识别地址处设置的所述待测块空间的容量相等。从而步骤s5执行的次数越多,更新后的起始容量识别地址与更新前的起始容量识别地址的地址差值越大,使得起始容量识别地址及其对应的块空间所覆盖的地址空间范围越大,且保证每一次新扩展遍历的地址区域预留有部分冗余区域不需被flash擦除;且保证不同起始地址处的块所占用的空间之间是存在无存储数据的空闲区域。
54.在前述实施例中,所述预配置数量个字节是小于或等于nor快闪存储器对应配置的擦除命令一次所擦除的最小数据容量,所述预配置数量个字节也是小于nand快闪存储器对应配置的擦除命令一次所擦除的最小数据容量;其中,所述初始块空间的容量大于或等于预配置数量个字节,所述待测块空间的容量大于或等于预配置数量个字节;flash包括nor快闪存储器和nand快闪存储器。使得前述的标准起始地址处的块内写入的预配置数量个字节和所述待测块空间写入的预配置数量个字节都支持被flash的任意擦除命令完全擦
除,从而不用将所述待测块空间写满即可执行容量识别。保证识别效率。
55.需要注意的是,nor快闪存储器对应配置的擦除命令的最小擦除单位包括256字节、4k字节、32k字节、64k字节,nand快闪存储器对应配置的擦除命令仅限于以128k字节为最小擦除单位;优选地,所述初始块空间和所述待测试块空间都设置为256;第一次执行至所述步骤s1时,标准起始地址是0;第一次执行至所述步骤s2时,起始容量识别地址是0x20000,等效于128k字节。本实施例将所述初始块空间的容量和所述待测块空间的容量都定为256字节,使得所述初始块空间和所述待测块空间都能被flash的任意擦除命令完全擦除,减小上一次写入同一块的数据对当前从同一块读取出的数据的影响,而且,本实施例中将起始容量识别地址配置为128k字节的倍数,能够防止所述flash擦除越过更新后的起始容量识别地址与更新前的起始容量识别地址之间的地址区域。本领域技术人员将所述起始容量识别地址理解为在对应的块内作为读写操作的起始地址。
56.前述实施例公开的容量识别方法,无须读flash id,也无须读sfdp表,只要flash芯片的基本功能(状态寄存器以及空间读写)能正常执行访问,则可以实现。对于后续新增的flash型号,软件也无须变动,兼容性强,减少了软件的后期维护工作量,也适用于芯片boot rom固化软件系统。
57.在执行所述步骤s1之前,还包括:读取flash内置寄存器的低八位上存储的二进制数,并在读缓存空间内获取到硬件块保护标志位上存储的二进制数;值得注意的是,本实施例读取的flash内置寄存器在nor快闪存储器中是指状态寄存器,读取的flash内置寄存器在nand快闪存储器中是指配置寄存器;状态寄存器和配置寄存器都在相同的位上设置硬件块保护标志位;当判断到硬件块保护标志位上存储的二进制数为1时,则在写使能所述flash内置寄存器后,在读缓存空间内将硬件块保护标志位对应的二进制数配置为0,再在写指令的控制下用二进制数0将所述flash内置寄存器的硬件块保护标志位清零,直到所述flash内置寄存器的硬件块保护标志位所存储的二进制数被读取为0;当判断到硬件块保护标志位上存储的二进制数为0时,确定所述flash当前不处于硬件保护状态,进而确定解除所述flash的内存空间的块保护,然后开始执行所述步骤s1。
58.作为一种实施方式,先执行nor flash访问模式下的块空间的解锁操作,再执行nand flash访问模式下的块空间的解锁操作。具体地,包括以下步骤:步骤401、利用主控芯片的总线控制器将flash配置为nor flash访问模式。然后进入步骤步骤402。
59.步骤402、总线控制器向flash发送写使能指令,使能状态寄存器(属于nor flash访问模式下存在指令联系的flash内置寄存器)的块保护配置位的写操作。然后进入步骤403。
60.步骤403、总线控制器向flash发送读指令,读取状态寄存器的低八位bit[7:0]上存储的二进制值并缓存至主控芯片内部的sram。然后进入步骤404。
[0061]
步骤404、判断所述状态寄存器的硬件块保护标志位bit[7]是否为二进制1,是则表示flash的块空间写禁止有效,不允许外部对flash的块空间执行写操作,进而表示所述flash的内存空间处于块保护状态下,然后进入步骤405;否则表示flash的块空间写禁止无效,表示nor flash访问模式下的flash不处于硬件保护状态,然后进入步骤406。
[0062]
步骤405、将步骤403缓存至主控芯片内部的sram的bit[7]对应存储的二进制数清
零,并保持其余位bit[6:0]不变,以在sram内写入更新所述状态寄存器的低八位bit[7:0]对应存储的二进制值,再通过发送写指令将更新后的低八位bit[7:0]对应存储的二进制值写入状态寄存器,并按照对应型号flash的数据手册规定的写周期循环发送0x05指令,读取所述状态寄存器的wip(write in progress)位,直到wip位变为0,停止发送0x05指令,表示当前向所述状态寄存器的写入操作完成,即更新后的低八位bit[7:0]对应存储的二进制值已经成功写入状态寄存器对应的位上,并能够被正常读取出来。其中,所述状态寄存器的wip(write in progress)位是所述状态寄存器的bit[0]。
[0063]
步骤406、利用主控芯片的总线控制器将flash由nor flash访问模式配置为nandflash访问模式。然后进入步骤407。
[0064]
步骤407、总线控制器向flash发送写使能指令,使能配置寄存器(属于nand flash访问模式下存在指令联系的flash内置寄存器)的块保护配置位的写操作。然后进入步骤408。
[0065]
步骤408、总线控制器向flash发送读指令,再发送配置寄存器的块保护配置位的起始地址0xa0,读取起始地址0xa0处的低八位bit[7:0]上存储的二进制值并缓存至主控芯片内部的sram。然后进入步骤409。其中,配置寄存器的低八位bit[7:0]是属于配置寄存器设置的块保护配置位。
[0066]
步骤409、判断所述配置寄存器的起始地址0xa0处的硬件块保护标志位bit[7]是否为二进制1,是则表示flash的块空间写禁止有效,不允许外部对flash的块空间执行写操作,进而表示所述flash的内存空间处于块保护状态下,然后进入步骤410;否则表示flash的块空间写禁止无效,表示nand flash访问模式下的flash不处于硬件保护状态,表示所述flash解除硬件保护流程结束。
[0067]
步骤410、将步骤408缓存至主控芯片内部的sram的bit[7]对应存储的二进制数清零,并保持其余位bit[6:0]不变,以在sram内更新所述起始地址0xa0处的低八位bit[7:0]对应存储的二进制值,再通过发送写指令将更新后的低八位bit[7:0]对应存储的二进制值写入所述配置寄存器设置的块保护配置位(起始地址0xa0处),然后进入步骤411。
[0068]
步骤411、重复执行步骤409至步骤410,直到步骤409再次判断(相对于未开始将bit[7]对应存储的二进制数清零前的状态)到所述配置寄存器的起始地址0xa0处的硬件块保护标志位bit[7]为二进制0,之所以多次判断操作,原因在于flash内置寄存器更新状态需要特定的内部刷新时间。
[0069]
需要补充的是,flash内置寄存器对应的预设访问模式包括nor flash访问模式和nand flash访问模式;flash按类型分为nor闪存存储器和nand闪存存储器;其中,nor flash访问模式是支持访问nor闪存存储器,nand flash访问模式是支持访问nand闪存存储器;在本实施例中,状态寄存器和配置寄存器统称为flash内置寄存器。
[0070]
基于前述实施例的容量识别方法的模块化处理,本发明还公开一种基于flash的容量识别系统,包括flash和总线控制模块,flash包括flash内置寄存器和以块组成的内存空间,其中,flash以块为单位进行数据擦除;总线控制模块用于控制flash执行前述实施例所述容量识别方法,以完成flash的有效容量的识别。该容量识别系统不用考虑flash的特定id型号或特定规格文件的正确与否,而是使用一些通用的flash命令参数;该容量识别系统是使用涉及到具体字节数的命令参数,每次对所述起始容量识别地址地址递增后,进行
的数据对比中都是将预先写入flash内部的块空间的数据按预配置数量个字节读取出来进行比较,识别出flash当前的有效容量信息,这一容量识别系统能够兼容不同类型的flash,保证当前识别出的一容量对于不同类型flash存储器具备硬件适应性。
[0071]
在本申请所提供的实施例中,应该理解到,所揭露的系统、芯片,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜