![](https://csdnimg.cn/release/download_crawler_static/20056436/bg1.jpg)
© 2014 Microchip Technology Inc. DS01449A_CN 第1页
AN1449
简介
向 EEPROM 存储计数器值时的一个常见问题是,可实
现的最大计数会受到计数器中的最低有效字节(Least
Significant Byte,LSB)可擦写次数的限制。典型
EEPROM的可擦写次数约为100,000次。
当应用所需计数超过这一数字时,有必要将计数器更新
值分散载入至多个字节,以实现可能的最大计数,而不
管是否会因EEPROM的可靠性出问题而引发错误。
在单元可擦写次数为 10 万次的 EEPROM 上,理论上能
将可实现的最大计数增至10万次,方法是与计数器使用
的字节数相乘。
概述
本计数器库实现了多种策略,以确保在给定可用于计数
器的 EEPROM 空间的情况下,以可达到的最大有效计
数器值实现可靠的计数器。
这些策略可总结如下:
1. 使用纠错码(汉明码)识别单元失效并纠正单位
错误。
2. 使用格雷编码确保计数器中的任一增量都只更改
EEPROM中的一个字节。
3. 可选择存储计数器的冗余副本,以允许从多位单
元失效中恢复。
4. 立即读回任意写入的数据以验证是否成功写入。
5. 存储字节映射以跟踪单元失效并允许通过重定位
失效的计数器字节来刷新存储单元,而不管单元
失效的顺序为何。
实现细节
纠错码
所有数据均使用(8,4)汉明码进行存储。利用此编
码,用户将能够纠正任何单位错误,并检测到任何 2 位
错误。此外,还可以检测到大部分超过两位的错误。
为避免常见的 EEPROM 单元失效模式,我们选择了汉
明码来避免使用单元值0xFF和0x00。
一个(8,4)汉明码使用八个位,如表1所示。
格雷编码
为确保计数器的单个增量不需要更新多个 EEPROM 单
元,我们使用格雷码来存储计数器值。
典型实现将使用32个位来存储1个计数器。将此编码转
换为简单的 32 位格雷编码值后,计数器值递增时只有
一位会发生变化。这意味着,即使实现字节级汉明码,
每次计数器递增时也只更改一个字节/EEPROM单元。
只需将计数器值与自身右移一位后所得的值进行异或运
算,即可生成格雷码。这是一种常见且非常有效的构造
标准循环格雷码的算法。此类型的格雷码称为反射格雷
码,其特性如下:LSb 每两个计数跳变一次,接下来的
一位每四个计数跳变一次,第三个最低有效位(Least
Significant bit,LSb)每八个计数跳变一次,依此类推。
作者:
Cobus Van Eeden
Microchip Technology Inc.
表1:汉明码
数据 编码 数据 编码
0 0x80 8 0x34
1 0x07 9 0x4C
2 0x19 10 0xAD
3 0x01 11 0xD5
4 0x2A 12 0x9E
5 0x52 13 0xE6
6 0xB3 14 0x0F
7 0xCB 15 0x7F
高可靠性的高频EEPROM 计数器