logo资料库

关于单片机flash数据保存和读取的方法.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
一、实现方法 Flash 数据读取和保存的目的是在单片机的程序存储区开辟一块空间专门用来保存系统需要 记忆的参数和数据,从而完全取代 EEROM,达到降低成本和数据保密的目的。该实现方法 主要分为四个部分:  FLASH 数据的读取  FLASH 数据的设定  FLASH 数据的保存  FLASH 空间的擦除 其中,数据的读取和保存方法需要根据数据的配置格式来确定,这里我们是这样定义的: 1. 数据格式的定义 1) 数据长度:8BIT/16BIT/32BIT 2) 起始标志:0xAB/其他 3) 数据长度:8/16/32/64/128/256… 4) 数据区 5) 校验码:不同的方法校验码不同 2. 举例 1) 数据长度:8BIT 2) 起始标志:0xAB 3) 数据长度:32 4) 数据区 5) 校验码:数据和为 0Xff 6) 数据存储表如下: 0xAB Data0 Data1 Data2 Data3 Data4 Data5 Data6 0 1 2 3 4 5 6 7 ………… 28 29 30 31 Data27 Data28 Data29 checksum 总 共 32 个 bytes, 其 中 0xAB 为 数 据 的 起 始 标 志 , checksum=0xFF-(INT8U)(0xAB+Data0+…Data29) 使用 32 个 bytes,主要是根据 flash 中页的大小决定的,一般来说,flash 中页的大小可以为 64bytes/128 bytes/256 bytes/512 bytes/1024 bytes 等,是 32 的整数倍,便于数据的操作 3. 当然数据的格式可以根据系统的需求由程序员自己定义
二、FLASH 数据的读取 数据的读取程序在系统运行的任何时候都可以执行,只要知道数据在 flash 的具体地址就行。 不会影响可执行代码,程序员可根据系统的实际需要进行设计 三、FLASH 数据的保存和擦除 数据的保存需要对 flash 进行擦除和编程,在进行擦除和写数据的时候,系统程序一般是不 能正常运行的,因此 FLASH 数据的保存需要特殊处理,一般情况下是在系统关机的时候进 行操作,操作结束后,可以选择关闭系统电源或者系统重新启动。 由于执行 flash 擦除和编程的时候,是对 flash 进行操作,中央处理器不能从 flash 直接运行 程序代码,解决这个问题的方法是,将执行 flash 擦除和编程的这段代码搬运到 RAM 里面 执行,这就好像电脑从硬盘先将软件拷贝到内存,然后在内存里面运行该程序。由于需要将 执行 flash 擦除和编程的这段代码搬运到 RAM 里面,从而可能破坏 RAM 的原始数据,这也 是该功能尽量在系统关机的时候进行操作的原因之一。当然程序员也可以在 RAM 里开辟一 块区域专门用来存放这段代码,还有一种方法是用堆栈来实现,这是最好的方法。因此这里 的重点就是:  数据保存的程序  将数据保存的程序拷贝到 RAM 的代码  擦除 FLASH 空间的代码  向 FLASH 空间写数据的代码  RAM 地址的重新分配以及变量的定义  相关的逻辑 四、数据的保存逻辑 按照上面的例子,所选取的 MCU 内部的 FLASH 的页大小为 512Bytes,也就是说擦除一次, 可以保存 512/32=16 次,因此,保存数据之前,要先确定所要保存的数据、保存数据的地址; 保存的数据很好确定,只要分配一个 32bytes 的 buffer 就好了。要确定保存数据的地址,就 要知道已经写了多少 bytes 的空间,根据数据的格式,采用查询的方法,因为 0xAB 是起始 标志,因此我们只要从该空间的首地址 0xXXXX 保存的数据开始查询,如果是 0xAB,则查 询地址 0xXXXX+32 对应的数据是否是 0xAB,依次类推;如果不是 0xAB,说明该地址是 这次需要保存数据的起始地址。这样就可以编写程序进行数据写入了! 同时,由于在系统初始化的时候,需要把 flash 的数据取出来使用,我们采用同样的数据判 断逻辑,将最后一次保存的数据区域找出来,因此实际上,在系统初始化读取数据的时候, 也就确定了下一次保存数据的 flash 地址,只要把该地址保存好,系统关机的时候,直接根 据该地址保存数据就好了。 需要注意的地方是:当 flash 为空白或者数据已满的情况下,如何读取和判断数据是关键。 五、flash 擦除和编程 带有 flash 的单片机,一般都有 flash 的擦除指令和编程指令,有些甚至提供了功能丰富的擦 除代码和编程代码,程序员可以根据单片机厂商提供的芯片资料选择合适的实现方法 五、源代码 源代码是在 Motorola AC48 单片机基础上开发的,读者可参考之, SaveDataToFlash.rar
分享到:
收藏