liuyu305的笔记 https://bbs.21ic.com/?377612 [收藏] [复制] [RSS]

日志

FLASH二次写入(转hotpower )

已有 1153 次阅读2008-9-25 15:38 |个人分类:LPC2131|系统分类:单片机

FLASH作为存储的时候,特别是要多次擦写,这个就要考虑FLASH的寿命问题。


转个hotpower 的文章有些帮助。


 


所谓"FLASH二次写入"即某字节的某位为'1'时是可以写入'0'的,但'0'是不可以写入'1'的!!!

因为'0'想写入'1'是需要扇区擦除的!!!

利用"FLASH二次写入"是可以延长FLASH寿命和提高效率的.

常用的有"RAM计数器",即"FLASH计次器"

初始为0xff.

计数0为0xff--->1111 1111

计数1为0xfe--->1111 1110

计数2为0xfc--->1111 1100

...........................................

计数255为0x00--->0000 0000


 


 


由于FLASH写入次数和写入擦除等待时间等方面的约束,FLASH变量和FLASH计数器很难构成.
因为有'0'不能变'1'的束缚,所以FLASH变量不可以定位到某个存储单元地址上.
同理FLASH计数器也一样.

仔细分析"FLASH二次写入技术"后不难看出,若稍做变通,就可实现真正的FLASH变量和FLASH计数器.

计数器是每次遇到它都+/- 1,那么为什么不能每次清除1位变成"计次器"呢???
FLASH一般空间很大,而且几乎都是以扇区为单位擦除的.

那么假定FLASH计数器为8位,即0~255,那么就可分配256/8=32个字节作为"FLASH计次器",即:
0xff,0xff.....,0xff表示0x00
0xfe,0xff.....,0xff表示0x01
0xfc,0xff.....,0xff表示0x02
...........................
0x00,0xff.....,0xff表示0x07
0x00,0xfe.....,0xff表示0x08
0x00,0xfc.....,0xff表示0x09
...........................
0x00,0x00.....,0xff表示0x0f
...........................
0x00,0x00.....,0x00表示0xff

对于FLASH变量则必须采用每次改写地址+1的原则,还需要限制"写入次数".
故一般与FLASH计次器联合使用,即FLASH计次器实际为FLASH变量的"写入指针".
当"写入次数"满时才清除FLASH计次器和FLASH变量所在的扇区.

注意,FLASH计次器在初始化完成后就应该读到RAM中!!!
写入FLASH变量的同时也要更新FLASH计次器以备掉电后再将FLASH计次器的值读入RAM中.

一般FLASH变量是用于不频繁改写时,若需频繁改写,则再需要将FLASH变量读入RAM中.

即运行时在RAM中,掉电或上电时在FLASH中.


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)