CN111813706A - 一种实现MCU Flash存储器擦写损耗均衡的方法 - Google Patents
一种实现MCU Flash存储器擦写损耗均衡的方法 Download PDFInfo
- Publication number
- CN111813706A CN111813706A CN202010629941.7A CN202010629941A CN111813706A CN 111813706 A CN111813706 A CN 111813706A CN 202010629941 A CN202010629941 A CN 202010629941A CN 111813706 A CN111813706 A CN 111813706A
- Authority
- CN
- China
- Prior art keywords
- data
- flash
- block
- address
- writing
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000009432 framing Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 8
- 238000013500 data storage Methods 0.000 description 5
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 4
- 230000007547 defect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7211—Wear leveling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
Abstract
本发明公开了一种实现MCU Flash存储器擦写损耗均衡的方法。本发明首先计算该数据的长度,根据数据长度的大小从存储区域选择合适数量的BLOCK提供给该数据的写入,并返回该次数据写入的末尾地址,等到下次数据更新写入时,将末尾地址作为更新数据的首地址写入,如此循环往复,待存储该类型数据的BLOCK耗尽时,将所有的BLOCK全部擦除,在原来的首地址重新再写入新的数据。本发明实现了flash损耗均衡,更是在flash存储器低成本的基础上又极大降低了flash存储器寿命消耗速度。
Description
技术领域
本发明涉及一种Flash擦写方法,尤其是涉及一种实现MCU Flash存储器擦写损耗均衡的方法,属于单片机开发,flash存储技术领域。
背景技术
随着单片机技术的快速发展,对低成本flash存储器的数据读写和使用寿命有了更高的要求。小型控制器芯片单片机作为一种典型的MCU凭借着其成本低,集成度高,易开发,性能好,满足大多数小型设备的控制需求等优点,已获得了市场广泛的认可和应用,通常作为传统工业设备的本地控制和机械性工作设备的形式存在。
在单片机开发flash存储中,经常会有一些程序在运行期间产生的应用数据,这些应用数据需要在单片机内部的某个flash区域进行保存以及读取。以物联网净水器为例,对净水器上电工作时间、各级滤芯工作时间、以及净水器有无上锁等数据信息进行flash存储,以便设备重新上电之后还能继续在原先数据的基础上进行更新。在程序开发过程中,通常会规定好写入数据长度和写入flash的首地址。这样做,能够准确把握数据从哪个地方开始写入,写多长;和从哪个地方读出来,读多长。对于擦写频率不高的数据,如:版本号的更新、上电记录、生产日期等信息,用固定存储空间的方式是最合适的;但对于擦写频率高的数据来讲,这种方式则存在着很大的缺陷:
第一,flash存储器的擦写次数是有限的,其典型值是100K次,也就是说某一块flash在擦除了100K次之后,就永久失去了可再存储能力。如果像净水器设备的工作时间,这种信息频繁更新存储的话,就会使flash的寿命大打折扣。
第二,根据flash存储器的编程原理,其存储区域的所有位都只能将1改写为0,不能将0改写为1。擦除的作用就是将所有位都写为1的过程,所以在存储器内特定位置写入数据之前都必须将该位置的数据擦除。另外,flash擦除也规定了最小的擦除单位:BLOCK。一个BLOCK为512个字节,也称为一页。这种擦除方式使得小数据量的信息未完全占用一个BLOCK,而使得该BLOCK的其他空间也会被反复擦除,导致flash寿命快速耗尽。
另外,Flash存储器以低成本的优点还能占有一定的市场使用范围,其对频繁进行数据更新的力不从心并不是没有改进的方法。常用的固定存储空间的方法虽具有一定的优势:其在读取数据时,不需要遍历寻址,直接根据固定地址去进行数据的读取,从而使得读取速度快。但不适用于数据的频繁更新;这里,可以以“空间换时间”的概念提高flash再存储的能力。固定存储空间的方式进行数据读取消耗的时间在us级别,而遍历寻址读取数据的方式消耗的时间也不会多于2ms,这取决于MCU系统时钟的频率。虽说是以空间换时间,但在宏观来讲,这个时间的消耗也并不影响整体性能。
发明内容
本发明针对现有flash存储方式能力的不足,提出一种实现MCU Flash存储器擦写损耗均衡的方法,在对数据进行频繁更新的情况下,很大程度上降低了flash擦除的频率。
程序运行需要在flash中写入更新数据时,和常用方法一样,由程序指定更新数据写入的内存首地址,之后对旧数据进行更新时在首地址的基础上加上旧数据的长度,定位到新数据存储需要写入的首地址,也就是计算出旧数据的末尾地址作为新数据的首地址进行写入,直到该数据应用的BLOCK写完为止。基于这种方法的数据存储方式,其flash数据写入和读取的过程分别为:
(1)flash数据写入时,需要在新数据的头部和尾部分别加上0xAA、0x55。根据指定的flash首地址,从该首地址开始,进行整个BLOCK内数据的判断,找出该BLOCK内0x55结尾之后紧接着0xFF开头的数据,然后将该0xFF开头的数据的地址返回,与该BLOCK的末尾地址进行比较计算得出该BLOCK剩余的空间,之后和待写入的新数据的长度进行比较,以此来判断是否剩余空间足够新数据的写入;若空间不够,则执行擦除该BLOCK的操作,在首地址开始写入新数据;若空间足够,则以0xFF开头的地址作为首地址进行新数据的写入。
(2) flash数据读取时,也是根据指定的flash首地址,遍历该BLOCK内的数据,找到0x55结尾之后紧接着0xFF开头的数据,然后将以0x55结尾0xAA开头的前边整个一条数据读取出来,即读取出最新的数据。
针对以上数据读写过程中遍历方法的不足,根据新数据的长度可以优化flash读写的速度。在新数据头部尾部加上0xAA、0x55的基础上,由首地址加上数据长度的偏移,得到下一条数据的头部,如此根据地址的不断偏移,找到新数据要写入的首地址;从flash中读数据也一样,根据地址偏移,找到最后0xFF开头的前一条数据的地址偏移,则可得出最新数据的展示。
本发明的有益效果:本发明通过“空间换时间”的方法,减少了flash数据存储频繁擦除带来的存储器加速损坏的现象,并采用数据长度和增加头部尾部的双重判断,缩短了写入时间和读取时间,一定程度上实现了flash存储器擦写的损耗均衡。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1示出了整体框架图。
图2示出了待存储数据写入flash的整个过程示意图。
图3示出了待读数据从flash指定位置读出的整个过程示意图。
图4示出了数据读取保护机制。
图5示出了总体flash读写流程示意图。
具体实施方式
为使本发明的目的、技术方案和有益效果更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
图1示出了整体框架图,当在flash的一块区域中频繁的擦除重写数据时,首先计算该数据的长度,根据数据长度从存储区域选择BLOCK提供给该数据的写入,并返回该次数据写入的末尾地址,等到下次数据更新写入时,将末尾地址作为更新数据的首地址写入。这样,就不需要每次更新数据时都将待更新数据擦除;当需要在flash中读取最新的数据时,MCU会获取最新数据的首地址,然后根据数据的长度从该地址读取特定长度的数据,拿到最新的数据。
图2示出了待存储数据写入flash的整个过程示意图。步骤如下:
为了便于在flash存储区中进行目标数据的快速判断,在待存储数据的头尾加上了0xAA和0x55,在存储区写入之前,判断写入位置是否有数据。先判断待写入地址的首字节是否为0xFF。若每个BLOCK的地址的内容为0xFF,则代表没有数据写入,则刚好从该地址将数据写入;若不为0xFF,再判断是否为0xAA,如果为0xAA,则代表该位置已经存了一条数据,然后继续跳到下一条数据继续重新判断;若不为0xAA,则代表该位置开始的数据是非法数据,此时可选择将整个BLOCK擦除掉,从起始地址开始将数据写入。整个过程并不会因数据损坏而导致数据无法使用。
另外,待存储数据加上头部0xAA、尾部0x55这种方式并不一定能保证每条数据能按部就班的头接尾的线性存储下去,所以规定了数据存储的类型,必须是新存入的数据对旧数据所做的更新,新存入数据的每个字节表示的含义跟旧数据是一一对应的,由此也就规定了新旧数据的数据长度是一定的。
这样,就保证了在根据数据头部和数据长度进行遍历写入的时候,数据存储不会乱掉。如果数据真的被污染了,则可终止程序,进行该BLOCK的擦除,随之把新的数据写入即可。
图3示出了待读取数据从flash指定位置读出的整个过程示意图。步骤如下:
读数据的过程就比较简单了。
从flash中读取最新更新的数据时:
传入flash首地址和长度,判断当前位置首字节内容,若是当前首字节为0xFF,则表示还未开始进行数据的存储,此时返回读取失败的状态码,程序中可根据状态码进行以下动作:
程序返回空数据,继续执行;程序返回写入状态字,则此时就需要立即执行第一条数据的更新写入,由图1所示步骤进行数据的存储。之后可立即对存入的数据进行读取,或者等待下次读取时自动执行。
若判断首地址有数据,并且不为0xFF,则根据长度继续定位下一条数据,我们的目的是找到最后更新的数据,即为最新数据。直到找到最后一条数据的开头为0xFF,此时,假设该0xFF的地址为Y,则用Y减去数据长度Len,得出上一条数据的起始地址X,即:Y-Len =X.从X的位置读取长度Len的数据,即为最新数据。
图4示出了数据读取保护机制,步骤如下:
读取保护机制,即为保证读出的数据可用。
读取数据的过程就是对指定BLOCK的遍历过程,其数据是一条条的进行末尾判断,找到末尾0xFF开头的数据时,并不是从当前位置读数据,而是从当前位置的前Len个字节开始读。图3所示的流程中只是把数据读取出来,并没有进行判断,数据判断在这一步执行,判断的是读出数据的头部和尾部,如果头部尾部都正确的话,即该条数据是没有问题的,如果数据格式错误,则还需找到更前一条的数据。这里加入了缓存机制。
在读取数据的同时,开辟临时缓存,将当前读取数据的前一条放到缓存中,以便当前数据出错时,可寻找到前一条数据,保证数据能正确的读出。
图5示出了总体flash读写流程示意图,流程如下:
假设第一次在flash的存储区进行数据的存储,根据提供的flash首地址和写入数据的长度,对当前地址为首的存储内容进行判断,如果首字节为0xFF,则不必往下检测后边的数据,为了保证没有垃圾数据,直接对整个BLOCK执行一次擦除,然后将要写入的数据加上头部和尾部进行flash的写入。到此,第一次的数据写入成功。
当之后进行数据的更新时,由提供的flash首地址进行首字节的检查,因数据写入是以更新的形式进行的,所以之后写入的数据长度会跟第一次一样。此时检查到的内容是第一次写入的数据头部,再根据长度定位到下一条数据的首地址,判断此地址的内容是否为0xFF。如果为0xFF,则将更新数据从当前地址开始写入;如果为数据头部,则继续定位到下一条数据尾部进行判断,直到找出以0xFF开始的地址。
当BLOCK的空间不够最新一条数据写入时的情况:程序会对剩余空间和新数据长度进行比较,当剩余空间不够新数据的写入时,则会根据传入的flash首地址将整个BLOCK擦除掉,然后再将新数据以该BLOCK 的首地址为起始位置进行写入,这样就跟第一次进行数据的存储的情况一样了。
Claims (5)
1.一种实现MCU Flash存储器擦写损耗均衡的方法,其特征在于:当在flash的一块区域中频繁的擦除重写数据时:
对待写入数据重新组帧,并计算帧长度,用于将数据写入BLOCK之前判断空间是否充足,之后对空间充足和不足分情况进行写处理;
当需要在flash中读取最新的数据时,MCU先检查BLOCK是否为空,之后对为空和不为空的情况进行不同处理;
具体是:
flash数据写入具体步骤如下:
步骤1,待写入数据加上帧头和帧尾,组成一条可对帧头帧尾判断的帧;
步骤2,根据指定的flash首地址对目标BLOCK判断是否存有数据,并判断剩余空间是否足够新数据的写入;
步骤3,空间不够,擦除BLOCK,在开始指定的flash首地址写入新数据;
步骤4,空间足够,则以返回的地址为开头写入新的数据;
flash数据读出具体步骤如下:
步骤1、检查待读取的BLOCK是否为空;
步骤2、不为空则遍历BLOCK内的数据,找到最后一条数据返回;
步骤3、为空则直接返回,无数据可以读取。
2.根据权利要求1所述的一种实现MCU Flash存储器擦写损耗均衡的方法,其特征在于:
flash数据写入时,在新数据的头部和尾部分别加上帧头0xAA、帧尾0x55,组成一条新的数据帧;根据指定的flash首地址,进行整个BLOCK内数据的判断,检查是否有数据;若有数据,则找出该BLOCK内0x55结尾之后紧接着0xFF开头的数据,然后将该0xFF开头的数据的地址返回,与该BLOCK的末尾地址进行比较计算得出该BLOCK剩余的空间,之后和待写入的新数据的长度进行比较,以此来判断是否剩余空间足够新数据的写入;若空间不够,则执行擦除该BLOCK的操作,在首地址开始写入新数据;若空间足够,则以0xFF开头返回的地址作为首地址进行新数据的写入。
3.根据权利要求2所述的一种实现MCU Flash存储器擦写损耗均衡的方法,其特征在于:
flash数据读取时,根据指定的flash首地址,先判断以该首地址为开头的BLOCK是否为空,不为空则遍历该BLOCK内的数据,找到0x55结尾之后紧接着0xFF开头的数据,然后将以0x55结尾0xAA开头的前边整个一条数据读取出来,即读取出最新的数据;为空则直接返回,无数据可以读取。
4.根据权利要求1至3中任一项所述的一种实现MCU Flash存储器擦写损耗均衡的方法,其特征在于:针对新数据延续旧数据的特点,规定了数据存储的类型,必须是新存入的数据对旧数据所做的更新,新存入数据的每个字节表示的含义跟旧数据是一一对应的,由此也就规定了新旧数据的数据长度是一定的。
5.根据权利要求1至3中任一项所述的一种实现MCU Flash存储器擦写损耗均衡的方法,其特征在于:在读取数据的同时,开辟临时缓存,将当前读取数据的前一条放到缓存中,以便当前数据出错时,可寻找到前一条数据,保证数据能正确的读出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010629941.7A CN111813706A (zh) | 2020-07-03 | 2020-07-03 | 一种实现MCU Flash存储器擦写损耗均衡的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010629941.7A CN111813706A (zh) | 2020-07-03 | 2020-07-03 | 一种实现MCU Flash存储器擦写损耗均衡的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111813706A true CN111813706A (zh) | 2020-10-23 |
Family
ID=72856033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010629941.7A Pending CN111813706A (zh) | 2020-07-03 | 2020-07-03 | 一种实现MCU Flash存储器擦写损耗均衡的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111813706A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113504873A (zh) * | 2021-05-20 | 2021-10-15 | 新华三信息安全技术有限公司 | 一种通信设备及其存储数据的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050003766A1 (en) * | 1999-08-09 | 2005-01-06 | Yue Chen | Bad frame indicator for radio telephone receivers |
CN101419841A (zh) * | 2008-12-09 | 2009-04-29 | 苏州大学 | 一种flash存储器擦写方法 |
CN102306125A (zh) * | 2011-08-17 | 2012-01-04 | 深圳市共进电子股份有限公司 | 一种flash存储器的数据擦写方法 |
-
2020
- 2020-07-03 CN CN202010629941.7A patent/CN111813706A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050003766A1 (en) * | 1999-08-09 | 2005-01-06 | Yue Chen | Bad frame indicator for radio telephone receivers |
CN101419841A (zh) * | 2008-12-09 | 2009-04-29 | 苏州大学 | 一种flash存储器擦写方法 |
CN102306125A (zh) * | 2011-08-17 | 2012-01-04 | 深圳市共进电子股份有限公司 | 一种flash存储器的数据擦写方法 |
Non-Patent Citations (1)
Title |
---|
(美)(M.A.斯波尔泰克)MARK A.SPORTACK等: "《nRF无线SOC单片机原理与高级应用》", 北京航空航天大学出版社, pages: 308 - 309 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113504873A (zh) * | 2021-05-20 | 2021-10-15 | 新华三信息安全技术有限公司 | 一种通信设备及其存储数据的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552311B2 (en) | Recovery for non-volatile memory after power loss | |
EP1548602B1 (en) | Non-volatile storage device control method | |
US6601132B2 (en) | Nonvolatile memory and method of writing data thereto | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
KR100507884B1 (ko) | 플래시 메모리의 메모리 재기록 제어 시스템, 메모리 재기록 제어 방법, 메모리 재기록 제어 방법의 각 공정을 실행시키는 프로그램을 기록한 정보 기록 매체 | |
US8332696B2 (en) | Defect management method for storage medium and system thereof | |
JP4046877B2 (ja) | 一括消去型不揮発性メモリおよび携帯電話 | |
CN107239411B (zh) | 一种车载控制器内存管理方法及系统 | |
WO2009104330A1 (ja) | メモリ制御方法及び装置、メモリアクセス制御方法、コンピュータプログラム、記録媒体 | |
WO2023116346A1 (zh) | 异常掉电下Trim数据的恢复方法、系统及固态硬盘 | |
CN117931091B (zh) | 一种异常掉电处理方法、装置、设备、介质及产品 | |
JP4158526B2 (ja) | メモリカード及びメモリへのデータ書き込み方法 | |
CN117742588B (zh) | 使用Flash模拟EEPROM的数据存储方法及系统 | |
CN111813706A (zh) | 一种实现MCU Flash存储器擦写损耗均衡的方法 | |
CN116185563B (zh) | 一种基于车规级微控制器数据闪存的软件模拟算法 | |
JP4794530B2 (ja) | 半導体装置および携帯電話 | |
CN113918485B (zh) | 一种闪存资料防丢失方法、装置、设备及存储介质 | |
JP2003196165A (ja) | 不揮発性メモリ及びそのデータ更新方法 | |
JP2001249855A (ja) | 不揮発性メモリのデータ書き替え方法及び加入者回路 | |
CN112908390B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN111324554B (zh) | 闪存数据的管理方法及装置、电梯控制器 | |
JP2003122646A (ja) | Icカードおよびicカードのメモリアクセス制御方法 | |
JP3271935B2 (ja) | 制御システム | |
CN111949198A (zh) | 一种坏块管理方法、装置和存储设备 | |
CN109407963A (zh) | 一种实现存储管理的方法及装置 |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20201023 |