数据分区的大小和个数的设置和DFlash的扇区长度匹配起来,知足以下公式:
打算公式
每个数据分区组成如下图所示:

数据分区组成
分区状态字:反应数据分区的存储历史韶光,不同数据分区存储数据在不同历史韶光的拷贝,当前数据分区存储最新的数据拷贝。数据ID:即可以作为当前数据条款标标识符,也可以作为当前数据条款标数据状态字,反响该数据所在分区内存储地址是否已经被擦除。数据:该数据条款中实际须要保存的数据,数据大小要根据实际情形进行设置。(包括DFlash最小可操作的字节数限定)举例:
以S32K148芯片为例,芯片内部DFlash的扇区大小为4K,为了担保掉电不丢失数据,那么必须占用至少2个扇区,因此这里假设采取2个扇区的DFlash来仿照EEPROM。芯片的DFlash设置最小可操作的字节数为8个字节。假设要存储2个数据条款标数据,由于最小操作的字节数为8,以是每个数据条款标字节数为8的整数倍,结合实际情形合理的设置每个数据条款标大小。虽然分区状态字仅仅用了一个字节,但是由于DFlash操作特性,以是也要空出8个字节的位置给分区状态字。
如果2个数据条款均为8个字节,那么加上分区状态字一共占用24个字节,以是我们这里设置数据分区的大小为256个字节,那么2个4K的扇区中就存在32个数据分区。
2.2 实现流程1. MCU上电复位,系统根据数据分区状态字查找存储最新数据的分区,将其设置为最新可操作数据分区,并设置其数据分区状态字为最新分区状态字。
2. 在对数据条款中的数据进行读取操作时,根据最新数据分区以及数据在分区内的偏移地址打算最新数据拷贝的Flash实际存储位置,直接读取该地址即可。
3. 在对数据进行写操作时,首先根据偏移地址打算该数据存储的Flash地址,然后根据数据状态字判断数据所在所在的数据条款区域是否已经被擦除;如果被擦除,那么直接将数据写入当前分区中,其他数据条款中的数据保持不变;如果没有被擦除,那么进行分区拷贝操作,即将数据写入下一个分区中,并且将当前分区中的其他数据复制到下一个分区,同时将下一个分区设置为最新数据分区,更新最新分区状态字并存储。