salon 发表于 2009-5-3 11:53:44

请问大家是怎么处理EEPROM的坏块的?

我现在有一个表要存到EEPROM里面,如:
01地址存的是:1    //序列号,MCU先找到它,在根据它找到它对应的数据
02地址存的是:22   //系列号1所对应的数据。
03地址存的是:6    //序列号
04地址存的是:AA   //系列号6所对应的数据。
05地址存的是:10   //序列号
06地址存的是:CC   //系列号10所对应的数据。
.........
现在我在写EEPROM的时候发现04地址是坏块,于是我就要写成:
01地址存的是:1    //序列号,MCU先找到它,在根据它找到它对应的数据
02地址存的是:22   //系列号1所对应的数据。
03地址存的是:6    //序列号
04地址存的是:XX
05地址存的是:XX
06地址存的是:AA   //系列号6所对应的数据。
07地址存的是:10   //序列号
08地址存的是:CC   //系列号10所对应的数据。
.........

但是我在以后读EEPROM的时候怎么知道04地址的数据是错误的,而去读06地址的数据呢?

aozima 发表于 2009-5-3 12:01:30

把数据以反码的形式在EEPROM里面再保存一份.

salon 发表于 2009-5-3 12:24:04

谢谢,这个办法不错,但如果我有999个序列号要查,再加上再保存的那份,是不是数据量有点大呢?

fsclub 发表于 2009-5-3 12:56:26

我的办法是换个好的片子。

aozima 发表于 2009-5-3 13:03:01

同硬盘RAID一样不管你用RAID*   不用两倍的空间存储同一数据的话数据坏了都没办法找回来
楼上说的换个好片子在没坏之前谁知道哪个片子好不好?当然,首先要选择采购可靠的芯片坏的机率小一些

你是999个序列号我按一K个算   一个序列号按32byte算(不够长? 我没见过更多的)   就是32K一个24C256即可
备份一次两片24C256或一片24C512

也不算大嘛   如果说你这个设备上电要同时读取全部序列号那我只能说是很BT

makesoft 发表于 2009-5-3 13:07:45

楼上说的正确,折腾这种事情的唯一理由就是芯片的不良率成品理论上就是存在的。

salon 发表于 2009-5-3 13:50:25

多谢。

Halley 发表于 2013-3-7 17:17:29

原来eeprom和flash都有坏块啊!

雨雪随行 发表于 2013-3-7 20:56:25

大胡子说得对。

lz没有看过flash坏块管理吧? 简化一下就能用了,第一个字节保存逻辑地址偏移
页: [1]
查看完整版本: 请问大家是怎么处理EEPROM的坏块的?