15_片内flash模拟EEPROM
- 格式:pdf
- 大小:1.20 MB
- 文档页数:18
单片机内的 Flash 与 EEPROM 作用及区别单片机运行时的数据都存在于 RAM (随机存储器中, 在掉电后 RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用 EEPROM 或FLASHROM 等存储器来实现。
在传统的单片机系统中, 一般是在片外扩展存储器, 单片机与存储器之间通过 IIC 或 SPI 等接口来进行数据通信。
这样不光会增加开发成本,同时在程序开发上也要花更多的心思。
在 STC 单片机中内置了 EEPROM (其实是采用 IAP 技术读写内部 FLASH 来实现 EEPROM ,这样就节省了片外资源,使用起来也更加方便。
下面就详细介绍 STC 单片机内置 EEPROM 及其使用方法。
flash 是用来放程序的,可以称之为程序存储器,可以擦出写入但是基本都是整个扇区进行的 .一般来说单片机里的 flash 都用于存放运行代码,在运行过程中不能改; EEPROM 是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为 12:00,后来在运行中改为 6:00,这是保存在 EEPROM 里, 不怕掉电,就算重新上电也不需要重新调整到 6:00下面是网上详细的说法,感觉不错:FLASH 和 EEPROM 的最大区别是 FLASH 按扇区操作, EEPROM 则按字节操作, 二者寻址方法不同,存储单元的结构也不同, FLASH 的电路结构较简单,同样容量占芯片面积较小,成本自然比 EEPROM 低,因而适合用作程序存储器, EEPROM 则更多的用作非易失的数据存储器。
当然用 FLASH 做数据存储器也行, 但操作比EEPROM 麻烦的多,所以更“人性化”的 MCU 设计会集成 FLASH 和 EEPROM 两种非易失性存储器,而廉价型设计往往只有 FLASH ,早期可电擦写型 MCU 则都是EEPRM 结构,现在已基本上停产了。
在芯片的内电路中, FLASH 和 EEPROM 不仅电路不同,地址空间也不同,操作方法和指令自然也不同, 不论冯诺伊曼结构还是哈佛结构都是这样。
单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RA M 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPR OM或F LASHR OM 等存储器来实现。
在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC或SPI等接口来进行数据通信。
这样不光会增加开发成本,同时在程序开发上也要花更多的心思。
在ST C 单片机中内置了E EPROM(其实是采用IAP技术读写内部FLAS H 来实现EEPR OM),这样就节省了片外资源,使用起来也更加方便。
下面就详细介绍STC单片机内置EEP ROM 及其使用方法。
f lash是用来放程序的,可以称之为程序存储器,可以擦出写入但是基本都是整个扇区进行的.一般来说单片机里的f lash都用于存放运行代码,在运行过程中不能改;EEPR OM是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为12:00,后来在运行中改为6:00,这是保存在EE PROM里,不怕掉电,就算重新上电也不需要重新调整到6:00下面是网上详细的说法,感觉不错:F LASH和EEPR OM的最大区别是FL ASH按扇区操作,E EPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLA SH的电路结构较简单,同样容量占芯片面积较小,成本自然比EE PROM低,因而适合用作程序存储器,EE PROM则更多的用作非易失的数据存储器。
当然用FL ASH做数据存储器也行,但操作比EEPR OM麻烦的多,所以更“人性化”的MCU设计会集成F LASH和EEPRO M两种非易失性存储器,而廉价型设计往往只有 FLA SH,早期可电擦写型MCU则都是EEPR M结构,现在已基本上停产了。
Eeprom和Flash的区别 存储器分为两⼤类:ram(内存:随机存储器)和rom(外存:程序存储器),分别存数据和程序。
ram就不讲了,今天主要讨论rom。
(1)rom最初不能编程,出⼚什么内容就永远什么内容,不灵活。
(2)后来出现了prom,可以⾃⼰写⼊⼀次,要是写错了,只能换⼀⽚,⾃认倒霉。
(3)⼈类⽂明不断进步,终于出现了可多次擦除写⼊的EPROM,每次擦除要把芯⽚拿到紫外线上照⼀下,想⼀下你往单⽚机上下了⼀个程序之后发现有个地⽅需要加⼀句话,为此你要把单⽚机放紫外灯下照半⼩时,然后才能再下⼀次,这么折腾⼀天也改不了⼏次。
(4)历史的车轮不断前进,伟⼤的EEPROM出现了,拯救了⼀⼤批程序员,终于可以随意的修改rom中的内容了。
(ROM--PROM--EPROM--EEPROM的进化!) EEPROM的全称是“电可擦除可编程只读存储器(不要觉得多⾼⼤上,其实经常都会⽤到),即Electrically Erasable Programmable Read-Only Memory。
是相对于紫外擦除的rom来讲的。
但是今天已经存在多种EEPROM的变种,变成了⼀类存储器的统称。
flash属于⼴义的EEPROM,因为它也是电擦除的rom。
但是为了区别于⼀般的按字节为单位的擦写的EEPROM,我们都叫它flash。
狭义的EEPROM:这种rom的特点是可以随机访问和修改任何⼀个字节,可以往每个bit中写⼊0或者1。
这是最传统的⼀种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。
具有较⾼的可靠性,但是电路复杂/成本也⾼。
因此⽬前的EEPROM都是⼏⼗千字节到⼏百千字节的,绝少有超过512K的。
flash做的改进就是擦除时不再以字节为单位,⽽是以块为单位,⼀次简化了电路,数据密度更⾼,降低了成本。
上M的rom⼀般都是flash。
flash分为nor flash和nand flash。
32位微控制器片内FLASH模拟EEPROM的优化方法介绍在许多嵌入式系统中,由于存储空间有限,使用片内FLASH 模拟EEPROM的需求越来越高。
尽管片内FLASH一般用于程序存储,但通过使用特定的技术和策略,可以优化其性能,实现EEPROM的模拟功能。
本文将探讨一些优化方法,以提高片内FLASH模拟EEPROM的性能和可靠性。
优化方法以下是32位微控制器片内FLASH模拟EEPROM的一些优化方法:1. 均衡使用均衡使用在设计嵌入式系统时,合理规划和平衡使用片内FLASH的空间。
避免将所有数据存储在同一个区域,而是将数据分散存储于不同的FLASH块中。
这有助于减少对特定FLASH块的擦除和写入次数,提高整体使用寿命。
2. 页面写入页面写入当需要更新EEPROM模拟数据时,使用页面写入技术。
页面写入允许仅擦除和更新需要修改的页,而不是整个FLASH块。
这样可以提高写入速度,并降低擦写操作对整个系统的影响。
3. 坏块管理坏块管理片内FLASH中存在可能变得不可用的坏块。
建议在设计中引入坏块管理机制,以跳过坏块并继续使用可用的块。
可以使用坏块检测和修复算法,例如差错校验码(ECC)和纠错码(ECC)等。
4. 数据压缩和编码数据压缩和编码为了节省片内FLASH的空间,可以使用数据压缩和编码技术。
通过选择适当的算法和技术,可以减小数据的存储空间,并提高系统的效率和性能。
5. 缓存和缓冲区缓存和缓冲区在实现片内FLASH模拟EEPROM时,考虑引入缓存和缓冲区以提高读取和写入操作的效率。
通过将数据预先加载到缓存中,可以减少对FLASH的访问次数,从而提高性能和响应速度。
结论通过使用上述优化方法,可以改善32位微控制器片内FLASH模拟EEPROM的性能和可靠性。
均衡使用、页面写入、坏块管理、数据压缩和编码以及缓存和缓冲区的使用,将有助于提高系统的效率,并减少对片内FLASH的擦写次数,延长其寿命。
在实际设计中,可以根据具体需求选择适当的优化策略,以满足系统的要求。
AVR片内EEPROM模拟FLASH的优化方法概述在AVR片内(内置)的EEPROM模拟FLASH存储的过程中,我们需要考虑如何优化代码以提高性能和效率。
本文档将介绍一些简单的优化方法,以确保良好的性能和稳定的EEPROM模拟FLASH储存过程。
优化方法1. 合理使用EEPROM和FLASH存储根据实际需求,合理使用EEPROM和FLASH存储。
EEPROM 存储器可以用于存储需要频繁修改的数据,而FLASH存储器则适合存储不频繁修改的数据。
2. 使用EEPROM指针使用EEPROM指针来快速访问EEPROM存储器中的数据。
通过使用指针来读取和写入EEPROM存储器中的数据,可以提高读写速度和效率。
3. 批量读写操作在进行EEPROM模拟FLASH储存时,尽可能使用批量读写操作,而不是逐个读写。
这样可以减少读写次数,提高存储过程的效率。
4. 数据压缩对需要存储的数据进行压缩可以减少存储空间,提高存储效率。
使用有效的压缩算法可以将数据压缩到最小的空间,同时保证数据的完整性。
5. 数据校验在进行数据读取和写入时,使用合适的校验算法来保证数据的完整性和准确性。
可以使用CRC或校验和等算法对数据进行校验,以确保存储过程的可靠性。
结论通过合理使用EEPROM和FLASH存储、使用EEPROM指针、批量读写操作、数据压缩和数据校验等优化方法,我们可以提高AVR片内EEPROM模拟FLASH存储的性能和效率。
在实际应用中,根据具体需求和场景选择合适的优化方法,将有助于提升系统的稳定性和性能。
(Word count: 201)。
Flash和EEPROM的区别这是一篇真正为「终结懵逼」而生的回答。
看完如果还不懂,那就多看几遍…以前做项目,有时用Flash,有时用EEP(ROM),搞得我有点懵逼。
然后在网上搜了一些(资料),看完以后还是不能理解透彻,直到项目做多了,才彻底搞懂。
Flash和EEPROM都是非易失性存储器,就是你设备掉电重启后,数据还会保留,如果是(RAM)的话掉电数据直接就丢了。
下面从几个方面去介绍下Flash和EEPROM的区别:1.读取方式Flash和EEPROM都采用随机读取,可以通过地址直接访问存储器中的数据。
2.写入方式Flash和EEPROM的写入方式不一样,EEPROM可以按字节进行写入,而Flash通常需要按块进行写入。
还有就是,在Flash中,要写入一个数据,需要先擦除一整个块,然后再将新数据写入该块。
3.擦除方式Flash和EEPROM的擦除方式不一样,EEPROM可以按字节进行擦除,而Flash一般需要按块进行擦除。
也就是说,在Flash中,要擦除一个数据,通常需要先擦除一整个块,然后再将该块中需要保留的数据重新写入,比EEPROM操作麻烦一些。
4.擦写速度EEPROM的擦写速度比Flash慢得多,擦写速度会受到许多因素的影响,包括使用的存储器型号、使用的(接口)类型、写入和擦除的数据量、(芯片)温度等等。
5.存储密度Flash比EEPROM的存储密度更高,可以存储更多的数据。
6.寿命Flash和EEPROM的寿命长短取决使用方式、应用场景等等。
一般来说,EEPROM的寿命可能会更长一些,因为它可以进行单独的字节单位的写入和擦除,而Flash需要进行整个页面或扇区的擦除。
这意味着EEPROM可以更灵活地管理存储器,并减少对存储单元的擦写次数。
但是,这并不意味着所有情况下EEPROM的寿命都会更长。
7.价格Flash比EEPROM更便宜。
8.通讯接口不同Flash很多是用SPI协议接口、EEPROM很多是I(IC)协议接口。
用Flash模拟EEPROM本程序利用S08系列单片机的片内Flash模拟EEPROM。
解决部分8位机没有EEPROM 导致在运用上的局限。
本程序提供一个初始化函数和三个功能函数。
用户必须在调用功能函数前调用调用初始化函数。
三个功能函数分别是字节写入、字节读取、EEPROM全擦除。
用户必须保证调用功能函数前有至少30Bate的栈空间。
本程序参考飞思卡尔公司提供的《在HCS08 微控制器上使用FLASH 存储器模拟EEPROM》。
并在源程序的基础上精简了部分功能,减少了RAM使用量。
并尝试使用分页机制确定EEPROM地址。
接口函数的EEPROM地址寻址由页地址和页内偏移量组成。
即把用户定义的EEPROM 分为若干个大小为256字节的页。
其地址与FLASH地址的换算关系为:FLASH真实地址=EEPROM空间起始地址+页地址×256+页内偏移地址用户在使用EEPROM是只用确定数据保存在EEPROM的相对地址即可。
接口函数原型为:EEPROM_WRITE_DA TA(数据,页地址, 页内偏移地址);Char EEPROM_READ_DA TA(页地址, 页内偏移地址);1.程序流程分析与设计。
由于S08系列单片机在Flash写入时序中不能进行任何的Flash读操作,Flash写入指令必须放到RAM中执行并关闭所有可屏蔽中断。
程序流程如图13-1-?。
字节写入/.全擦除程序流程字节读取程序流程图13-1-?2.程序源代码。
此程序在CodeWarrior 6.0继承编译环境中编译通过/*****************************************************///河南工业大学Freescale MCU&DSP联合实验室// 文件名:flash_program.h// CPU :MC9S08A W60// 版本:v1.0// 日期:2008年8月12日// 调试环境:CodeWarrior 6.0// 作者:曾滔// 描述: 头文件,用于保存初始化EEPROM设定、用户定制参数、编译器参数等信息。
FLASH和EEPROM的最大区别专业篇FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM 则更多的用作非易失的数据存储器。
当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。
至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。
在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。
技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。
没有严谨的工作精神,根本无法成为真正的技术高手。
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM 主要是用以在程序运行保存一些需要掉电不丢失的数据. 楼上说的很好另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。
ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
FLASH和EEPRO M的最大区别FLASH和EEPRO M的最大区别是FLA SH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比E EPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。
当然用FLA SH做数据存储器也行,但操作比EE PROM麻烦的多,所以更“人性化”的MCU设计会集成FL ASH和E EPROM两种非易失性存储器,而廉价型设计往往只有F LASH,早期可电擦写型MCU则都是EEP RM结构,现在已基本上停产了。
至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。
在芯片的内电路中,FLASH和EEPRO M不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。
技术上,程序存储器和非易失数据存储器都可以只用FA LSH结构或EEPR OM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。
没有严谨的工作精神,根本无法成为真正的技术高手。
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据.楼上说的很好另外,一些变量,都是放到RA M里的,一些初始化数据比如液晶要显示的内容界面,都是放到FL ASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失ROM和RA M指的都是半导体存储器,ROM是Re ad Only Memory的缩写,RAM是Ra ndomAccess Memory的缩写。
Le i)LTK女娲STM32开发板使用手册修订历史L TK (Le iT ek )目录第15 片内flash 模拟EEPROM (3)章 Flash 和EEPROM (3)15.1 Flash 和EEPROM 对比 .......................................................... 3 15.1.1 内部Flash 模拟EEPROM 原理.............................................. 3 15.1.2 Flash 掉电数据恢复 ................................................................ 5 15.1.3 内部flash 应用实例 ----- 模拟EEPROM .. (6)15.2 实例描述 ................................................................................ 6 15.2.1 实验效果 ................................................................................ 6 15.2.2 硬件设计 ................................................................................ 6 15.2.3 软件设计 .. (6)15.2.4k )片内flash 模拟EEPROM第15章 Flash 和EEPROM15.1 Flash 和EEPROM 对比15.1.1为了节省成本,STM32内部没有集成EEPROM ,当我们需要存储一些数据时,可使用内部flash 来模拟EEPROM 。
不像flash 存储器,EEPROM 在向存储空间重新写入数据时,不需要做擦除操作。
由于外部EEPROM 和内部flash 模拟的EEPROM 的写入方式有所不同,所以使用内部flash 模拟EEPROM 时,要使用掉电恢复机制。
以下表格是他们的主要区别。
内部Flash 模拟EEPROM 原理15.1.2考虑到flash 存储器的局限性以及产品的需求,模拟EEPROM 至少需要两页容量大小完全相等的flash ,其中第0页已经擦除过,可以进行写操作。
当第0页写满了以后,第1页需要回收第0页内的有效数据,若此时需要新写入的数据,也会写入第1页。
每一页的开头16位都有一个状态标志,描述当前页的状态。
每页的状态可能为下面3个状态中的一个: ERASED: 该页为空L TK(Le iT ek )● RECEIVE_DATA: 该页正在从另外一个已满的页接收数据● VALID_PAGE: 该页包含有效数据,该页的状态一直保持不变,直到所有有效数据完全传输到另外一个 ERASED 的页。
第0页和第1页的状态转换如下图所示:每个存储在flash 内变量都定义了一个虚拟地址和一个数值,该数值以后可以读取和更新,当该数值改变后,该数值连同其对应的虚拟地址一起存储到一个新的flash 存储地址。
当需要读取该数值时,返回的是最近修改的数值。
在本实例中,虚拟地址和该数值都是16位。
其格式如下:下图描述了内部flash 模拟EEPROM 存储三个变量的流程,其中三个变量名及其对应的值分别为: var1(0x5555),var2(0x6666),var3(0x7777)。
L TK (Le iT e k )Flash 掉电数据恢复15.1.3当正在更新flash 数据时,这时候掉电,有可能会损坏flash 数据。
为了检测到这种数据损坏,并且恢复数据,在开机的时候立马执行ltk_ee_init ,其原理是,该函数使用存储数据页的状态,来判断该页数据是否已经损坏,如果数据损坏了,则修复数据。
页头的状态有9个可能的组合,其中的3个组合为有效组合,如下图所示:L TK (Le iT ek )内部flash 应用实例 ----- 模拟EEPROM15.2 实例描述15.2.1本实例使用STM32内部的flash 来模拟EEPROM 。
解锁flash 后,便可以操作内部flash ,一开始要做掉电恢复,通过函数ltk_ee_init 来实现,然后向内部flash 写入/读取三个变量,通过串口输出变量的值来检测flash 模拟EEPROM 读写是否成功。
实验效果15.2.2烧录该软件后,用USB 线连接到开发板上标有UART 的USB 口,在电脑的串口终端工具(如 secureCRT )内会输出该三个变量的值。
硬件设计15.2.3该实例使用内部flash 来模拟EEPROM ,无需外部电路。
软件设计15.2.4我们先从main 开始,该函数在应用层文件eeprom_emulation_main.c 内实现,主函数首先初始化串口。
要读写内部flash ,首先要解锁flash ,然后做掉电检测,通过调用函数ltk_ee_init 来检测flash 的内容是否有损坏。
最后调用函数ltk_ee_write_variable 来向内部flash 写入数据,再调用函数ltk_ee_read_variable 读取内部flash 内保存的变量的值,通过串口打印出来。
1 /**2 * 描述: 主函数,连续保存多个数据到 EEPROM ,然后读出,检查保存和读取出来的数据3 * 是否一致4 * 参数: 无5 * 返回: 无6 */7 int main(void )L TK (Le iT ek )9 uint16_t var_value = 0; 10 uint16_t read_value[3]; 11 uint8_t i; 1213 ltk_usart_init(); 1415 USART_Cmd(USART1, ENABLE); 16 /* 解锁 flash 编程擦除控制器 */ 17 FLASH_Unlock(); 1819 /* EEPROM 初始化 */ 20 ltk_ee_init(); 2122 /* 连续保存多个数据到 EEPROM */23 /* 保存 1000 个 Variable1 到 EEPROM */24 for (var_value = 0; var_value < 1000; var_value++)25 {26 ltk_ee_write_variable(VirtAddVarTab[0], var_value); 27 } 2829 /* 保存 500 个 Variable2 到 EEPROM */30 for (var_value = 0; var_value < 500; var_value++) 31 { 32 ltk_ee_write_variable(VirtAddVarTab[1], var_value);33 } 3435 /* 保存 800 个 Variable3 到 EEPROM */36 for (var_value = 0; var_value < 800; var_value++)37 { 38 ltk_ee_write_variable(VirtAddVarTab[2], var_value);39 } 4041 /* 读取保存的变量,在串口打印出来 */ 42 for (i = 0; i < 3; i++) 43 {44 ltk_ee_read_variable(VirtAddVarTab[i], &(read_value[i]));45 ltk_printf("%d: %d\n", i, read_value[i]); 46 } 4748 while (1) 49 { 50 }L TK(Le iT ek )内部flash 模拟EEPROM 的实现主要在文件ltk_eeprom_emulation.c 内。
在头文件ltk_eeprom_emulation.h 内,定义了一些有用的常量。
首先是要模拟成EEPROM 的内部flash 的页地址,女娲STM32开发板使用STM32F103C8T6,为中容量产品,flash 大小为64K bytes ,总共有64页(0 – 63),本实例中,我们使用第62页和第63页的flash 来模拟EEPROM 。
PAGE0使用内部flash 的62页,地址为:0x0800 0000 + 62 * 1024 = 0x0800 F800PAGE1使用内部flash 的63页,地址为:0x0800 0000 + 63 * 1024 = 0x0800 FC001 /* EEPROM start address in Flash */2 #define EEPROM_START_ADDRESS ((uint32_t)0x0800F800) /* EEPROM emulation start address:3 after 62KByte ofused Flash memory */ 45 /* Pages 0 and 1 base and end addresses */6 #define PAGE0_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS+ 0x000))7 #define PAGE0_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS+ (PAGE_SIZE - 1))) 89 #define PAGE1_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE))10 #define PAGE1_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1)))我们还定义了页状态,有以下四种状态,状态PAGE_NOT_CORRUPTED 指示该页没有损坏。
官方例程每次上电都要擦除页,加入这个状态是避免不必要的页擦除,提高flash 的寿命。
当检测到页状态为PAGE_NOT_CORRUPTED ,表明该页没有被损坏,没有必要进行也擦除。
其它三种状态在上面都有详细的描述。
1 /* Page status definitions */2 #define ERASED ((uint16_t)0xFFFF) /* PAGE is empty */3 #define RECEIVE_DATA ((uint16_t)0xEEEE) /* PAGE is marked to receive data */4 #define VALID_PAGE ((uint16_t)0x0000) /* PAGE containing valid data */5 #define PAGE_NOT_CORRUPTED ((uint16_t)0xAAAA) /* PAGE is NOT corrupted */L TK(Le iT ek )掉电flash 损坏由函数ltk_ee_init 实现,一上电就需要调用该函数检测。