CN108319433B - 小内存单片机的NOR Flash的存储管理方法 - Google Patents
小内存单片机的NOR Flash的存储管理方法 Download PDFInfo
- Publication number
- CN108319433B CN108319433B CN201810225665.0A CN201810225665A CN108319433B CN 108319433 B CN108319433 B CN 108319433B CN 201810225665 A CN201810225665 A CN 201810225665A CN 108319433 B CN108319433 B CN 108319433B
- Authority
- CN
- China
- Prior art keywords
- sector
- data
- physical
- block
- logical
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Read Only Memory (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种小内存单片机的NOR Flash的存储管理方法,涉及数据处理领域。小内存单片机上集成NOR Flash芯片,所述NOR Flash芯片包括存储模块和执行程序模块,通过构建扇区映射表,执行程序模块实现在存储模块上写入数据、读取数据和空间均衡损耗的存储管理。本发明所述方法提高数据存储的安全性、提高破解NOR Flash数据内容的难度;可恢复原有数据,保证数据存取的可靠性;因具有均衡损耗的功能,延长NOR Flash的使用寿命;上层程序直接读写NOR Flash,无需考虑NOR Flash的擦除操作;写入速度比直接操作NOR Flash快。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种小内存单片机的NOR Flash的存储管理方法。
背景技术
嵌入式系统要保存一些存非易失的数据。POS机内的嵌入式系统也不例外,特别是POS的密钥等敏感数据,不但要求非易失,而且要求高度安全。随着Android的兴起与火爆,使用Android系统的智能POS机应运而生。Android系统主要应用于智能手机与平板电脑等生活消费品,所以当Android系统被用于POS机中,Android系统的安全性受到业内人员的质疑。
为了消除质疑,使用Android系统的智能POS机会安装两颗CPU,一颗为高性能的CPU,用于运行Android系统。另一颗则为低端安全CPU,用于保证重要数据的高度安全。当低端安全CPU检测到机器温度、电压或频率不在预设范围内和/或机器被拆机时,则清除重要数据,从而防止泄漏重要数据。
出于成本考虑,低端安全CPU通常采用单片机,单片机内部集成安全感应器、硬件安全加密模块、SRAM、NOR Flash等器件。智能POS机的重要数据保存在低端安全CPU的NORFlash中。由于低端安全CPU上集成的SRAM与NOR Flash容量比较小,其中,SRAM不大于64K字节,NOR Flash不大于1M字节,难于嵌入一个成熟的文件系统,如:jffs2文件系统。故,现有通常做法是将文件系统拆分后存储在NOR Flash上某个称之为块的存储器单元块上。由于NOR Flash不能像普通磁盘那样实现字节修改,只能以块为单位修改。当对存储在NORFlash的某个块上的数据进行繁擦修改时,必须先将整个块的内容读取入缓存,在缓存中修改内容,然后将整个块中内容全部擦除,最后将修改后的内容从缓存中写入块中。由于NORFlash有一定的使用寿命,每块最大擦写次数是十万次左右,超出了最大擦写次数,存储单元块会出现存储不稳定或存储失效的情况。
故,反复擦写导致NOR Flash使用寿命减少,同时,反复擦写导致NOR Flash存储不稳定或存储失败会带来很大安全隐患。
发明内容
本发明的目的在于提供一种小内存单片机的NOR Flash的存储管理方法,旨在解决现有NOR Flash存储过程中,因反复擦写导致NOR Flash使用寿命减少、安全隐患增加的问题。
从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明所述小内存单片机的NOR Flash的存储管理方法,小内存单片机上集成NOR Flash芯片,所述NOR Flash芯片包括存储模块和执行程序模块,通过构建扇区映射表,执行程序模块实现在存储模块上写入数据、读取数据和空间均衡损耗的存储管理,具体为:
1)初始化管理
初始化NOR Flash芯片并构建扇区映射表;
2)写入数据管理
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,并将要写入的目标数据和目标物理地址存储的数据一起写入新物理地址中,同时将目标逻辑地址与新物理地址的映射关系更新到扇区映射表中,完成写入数据的管理;
3)读取数据管理
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,从目标物理地址中读取要读取的目标数据至输出缓存中,输出输出缓存地址和要读取目标数据的总长度,完成读取数据的管理;
4)空间均衡损耗管理:
在集成所述NOR Flash芯片的小内存单片机空闲时,扫描所述NOR Flash芯片的所有块,并将各个块按擦除次数从小到大排列,如果最大擦除次数的块与最小擦除次数的块的擦除次数均超出预设阀值,则将最小擦除次数的块的数据搬移到最大擦除次数的块中存储。
优选地,所述扇区映射表存储于集成在小内存单片机上的SRAM芯片。
优选地,所述初始化管理,具体为:
ⅰ、初始化NOR Flash芯片上的执行程序模块;
ⅱ、初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
ⅲ、构建扇区映射表
扫描NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区对应的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
ⅳ、判断ⅲ中构建扇区映射表中的逻辑扇区0是否存在对应的物理扇区,如果是,则进入ⅴ;如果否,则进行格式化管理,将NOR Flash芯片的版本号写入逻辑扇区0,然后进入ⅴ;
ⅴ、整理记录写临时状态的物理扇区;
ⅵ、设置至少一个交换块。
更优选地,执行程序模块还负责实现在存储模块上的格式化管理,所述格式化管理具体为:
A1,初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
A2,以块为单位,擦除NOR Flash芯片的整个物理存储空间,具体为:
首先获取任意一个块的擦除次数,然后擦除该块,最后将擦除次数加1后写入该块,当得到的该块的擦除次数为0xFFFFFFFF,则表示进行格式化管理的NOR Flash芯片为新NOR Flash芯片或进行格式化管理的NOR Flash芯片的擦除次数已丢失,将擦除次数置为0,得到格式化后的NOR Flash芯片的存储模块;
A3,重新构建扇区映射表
扫描格式化后的NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区对应的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
A4,将格式化后的NOR Flash芯片的版本号写入逻辑扇区0;
A5,设置至少一个交换块,完成格式化管理。
优选地,所述写入数据管理,具体为:
B1,依据输入的逻辑地址,计算逻辑扇区号;
计算所述逻辑扇区号对应逻辑扇区内的相对偏移,逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小得到的余数;
将要向物理扇区中写入的数据总长度设为H1,将H1拆分为多段数据,每次写入循环仅完成一段数据的写入,每段数据的长度小于等于H2,H2表示物理扇区大小与逻辑扇区内的相对偏移差值;
B2,获取本次循环要向逻辑扇区号对应物理扇区中写入的数据长度h;
B3,根据逻辑扇区号查扇区映射表找出与其对应的物理扇区号,将物理扇区号对应的物理扇区记为原物理扇区;判断所述物理扇区号是否有效,如果是,则根据所述物理扇区号,计算原物理扇区的基址,从原物理扇区的基址中读取与逻辑扇区大小长度相等的数据,并将读取到的数据缓存到临时扇区缓存,进入B4;如果否,将临时扇区缓存全部置为0xFF,进入B4;
B4,将数据长度h的数据作为目标数据,从输入的写缓存中获取目标数据,并将目标数据拷贝到包括临时扇区缓存的基址和逻辑扇区内相对偏移的临时扇区缓存中;
B5,从存储模块中获取任意一个物理空扇区或通过回收脏扇区得到的物理空扇区,记为新扇区;将新扇区的状态置为写临时状态,并将B1中的逻辑扇区号写入到新扇区中;将B4中临时扇区缓存中的数据写入新扇区;将新扇区的状态置为数据有效状态,并将新扇区的物理扇区号,写到扇区映射表中与B1中的逻辑扇区号对应的表项处;同时,将原物理扇区的状态置为脏扇区状态;
B6,输出写缓存地址+本次循环要写入的数据长度h,同时,获取下一次循环要写入的数据长度,进入B7;
B7,判断下一次循环要写入的数据长度是否为零,如果是,则表示已完成目标数据的写入,将写入目标数据的结果返回给请求方;如果否,将逻辑扇区号加1,同时,将下一次循环要写入的数据长度作为要向物理扇区中写入的数据长度h,然后返回B2。
优选地,所述执行程序模块还负责回收脏扇区的管理,具体为:
D1,若不存在脏扇区块链表,则将含有脏扇区但不含空扇区的物理块作为脏物理块;
若存在脏扇区块链表,则直接从脏扇区块链表中获取一个脏物理块;
D2,获取交换块,并对交换块进行擦除数据处理
擦除数据前,先读取交换块的擦除次数,如果擦除次数为无效,则将擦除次数设为所有块擦除次数的平均值,擦除数据后再将平均值作为擦除次数写回到交换块中;
D3,查找脏物理块内是否有数据有效状态的物理扇区,如果是,将数据有效状态的物理扇区记为源物理扇区,则进入D4;如果否,则将脏物理块置为交换块,并返回D1;
D4,从交换块中按序找出一个空物理扇区,将该空物理扇区状态写为写临时状态;将源物理扇区的逻辑扇区号和源物理扇区的数据,写入到该空物理扇区的对应位置,然后,将空物理扇区状态写为数据有效状态,并将空物理扇区的物理扇区号,写到扇区映射表与源物理扇区的逻辑扇区号对应的表项处;同时,将源物理扇区状态写为数据无效状态,返回D3,直至所有源物理扇区的数据全部写完为止。
优选地,所述读取数据管理,具体为:
C1,依据输入的逻辑地址,计算逻辑扇区号;
所述逻辑扇区号对应逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小的余数;
将要从物理扇区中读取的数据总长度设为L1,将L1拆分为多段数据,每次读取循环仅完成一段数据的读取,每段数据的长度小于等于L2,L2表示物理扇区大小与逻辑扇区内的相对偏移差值;
C2,获取本次循环要从逻辑扇区号对应物理扇区中读取的数据长度l;
C3,在扇区映射表的基础上,根据逻辑扇区号查找出与逻辑扇区号对应的物理扇区号;判断所述物理扇区号是否有效,如果是,则进入C4;如果否,则进入C5;
C4,根据物理扇区号,计算出该物理扇区的基址;根据物理扇区的基址和逻辑扇区内相对偏移,读取本次循环要读取的数据长度并输出到缓存中,进入C6;
C5,将本次循环要读取的数据长度L的输出缓存设为0xFF;
C6,输出缓存地址+本次循环要读取的数据长度l,同时,获取下一次循环要读取的数据长度,进入C7;
C7,判断下一次循环要读取的数据长度是否为零,如果是,则表示已完成目标数据的读取,将读取到的目标数据返回给请求方;如果否,逻辑扇区号加1,同时,将下一次循环要读取的数据长度作为要读取的目标数据总长度,然后返回C2。
优选地,所述空间均衡损耗管理,具体为:
E1,扫描所有块的擦除次数,将各个物理块号按其擦除次数从小到大进行排列,得到链表;
E2,从链表的头部取一个元素作为A,从链表的尾部一个元素作为B;
E3,依次判断A对应的块和B对应的块是否为空元素,
如果A对应的块和B对应的块中任意一个为空元素,则空间均衡损耗管理结束;
如果均不为空,则进入E4;
E4,判断A对应的块和B对应的块的擦除次数是否均大于预定阀值:
如果是,则进入步骤E5;
如果否,则表明A对应的块和B对应的块中任意一个的擦除次数不大于预定阀值,空间均衡损耗管理结束;
E5,判断A对应的块是否为数据交换块;
如果是,则从链表的头部取与元素A相邻的另一个元素替代A,并返回E3;如果否,则进入E6;
E6,判断B对应的块是否为数据交换块;
如果是,则进入E7;
如果否,则将B对应的块中所有数据有效状态的扇区,写入到数据交换块中,然后更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值,最后进入E7;
E7,擦除B对应的块,将B对应的块中所有扇区状态标记为空扇区状态;
将A对应的块中所有数据有效状态的扇区,写入到B对应的块中;写完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;
将A对应的块标记为数据交换块,进入E8;
E8,判断B对应的块里,是否还有空扇区状态的扇区;
如果是,则进入E9;
如果否,则从链表的尾部取与元素B相邻的另一个元素替代B,然后返回E3;
E9,从链表的头部取下一个元素作为A,然后判断A是否为空元素;
如果是,空间均衡损耗管理结束,函数返回;
如果否,则进入E10;
E10,将A对应的块中扇区状态为数据有效状态的扇区,逐一写入到B对应块的空扇区中,写入操作完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;然后判断A对应块中的有效状态的扇区是否已全部写入到B对应的块中;如果是,返回E8;如果否,则返回E9。
优选地,构建扇区映射表,具体为:
获取任意一个物理扇区,物理扇区中存储的内容包括:物理扇区存储的数据、与该物理扇区对应的逻辑扇区编号、物理扇区的状态和物理扇区的擦除次数;
设定任意一个物理扇区的大小a和NOR Flash芯片的最小写入单位b,在a和b的基础上,获取该物理扇区存储的数据的大小为c,c=a-b;在c的基础上,获取该物理扇区上的最大扇区号d,d=c/a,依据最大扇区号得到表示任意一个物理扇区所需要占用的字节数e;最后,获取扇区映射表需要占用SRAM空间M,M=d×e/f,f表示扇区数;
物理扇区的状态包括空扇区状态、写临时状态、数据有效状态、保留状态和数据无效状态。
优选地,输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,具体为:
F1,获取逻辑扇区号
逻辑地址÷逻辑扇区大小后所得商中的整数即为逻辑扇区号;
F2,获取物理扇区号
扇区映射表中,与F1中所述逻辑扇区号对应的表项值为物理扇区号;
F3,获取物理地址
物理地址=物理存储空间的基地址+物理扇区号×物理扇区大小+逻辑地址mod逻辑扇区大小,其中,逻辑地址mod逻辑扇区大小表示:逻辑地址÷逻辑扇区大小后所得商中的余数。
本发明的有益效果是:
1、本发明所述方法通过动态映射物理地址与逻辑地址,提高数据存储的安全性,提高破解NOR Flash数据内容的难度。
2、写时掉电,可恢复原有数据,保证数据存取的可靠性。
3、具有均衡损耗的功能,延长NOR Flash的使用寿命。
4、方便NOR Flash块上层的程序操作NOR Flash,上层程序直接读写NOR Flash,无需考虑NOR Flash的擦除操作。
5、本发明所述方法的写入速度比直接操作NOR Flash稍快。因为直接操作NORFlash的写入操作流程是:读取NOR Flash块内容到块缓存→修改块缓存→擦除NOR Flash块→块缓存回写到NOR Flash块。本发明将块划分为了扇区,扇区的大小比块的大小要小许多,故写入速度要快。
附图说明
图1是物理扇区划分的结构示意图;
图2是逻辑地址转换为物理地址的转换关系示意图,N为最大扇区号。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
所述SRAM英文全称为Static RAM,中文全称为静态随机存取存储器。
NOR Flash主要特点:容量小,一般在1~16M字节左右;带有通用的SRAM接口功能,容易做到芯片内执行;断电后,数据不丢失,数据可保存10~100年;不存在NAND Flash的坏块问题;最大擦写次数为一般为10~100万次;特定的擦除指令序列,以块为单位。擦除后,存储单元为1;特定的写入指令序列,以字节或字为单位。存储单元只能由1写成0。因此,写前必须先擦除;
实现本申请所述小内存单片机的NOR Flash的存储管理方法的安全CPU的特性如下:32-bit RISC Core(ARMv7-M);72Mh主频;片内64K字节随机加扰SRAM;片内512K字节安全NOR Flash。擦除块大小为:4K字节,写入以字(4字节)为单位。
实现本申请所述小内存单片机的NOR Flash的存储管理方法的执行程序,片内的NOR Flash使用空间大致划分如下:200K字节用于芯片内执行的程序,300K字节给NORFlash存储管理模块。该执行程序,除了存储管理模块,使用到的还有串口通讯模块、IC卡模块、非接模块、磁卡模块与电容屏模块等模块,模块众多,使用jffs2等专用于NOR Flash的文件系统,是不可能。
实施例
本实施例所述小内存单片机的NOR Flash的存储管理方法,小内存单片机上集成NOR Flash芯片,所述NOR Flash芯片包括存储模块和执行程序模块,通过构建扇区映射表,执行程序模块实现在存储模块上写入数据、读取数据和空间均衡损耗的存储管理;具体为:
1)初始化管理
初始化NOR Flash芯片并构建扇区映射表;
2)写入数据管理:
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,并将要写入的目标数据和目标物理地址存储的数据一起写入新物理地址中,同时将目标逻辑地址与新物理地址的映射关系更新到扇区映射表中,完成写入数据的管理;
3)读取数据管理:
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,从目标物理地址中读取要读取的目标数据至输出缓存中,输出输出缓存地址和要读取目标数据的总长度,完成读取数据的管理;
4)空间均衡损耗管理:
在集成所述NOR Flash芯片的小内存单片机空闲时,扫描所述NOR Flash芯片的所有块,并将各个块按擦除次数从小到大排列,如果最大擦除次数的块与最小擦除次数的块的擦除次数均超出预设阀值,则将最小擦除次数的块的数据搬移到最大擦除次数的块中存储。
更详细的解释说明为:
(一)所述扇区映射表存储于集成在小内存单片机上的SRAM芯片。
构建扇区映射表,具体为:
获取任意一个物理扇区,物理扇区中存储的内容包括:物理扇区存储的数据、与该物理扇区对应的逻辑扇区编号、物理扇区的状态和物理扇区的擦除次数;
设定任意一个物理扇区的大小a和NOR Flash芯片的最小写入单位b,在a和b的基础上,获取该物理扇区存储的数据的大小为c,c=a-b;在c的基础上,获取该物理扇区上的最大扇区号d,d=c/a,依据最大扇区号得到表示任意一个物理扇区所需要占用的字节数e;最后,获取扇区映射表需要占用SRAM空间M,M=d×e/f,f表示扇区数;
物理扇区的状态包括空扇区状态、写临时状态、数据有效状态、保留状态和数据无效状态。
本申请中,为了均衡NOR Flash每块的擦除次数,存储管理模块提供NOR Flash芯片读写接口的地址,以下称为:逻辑地址;不能直接读写NOR Flash芯片的存储块实际地址(以下称为:物理地址。如:读写接口中逻辑地址1,可能对应物理地址1,也可能对应物理地址100,也可能对应其它的物理地址。其中,逻辑地址与物理地址均以字节为单位。也就是数据并不存取在NOR Flash芯片上的某个固定位置,而是可变的位置。为了达到此目的:引入了扇区映射表概念。
扇区映射表实际是SRAM中的一段内存。为了节省内存,执行程序模块以扇区为单位来管理,实现逻辑地址到物理地址的转换。
这时假定物理扇区的大小为512字节(按实际需求可使用其它值),实现本申请的CPU的NOR Flash芯片的最小写入单位是4字节,因此使用4字节(要依据实际情况进行增减)用于表示物理扇区的状态及其对应的逻辑扇区号,则每个物理扇区实际能存储的数据大小为:512-4=508字节,将其大小作为逻辑扇区大小。最大扇区号为:300K÷512=600,因此使用12位的数据足够表示所有扇区,则在扇区映射表需要占用SRAM空间为:600×12÷8=900字节,扇区表中每一项的大小都是12位。每个物理扇区中存储内容见图1。扇区映射表虽然浪费2400字节的flash存储空间,而延长了NOR Flash芯片的寿命,在写数据时掉电可恢复原来的数据,提升了数据存取的稳定性。
扇区状态4位数据的值,考虑到存储单元只能由1写成0,与写数据时掉电可恢复原来的数据功能,本申请将物理扇区的状态设计如下:
空扇区状态(0xF):可用于写入数据。
写临时状态(0xE):写数据时的临时状态,写数据成功后,修改为0xC状态
数据有效状态(0xC):该扇区中保存着有用的数据。
保留状态(0x08):此状态没有使用,保留以后使用。
数据无效状态(0):也称作脏扇区,空扇区不足时,回收扇区。
考虑到均衡NOR Flash每块的擦除次数,则必须将每块的擦除次数保存起来,后续程序可依据擦除次数,将每块擦除次数的差值,控制在设定的范围内(具体做法看后面的描述)。参照图1因为实现本文方案的CPU的NOR Flash擦除块大小为:4K字节,则每块可分为:4K÷512=8个物理扇区,而每个物理扇区留了4字节表示逻辑扇区号与扇区状态,12位逻辑扇区号与4位扇区状态也才占用了2字节,还有2字节没有使用。因此使用每个块的第一与第二个物理扇区剩下的2字节,合起来表示该块的擦除次数,4字节足够表示100万次的擦除次数。
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,具体为:
F1,获取逻辑扇区号
逻辑地址÷逻辑扇区大小后所得商中的整数即为逻辑扇区号;
F2,获取物理扇区号
扇区映射表中,与F1中所述逻辑扇区号对应的表项值为物理扇区号;
F3,获取物理地址
物理地址=物理存储空间的基地址+物理扇区号×物理扇区大小+逻辑地址mod逻辑扇区大小,其中,逻辑地址mod逻辑扇区大小表示:逻辑地址÷逻辑扇区大小所得商中的余数。
下面举个逻辑地址转换为物理地址的例子:图2中的N的最大扇区号,实现本文方案的实例为600。要从NOR Flash中,读取逻辑地址为1000的数据,读取一个字节。
1、逻辑扇区号为:1=1000÷508。
2、因为逻辑扇区号为1,所以查看扇区映射表中第1个表项值为0。也就是物理扇区号为0。
3、物理地址为:492=0+0×512+1000mod508
存储管理模块只要返回物理地址为492的Flash数据便可。依此类推。
(二)关于初始化管理
所述初始化管理,具体为:
ⅰ、初始化NOR Flash芯片上的执行程序模块;
ⅱ、初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
ⅲ、构建扇区映射表
扫描NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
具体为:扫描NOR Flash芯片上的存储模块的存储空间,顺序读取每个物理扇区对应的逻辑扇区号和物理扇区的扇区状态,将扇区状态为数据有效状态的物理扇区号填入扇区映射表中对应其逻辑扇区号的表项中。在扇区映射表构建过程中,还记录空扇区个数、脏扇区个数和写临时状态的物理扇区号,同时,将保留状态的物理扇区置为脏扇区,并将脏扇区个数加1。如NOR Flash芯片上存储模块的内存充足,则将含有空扇区的块按块的擦除次数由小到大排列形成空块链表存储。如NOR Flash芯片上存储模块上没有空扇区,则将含有脏扇区的块按块的擦除次数由小到大形成脏块链表存储,以便写入数据管理时使用。
ⅳ、判断ⅲ中构建扇区映射表中的逻辑扇区0是否存在对应的物理扇区,如果是,则进入ⅴ;如果否,则进行格式化管理,将NOR Flash芯片的版本号写入逻辑扇区0,然后进入ⅴ;
逻辑扇区0必须存在一个物理扇区或NOR Flash芯片的版本号与逻辑扇区0对应,用以判断NOR Flash芯片的存储模块是否已格式化过,没有,则需要格式化。
ⅴ、整理记录写临时状态的物理扇区;
具体为:先获取写临时状态物理扇区的逻辑扇区号,查看扇区映射表中与该逻辑扇区号对应的表项值是否存在,如果是,则将写临时状态物理扇区的状态置为脏扇区,脏扇区个数加1;如果否,则将该写临时状态物理扇的状态置为数据有效状态,并将数据有效状态的物理扇区号和扇区状态填入与写临时状态物理扇区的逻辑扇区号对应的表项中;
ⅵ、设置至少一个交换块。
在回收脏扇区处理和空闲均衡损耗管理中,将要回收物理块中处于数据有效状态的物理扇区数据搬移到交换块中存储,搬移完成后,则擦除要回收物理块中的数据并将要回收物理块标记为交换块。
(三)关于格式化管理
执行程序模块还负责实现在存储模块上的格式化管理,所述格式化管理具体为:
在新NOR Flash芯片上第一次运行存储模块和执行程序模块时,要将NOR Flash芯片的物理存储空间擦除。要清除NOR Flash芯片上所有保存的数据且不留痕迹时,则选择格式化管理。
A1,初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
A2,以块为单位,擦除NOR Flash芯片的整个物理存储空间,具体为:
首先获取任意一个块的擦除次数,然后擦除该块,最后将擦除次数加1后写入该块,当得到的该块的擦除次数为0xFFFFFFFF,则表示进行格式化管理的NOR Flash芯片为新NOR Flash芯片或进行格式化管理的NOR Flash芯片的擦除次数已丢失,将擦除次数置为0,得到格式化后的NOR Flash芯片的存储模块;
A3,重新构建扇区映射表
扫描格式化后的NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区对应的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
A4,将格式化后的NOR Flash芯片的版本号写入逻辑扇区0;
A5,设置至少一个交换块,完成格式化管理。
(四)关于写入数据管理
所述写入数据管理,具体为:
B1,依据输入的逻辑地址,计算逻辑扇区号;
计算所述逻辑扇区号对应逻辑扇区内的相对偏移,逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小得到的余数;
将要向物理扇区中写入的数据总长度设为H1,将H1拆分为多段数据,每次写入循环仅完成一段数据的写入,每段数据的长度小于等于H2,H2表示物理扇区大小与逻辑扇区内的相对偏移差值;
B2,获取本次循环要向物理扇区中写入的数据长度h;
B3,根据逻辑扇区号查扇区映射表找出与其对应的物理扇区号,将物理扇区号对应的物理扇区记为原物理扇区;判断所述物理扇区号是否有效,如果是,则根据所述物理扇区号,计算原物理扇区的基址,从原物理扇区的基址中读取与逻辑扇区大小长度相等的数据,并将读取到的数据缓存到临时扇区缓存,进入B4;如果否,将临时扇区缓存全部置为0xFF,进入B4;其中,原物理扇区号无效,表示逻辑扇区号没有数据,无需读取原物理扇区的数据,直接将缓存置为:0xFF,接着B3之后的操作;
B4,将数据长度h的数据作为目标数据,从输入的写缓存中获取目标数据,并将目标数据拷贝到包括临时扇区缓存的基址和逻辑扇区内相对偏移的临时扇区缓存中;
B5,从存储模块中获取任意一个物理空扇区或通过回收脏扇区得到的物理空扇区,记为新扇区;将新扇区的状态置为写临时状态,并将B1中的逻辑扇区号写入到新扇区中;将B4中临时扇区缓存中的数据写入新扇区;将新扇区的状态置为数据有效状态,并将新扇区的物理扇区号,写到扇区映射表中与B1中的逻辑扇区号对应的表项处;同时,将原物理扇区的状态置为脏扇区状态;
在B5中,如果存在空扇区块链表,则直接从链表中取一个空扇区便可,省去扫描所有的物理扇区。
B6,输出写缓存地址+本次循环要写入的数据长度h,同时,获取下一次循环要写入的数据长度,进入B7;
B7,判断下一次循环要写入的数据长度是否为零,如是,则表示已完成目标数据的写入,将写入目标数据的结果返回给请求方;如果否,逻辑扇区号加1,同时,将下一次循环要写入的数据长度作为本次循环要向物理扇区中写入的数据长度h,然后返回B2。
将B1中的逻辑扇区号加1,作为下一次循环要写入的逻辑扇区号,即是:下一次循环使用的逻辑扇区号,为本次循环的逻辑扇区号加1,是指向下一个逻辑扇区。
上述的扇区状态能直接写入,利用了NOR Flash芯片的写入数据管理,只能将对应的存储块由1变为0,而不能由0变为1的特性。存储块要从由0变为1,只能通过擦除块操作。因此扇区状态可以从:空扇区状态(0xF)=》写临时状态(0xE)=》数据有效状态(0xC)=》数据无效状态(0)。逆向是不可行的。当空扇区使用完后,则物理存储区域中,会存在数据无效状态的物理扇区,需要通过擦除块的方式,才能将数据无效状态的物理扇区改变为空扇区。但不能直接擦除块,否则块中的数据有效状态的扇区的数据将会丢失,这是不允许的。必须有合理的回收脏扇区。
(五)关于回收脏扇区的管理
所述执行程序模块还负责回收脏扇区的管理,具体为:
D1,若不存在脏扇区块链表,则将含有脏扇区但不含空扇区的物理块作为脏物理块;
若存在脏扇区块链表,则直接从脏扇区块链表中获取一个脏物理块;
存在脏扇区块链表省去搜索所有的物理扇区;
D2,获取交换块,并对交换块进行擦除数据处理
擦除数据前,先读取交换块的擦除次数,如果擦除次数为无效,则将擦除次数设为所有块擦除次数的平均值,擦除数据后再将平均值作为擦除次数写回到交换块中;
因为交换块是预留的,所以无需查找。
D3,查找脏物理块内是否有数据有效状态的物理扇区,如果是,将数据有效状态的物理扇区记为源物理扇区,则进入D4;如果否,则将脏物理块置为交换块,并返回D1;
D4,从交换块中按序找出一个空物理扇区,将该空物理扇区状态写为写临时状态;将源物理扇区的逻辑扇区号和源物理扇区的数据,写入到该空物理扇区的对应位置,然后,将空物理扇区状态写为数据有效状态;并将空物理扇区的物理扇区号,写到扇区映射表与源物理扇区的逻辑扇区号对应的表项处;同时,将源物理扇区状态写为数据无效状态,返回D3,直至所有源物理扇区的数据全部写完为止。
(六)关于读取数据管理
所述读取数据管理,具体为:
C1,依据输入的逻辑地址,计算逻辑扇区号;
所述逻辑扇区号对应逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小的余数;
将要从逻辑扇区号对应的物理扇区中读取的数据总长度设为L1,将L1拆分为多段数据,每次读取循环仅完成一段数据的写入,每段数据的长度小于等于L2,L2表示物理扇区大小与逻辑扇区内的相对偏移差值;
C2,获取本次循环要从逻辑扇区号对应物理扇区中读取的数据长度l;
C3,在扇区映射表的基础上,根据逻辑扇区号查找出与逻辑扇区号对应的物理扇区号;判断所述物理扇区号是否有效,如果是,则进入C4;如果否,则进入C5;
C4,根据物理扇区号,计算出该物理扇区的基址;根据物理扇区的基址和逻辑扇区内相对偏移,读取本次循环要读取的数据长度并输出到缓存中,进入C6;
C5,将本次循环要读取的数据长度L的输出缓存设为0xFF;逻辑扇区号对应的物理扇区号无效,表示该逻辑扇区号数据为空数据,而flash擦除后,空数据为0xFF。这里将输出缓存设为0xFF,相当于从空物理扇区读取的数据。
因为没有对应的物理扇区号,而NOR Flash擦除块后,数据变为0xFF;
C6,输出缓存地址+本次循环要读取的数据长度l,同时,获取下一次循环要读取的数据长度,进入C7;
C7,判断下一次循环要读取的数据长度是否为零,如果是,则表示已完成目标数据的读取,将读取到的目标数据返回给请求方;如果否,逻辑扇区号加1,同时,将下一次循环要读取的数据长度作为要读取的目标数据总长度,然后返回C2。
逻辑扇区号加1作为下一次循环的逻辑扇区号,即下一次循环使用的逻辑扇区号,为本次循环的逻辑扇区号加1,也就是指向下一个逻辑扇区。
(七)关于空间均衡损耗管理
所述空间均衡损耗管理,具体为:
经过长时间的读写NOR Flash芯片后,可能会存在某些块内的扇区全部为数据有效状态的扇区,但上层很少更新该块中的数据,或只是读取该块中的数据,将该类块称为冷数据块,冷数据块的擦除次数要明显小于别的块,导致损耗不均衡。在本申请中,在CPU空闲时,扫描NOR Flash芯片的所有块,按擦除次数从小到大排列,最大擦除次数的块与最小擦除次数的块的擦除次数是否超出预设阀值(暂定为:1000),如果超出了预设阀值,则最小擦除次数的块的数据搬移到最大擦除次数的块中存储。流程如下:
空间均衡损耗管理的流程如下:
E1,扫描所有块的擦除次数,将各个物理块号按其擦除次数从小到大进行排列,得到链表;
E2,从链表的头部取一个元素作为A,从链表的尾部一个元素作为B;
E3,依次判断A对应的块和B对应的块是否为空元素,
如果A对应的块和B对应的块中任意一个为空元素,则空间均衡损耗管理结束;
如果均不为空,则进入E4;
E4,判断A对应的块和B对应的块的擦除次数是否均大于预定阀值:
如果是,则进入步骤E5;
如果否,则表明A对应的块和B对应的块中任意一个的擦除次数不大于预定阀值,空间均衡损耗管理结束;
E5,判断A对应的块是否为数据交换块;
如果是,则从链表的头部取与元素A相邻的另一个元素替代A,并返回E3;如果否,则进入E6;
E6,判断B对应的块是否为数据交换块;
如果是,则进入E7;
如果否,则将B对应的块中所有数据有效状态的扇区,写入到数据交换块中,然后更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值,最后进入E7;
E7,擦除B对应的块,将B对应的块中所有扇区状态标记为空扇区状态;
将A对应的块中所有数据有效状态的扇区,写入到B对应的块中;写完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;
将A对应的块标记为数据交换块,进入E8;
E8,判断B对应的块里,是否还有空扇区状态的扇区;
如果是,则进入E9;
如果否,则从链表的尾部取与元素B相邻的另一个元素替代B,然后返回E3;
E9,从链表的头部取下一个元素作为A,然后判断A是否为空元素;
如果是,空间均衡损耗管理结束,函数返回;
如果否,则进入E10;
E10,将A对应的块中扇区状态为数据有效状态的扇区,逐一写入到B对应块的空扇区中,写入操作完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;然后判断A对应块中的有效状态的扇区是否已全部写入到B对应的块中;如果是,返回E8;如果否,则返回E9。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
动态映射物理地址与逻辑地址,提高了数据存储的安全性,提高破解NOR Flash的数据内容的难度。
写时掉电,可恢复原有数据,保证了数据存取的可靠性。
具有均衡损耗的功能,延长了NOR Flash的使用寿命。
方便NOR Flash存储管理模块上层的程序操作Flash,上层程序直接读写Flash,而无需考虑Flash的擦除操作。
写入速度会比直接操作Flash稍快一点。因为直接操作Flash的写入操作流程一般是:读取Flash块内容到块缓存→修改块缓存→擦除Flash块→块缓存回写到Flash块。这里将块划分为了扇区,扇区比块的大小要小许多。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (9)
1.一种小内存单片机的NOR Flash的存储管理方法,其特征在于,小内存单片机上集成NOR Flash芯片,所述NOR Flash芯片包括存储模块和执行程序模块,通过构建扇区映射表,执行程序模块实现在存储模块上写入数据、读取数据和空间均衡损耗的存储管理,具体为:
1)初始化管理
初始化NOR Flash芯片并构建扇区映射表;
所述初始化管理,具体为:
ⅰ、初始化NOR Flash芯片上的执行程序模块;
ⅱ、初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
ⅲ、构建扇区映射表
扫描NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区对应的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
ⅳ、判断ⅲ中构建扇区映射表中的逻辑扇区0是否存在对应的物理扇区,如果是,则进入ⅴ;如果否,则进行格式化管理,将NOR Flash芯片的版本号写入逻辑扇区0,然后进入ⅴ;
ⅴ、整理记录写临时状态的物理扇区;
ⅵ、设置至少一个交换块;
2)写入数据管理
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,并将要写入的目标数据和目标物理地址存储的数据一起写入新物理地址中,同时将目标逻辑地址与新物理地址的映射关系更新到扇区映射表中,完成写入数据的管理;
3)读取数据管理
输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,从目标物理地址中读取要读取的目标数据至输出缓存中,输出输出缓存地址和要读取目标数据的总长度,完成读取数据的管理;
4)空间均衡损耗管理:
在集成所述NOR Flash芯片的小内存单片机空闲时,扫描所述NOR Flash芯片的所有块,并将各个块按擦除次数从小到大排列,如果最大擦除次数的块与最小擦除次数的块的擦除次数均超出预设阀值,则将最小擦除次数的块的数据搬移到最大擦除次数的块中存储。
2.根据权利要求1所述存储管理方法,其特征在于,所述扇区映射表存储于集成在小内存单片机上的SRAM芯片。
3.根据权利要求1或2所述存储管理方法,其特征在于,执行程序模块还负责实现在存储模块上的格式化管理,所述格式化管理具体为:
A1,初始化存储模块的全局变量,将全局变量扇区映射表中的每一项设置为无效;
A2,以块为单位,擦除NOR Flash芯片的整个物理存储空间,具体为:
首先获取任意一个块的擦除次数,然后擦除该块,最后将擦除次数加1后写入该块,当得到的该块的擦除次数为0xFFFFFFFF,则表示进行格式化管理的NOR Flash芯片为新NORFlash芯片或进行格式化管理的NOR Flash芯片的擦除次数已丢失,将擦除次数置为0,得到格式化后的NOR Flash芯片的存储模块;
A3,重新构建扇区映射表
扫描格式化后的NOR Flash芯片上的存储模块的所有物理扇区,并将数据有效的物理扇区对应的物理扇区号与逻辑扇区号的映射关系填入扇区映射表中;
A4,将格式化后的NOR Flash芯片的版本号写入逻辑扇区0;
A5,设置至少一个交换块,完成格式化管理。
4.根据权利要求1所述存储管理方法,其特征在于,所述写入数据管理,具体为:
B1,依据输入的逻辑地址,计算逻辑扇区号;
计算所述逻辑扇区号对应逻辑扇区内的相对偏移,逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小得到的余数;
将要向物理扇区中写入的数据总长度设为H1,将H1拆分为多段数据,每次写入循环仅完成一段数据的写入,每段数据的长度小于等于H2,H2表示物理扇区大小与逻辑扇区内的相对偏移差值;
B2,获取本次循环要向逻辑扇区号对应物理扇区中写入的数据长度h;
B3,根据逻辑扇区号查扇区映射表找出与其对应的物理扇区号,将物理扇区号对应的物理扇区记为原物理扇区;判断所述物理扇区号是否有效,如果是,则根据所述物理扇区号,计算原物理扇区的基址,从原物理扇区的基址中读取与逻辑扇区大小长度相等的数据,并将读取到的数据缓存到临时扇区缓存,进入B4;如果否,将临时扇区缓存全部置为0xFF,进入B4;
B4,将数据长度h的数据作为目标数据,从输入的写缓存中获取目标数据,并将目标数据拷贝到包括临时扇区缓存的基址和逻辑扇区内相对偏移的临时扇区缓存中;
B5,从存储模块中获取任意一个物理空扇区或通过回收脏扇区得到的物理空扇区,记为新扇区;将新扇区的状态置为写临时状态,并将B1中的逻辑扇区号写入到新扇区中;将B4中临时扇区缓存中的数据写入新扇区;将新扇区的状态置为数据有效状态,并将新扇区的物理扇区号,写到扇区映射表中与B1中的逻辑扇区号对应的表项处;同时,将原物理扇区的状态置为脏扇区状态;
B6,输出写缓存地址+本次循环要写入的数据长度h,同时,获取下一次循环要写入的数据长度,进入B7;
B7,判断下一次循环要写入的数据长度是否为零,如果是,则表示已完成目标数据的写入,将写入目标数据的结果返回给请求方;如果否,将逻辑扇区号加1,同时,将下一次循环要写入的数据长度作为要向物理扇区中写入的数据长度h,然后返回B2。
5.根据权利要求3所述存储管理方法,其特征在于,所述执行程序模块还负责回收脏扇区的管理,具体为:
D1,若不存在脏扇区块链表,则将含有脏扇区但不含空扇区的物理块作为脏物理块;
若存在脏扇区块链表,则直接从脏扇区块链表中获取一个脏物理块;
D2,获取交换块,并对交换块进行擦除数据处理
擦除数据前,先读取交换块的擦除次数,如果擦除次数为无效,则将擦除次数设为所有块擦除次数的平均值,擦除数据后再将平均值作为擦除次数写回到交换块中;
D3,查找脏物理块内是否有数据有效状态的物理扇区,如果是,将数据有效状态的物理扇区记为源物理扇区,则进入D4;如果否,则将脏物理块置为交换块,并返回D1;
D4,从交换块中按序找出一个空物理扇区,将该空物理扇区状态写为写临时状态;将源物理扇区的逻辑扇区号和源物理扇区的数据,写入到该空物理扇区的对应位置,然后,将空物理扇区状态写为数据有效状态,并将空物理扇区的物理扇区号,写到扇区映射表与源物理扇区的逻辑扇区号对应的表项处;同时,将源物理扇区状态写为数据无效状态,返回D3,直至所有源物理扇区的数据全部写完为止。
6.根据权利要求1所述存储管理方法,其特征在于,所述读取数据管理,具体为:
C1,依据输入的逻辑地址,计算逻辑扇区号;
所述逻辑扇区号对应逻辑扇区内的相对偏移为逻辑地址除以逻辑扇区大小的余数;
将要从物理扇区中读取的数据总长度设为L1,将L1拆分为多段数据,每次读取循环仅完成一段数据的读取,每段数据的长度小于等于L2,L2表示物理扇区大小与逻辑扇区内的相对偏移差值;
C2,获取本次循环要从逻辑扇区号对应物理扇区中读取的数据长度l;
C3,在扇区映射表的基础上,根据逻辑扇区号查找出与逻辑扇区号对应的物理扇区号;判断所述物理扇区号是否有效,如果是,则进入C4;如果否,则进入C5;
C4,根据物理扇区号,计算出该物理扇区的基址;根据物理扇区的基址和逻辑扇区内相对偏移,读取本次循环要读取的数据长度并输出到缓存中,进入C6;
C5,将本次循环要读取的数据长度L的输出缓存设为0xFF;
C6,输出缓存地址+本次循环要读取的数据长度l,同时,获取下一次循环要读取的数据长度,进入C7;
C7,判断下一次循环要读取的数据长度是否为零,如果是,则表示已完成目标数据的读取,将读取到的目标数据返回给请求方;如果否,逻辑扇区号加1,同时,将下一次循环要读取的数据长度作为要读取的目标数据总长度,然后返回C2。
7.根据权利要求1所述存储管理方法,其特征在于,所述空间均衡损耗管理,具体为:
E1,扫描所有块的擦除次数,将各个物理块号按其擦除次数从小到大进行排列,得到链表;
E2,从链表的头部取一个元素作为A,从链表的尾部一个元素作为B;
E3,依次判断A对应的块和B对应的块是否为空元素,
如果A对应的块和B对应的块中任意一个为空元素,则空间均衡损耗管理结束;
如果均不为空,则进入E4;
E4,判断A对应的块和B对应的块的擦除次数是否均大于预定阀值:
如果是,则进入步骤E5;
如果否,则表明A对应的块和B对应的块中任意一个的擦除次数不大于预定阀值,空间均衡损耗管理结束;
E5,判断A对应的块是否为数据交换块;
如果是,则从链表的头部取与元素A相邻的另一个元素替代A,并返回E3;如果否,则进入E6;
E6,判断B对应的块是否为数据交换块;
如果是,则进入E7;
如果否,则将B对应的块中所有数据有效状态的扇区,写入到数据交换块中,然后更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值,最后进入E7;
E7,擦除B对应的块,将B对应的块中所有扇区状态标记为空扇区状态;
将A对应的块中所有数据有效状态的扇区,写入到B对应的块中;写完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;
将A对应的块标记为数据交换块,进入E8;
E8,判断B对应的块里,是否还有空扇区状态的扇区;
如果是,则进入E9;
如果否,则从链表的尾部取与元素B相邻的另一个元素替代B,然后返回E3;
E9,从链表的头部取下一个元素作为A,然后判断A是否为空元素;
如果是,空间均衡损耗管理结束,函数返回;
如果否,则进入E10;
E10,将A对应的块中扇区状态为数据有效状态的扇区,逐一写入到B对应块的空扇区中,写入操作完成后,更新扇区映射表、更新空扇区计数值、更新脏扇区计数值和更新平均擦除次数计数值;然后判断A对应块中的有效状态的扇区是否已全部写入到B对应的块中;如果是,返回E8;如果否,则返回E9。
8.根据权利要求1所述存储管理方法,其特征在于,构建扇区映射表,具体为:
获取任意一个物理扇区,物理扇区中存储的内容包括:物理扇区存储的数据、与该物理扇区对应的逻辑扇区编号、物理扇区的状态和物理扇区的擦除次数;
设定任意一个物理扇区的大小a和NOR Flash芯片的最小写入单位b,在a和b的基础上,获取该物理扇区存储的数据的大小为c,c=a-b;在c的基础上,获取该物理扇区上的最大扇区号d,d=c/a,依据最大扇区号得到表示任意一个物理扇区所需要占用的字节数e;最后,获取扇区映射表需要占用SRAM空间M,M=d×e/f,f表示扇区数;
物理扇区的状态包括空扇区状态、写临时状态、数据有效状态、保留状态和数据无效状态。
9.根据权利要求1所述存储管理方法,其特征在于,输入目标逻辑地址,通过扇区映射表调取与目标逻辑地址存在对应关系的目标物理地址,具体为:
F1,获取逻辑扇区号
逻辑地址÷逻辑扇区大小后所得商中的整数即为逻辑扇区号;
F2,获取物理扇区号
扇区映射表中,与F1中所述逻辑扇区号对应的表项值为物理扇区号;
F3,获取物理地址
物理地址=物理存储空间的基地址+物理扇区号×物理扇区大小+逻辑地址mod逻辑扇区大小,其中,逻辑地址mod逻辑扇区大小表示:逻辑地址÷逻辑扇区大小后所得商中的余数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810225665.0A CN108319433B (zh) | 2018-03-19 | 2018-03-19 | 小内存单片机的NOR Flash的存储管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810225665.0A CN108319433B (zh) | 2018-03-19 | 2018-03-19 | 小内存单片机的NOR Flash的存储管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108319433A CN108319433A (zh) | 2018-07-24 |
CN108319433B true CN108319433B (zh) | 2021-02-02 |
Family
ID=62898895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810225665.0A Active CN108319433B (zh) | 2018-03-19 | 2018-03-19 | 小内存单片机的NOR Flash的存储管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108319433B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508146B (zh) * | 2018-10-11 | 2021-07-23 | 广西师范大学 | 一种区块链的周期性存储空间回收方法 |
CN109669888A (zh) * | 2018-11-06 | 2019-04-23 | 电子科技大学 | 一种可配置且高效的嵌入式Nor-Flash控制器及控制方法 |
WO2020113440A1 (zh) * | 2018-12-04 | 2020-06-11 | 深圳市大疆创新科技有限公司 | 数据存储方法、闪存设备、智能电池、可移动平台 |
CN110175001B (zh) * | 2019-05-27 | 2022-06-14 | 牧星机器人(江苏)有限公司 | 一种nor-flash数据存储方法、计算机设备及存储介质 |
CN111061649B (zh) * | 2019-10-28 | 2023-09-29 | 宁波三星智能电气有限公司 | 一种存储器的存储空间自适应分配方法 |
CN111208950B (zh) * | 2020-01-15 | 2023-07-14 | 山西银河电子设备厂 | 一种基于单片机的提升norflash使用周期的方法 |
CN112181898B (zh) * | 2020-09-23 | 2023-12-29 | 北京百汇安科技有限公司 | 嵌入式安全文件管理系统 |
CN113515070A (zh) * | 2021-07-12 | 2021-10-19 | 珠海格力电器股份有限公司 | 电机设备地址处理方法、装置、存储介质及电机控制器 |
CN114610230B (zh) * | 2022-01-27 | 2023-02-07 | 福建时代星云科技有限公司 | 一种基于单片机的闪存数据交换方法及终端 |
CN115878595A (zh) * | 2022-11-01 | 2023-03-31 | 安徽南瑞中天电力电子有限公司 | 一种基于ftl的智能物联表的数据迁移方法及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046803A (zh) * | 2006-03-28 | 2007-10-03 | 大唐移动通信设备有限公司 | 文件系统的安全管理方法及装置 |
CN101369252A (zh) * | 2008-09-16 | 2009-02-18 | 浙江大学 | 基于nand闪存文件系统中静态数据损耗均衡的方法 |
CN102541753A (zh) * | 2011-12-29 | 2012-07-04 | 上海爱信诺航芯电子科技有限公司 | 一种嵌入式存储器的读写优化方法 |
CN102736981A (zh) * | 2011-04-08 | 2012-10-17 | 航天信息股份有限公司 | 提高nor flash擦写寿命的方法 |
CN106844227A (zh) * | 2017-01-14 | 2017-06-13 | 郑州云海信息技术有限公司 | 基于分组机制的固态硬盘磨损均衡方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10209904B2 (en) * | 2013-04-09 | 2019-02-19 | EMC IP Holding Company LLC | Multiprocessor system with independent direct access to bulk solid state memory resources |
-
2018
- 2018-03-19 CN CN201810225665.0A patent/CN108319433B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046803A (zh) * | 2006-03-28 | 2007-10-03 | 大唐移动通信设备有限公司 | 文件系统的安全管理方法及装置 |
CN101369252A (zh) * | 2008-09-16 | 2009-02-18 | 浙江大学 | 基于nand闪存文件系统中静态数据损耗均衡的方法 |
CN102736981A (zh) * | 2011-04-08 | 2012-10-17 | 航天信息股份有限公司 | 提高nor flash擦写寿命的方法 |
CN102541753A (zh) * | 2011-12-29 | 2012-07-04 | 上海爱信诺航芯电子科技有限公司 | 一种嵌入式存储器的读写优化方法 |
CN106844227A (zh) * | 2017-01-14 | 2017-06-13 | 郑州云海信息技术有限公司 | 基于分组机制的固态硬盘磨损均衡方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108319433A (zh) | 2018-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108319433B (zh) | 小内存单片机的NOR Flash的存储管理方法 | |
US10915475B2 (en) | Methods and apparatus for variable size logical page management based on hot and cold data | |
US8892814B2 (en) | Data storing method, and memory controller and memory storage apparatus using the same | |
US9043536B2 (en) | Method of recording mapping information, and memory controller and memory storage apparatus using the same | |
US8055837B2 (en) | Data writing method for non-volatile memory and controller using the same | |
TWI775122B (zh) | 用來存取至少一非揮發性記憶體元件的處理單元 | |
KR100706242B1 (ko) | 메모리 시스템 및 그것의 런 단위 어드레스 매핑 테이블 구성 방법 | |
CN103106143B (zh) | 固态储存装置及其逻辑至实体对应表建立方法 | |
US9122498B2 (en) | Firmware code loading method, memory controller and memory storage apparatus | |
US20120005451A1 (en) | Data storage device and bad block managing method thereof | |
US20120030411A1 (en) | Data protecting method, memory controller and portable memory storage apparatus | |
CN104750616A (zh) | 数据储存装置以及快闪存储器控制方法 | |
CN101283335A (zh) | 闪存管理 | |
US9619380B2 (en) | Data writing method, memory control circuit unit and memory storage apparatus | |
US9772937B2 (en) | Data processing method, memory controller and memory storage apparatus | |
US20100318726A1 (en) | Memory system and memory system managing method | |
CN107807886B (zh) | 闪存存储器中的索引管理 | |
CN107045423B (zh) | 存储器装置及其数据存取方法 | |
CN109521944A (zh) | 数据储存装置以及数据储存方法 | |
US8943264B2 (en) | Data storing method, and memory controller and memory storage apparatus using the same | |
CN100456263C (zh) | 在税控收款机中使用闪存时处理坏块的方法 | |
CN103218300B (zh) | 数据处理方法、存储器控制器与存储器储存装置 | |
CN110532195A (zh) | 存储器系统的工作负荷分簇及执行其的方法 | |
CN107402717B (zh) | 闪速存储器存储管理 | |
JP2000285001A (ja) | 半導体フラッシュメモリ装置及びその制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |