Есть Eeprom , ее ресурс записи максимум 1000000 раз.
Необходимо записывать данные примерно раз в 0.5-1 секунду на срок 30-50 лет....
Судя по расчетам на такое времени одной ячейки памяти не хватит...
Может кто встречался с алгоритмами записи (по разным ячейкам, по битово или еще как-то ) для таких многократных режимов write ?????
Fram Дороже Eeprom , поэтому выбор руковадстав пао на Eeprom
Идея простая - писать информацию по разным адресам EEPROM. Для этого надо знать характер записываемых данных, только тогда можно предложить эффективный алгоритм записи и восстановления данных.
Я пишу по кольцу, а указатели храню в FRAM. FRAM у меня с чесами реального времени, супервизором и памятью на 32к. Если не использовать какой-то памяти для хранения указателей, то надо решить проблему синхронизации. Наверное можно строить запись таким образом, что она фиксированной длинны и имеет уникальный номер или дату время. Тогда при старте проц может отыскать место, куда ложить новую запись.
Самое простое писать по кольцу, следя чтоб было место для новой записи (это будет указатель на то куда писать новую запись) и если место кончается стирать "перед" собо1 (FF -> 00).
Не оригинально и признак начала записи может понадобиться, зато просто.
AndyBig
Jun 6 2006, 19:33
У Атмела есть аппноут, посвященный этому. Там организуется именно кольцевая запись, но без отдельного хранения указателя начала. Точно не помню как, но как-то очень просто

.
defunct
Jun 6 2006, 20:41
Цитата(AndyBig @ Jun 6 2006, 22:33)

Точно не помню как, но как-то очень просто

.
Можно в заголовке записи указывать размер и номер записи перед самой записью. Получится нечто похожее на MCB (memory control block) цепочку в DOS.
Чтобы удвоить ресурс при записи счетчика, я пишу четные значения по одному адресу, а нечетные - по другому. При чтении читаются оба значения и выбирается бOльшее.
Цитата(AndyBig @ Jun 7 2006, 02:33)

У Атмела есть аппноут, посвященный этому. Там организуется именно кольцевая запись, но без отдельного хранения указателя начала. Точно не помню как, но как-то очень просто

.
Хранить вообщем и не надо. Нодо чтоб всегда было свободное место. и искать его снизу вверх (или наоборот - зависит от подхода).
Если остаются место под 1 запись надо очистить старую (заголовак может подтереть) и потом уже записать. и так по кругу. самая свежая запись перед свободным полем
30 г. = 946 080 000 сеk. т.е. как минимум нужен колцевои запись в 1024 ячеики. 1 баит FRAM стоит наверно менше чем 1024 баит EEPROM.
А можно подключить компаратор на контроль падения напряжения питания и при его срабатывании запрещать все прерывания и сохранять данные. Если контролировать питание до стабилизатора то времени хватит забить байт 100 (зависит от емкости конденсатора перед стабилизатором).
Цитата(Bekass @ Jun 6 2006, 11:20)

Fram Дороже Eeprom , поэтому выбор руковадстав пао на Eeprom

Да довольно 'компетентное' у Вас руководство... при непрерывной записи с интервалом в 0.5 сек. eeprom-ма хватит всего лишь на ~5.5 лет.

А чем внутреннее ОЗУ то неустраивает?
nameless
Jun 7 2006, 13:16
Совсем недавно аналогичная задача встала из-за непредсказуемого на объекте поведения питалова...
Так вот. Если запрещенных комбинаций нет (типа FF или 00), то придется делать два кольца...вот я и увеличивал время жизни 128 раз. Весь косяк в том, что нельзя переписать битовые поля отдельно друг от друга. Поэтому время жизни обозначено для байта и точка.
unsigned char __eeprom EE_ring[128] @ 128;
unsigned long __eeprom EE_abs_DATA_num[128] @ 256;
void EE_ring_restore(void)
{
unsigned char i;
for(i=0;i<128;i++)
{
if(EE_ring[i]==0x00)
{
ring = i;
break;
}
}
if(ring==128)
{
ring=0;
EE_ring[0]=0;
}
}
void EE_do_new_ring(void)
{
EE_ring[ring]=0xFF;
ring = (ring+1)&127;
EE_ring[ring]=0;
}
ring - глобальная в сраме. Потом в майне обращаюсь к EE_abs_DATA_num[ring]
И память перетирать при этом не страшно!
Задачу можно решить более простым способом, которая увеличит срок службы системы не до 50-ти, а более лет. На вычислительное устройство, как автономный источник питания ставиться ионистр (на случай сбоя внешнего питания) и периодически контролируется внешнее питание. Запись данных производится в ОЗУ. При обнаружении отключения внешнего питания, данные начинают записываться в eeprom либо система с течением времени (в зависимости от энергоресурса ионистора) консервируется до 'до лучших времен'. Поведенческих вариантов системы можно придумать великое множество исходя из условий эксплуатации.
SasaVitebsk
Jun 8 2006, 08:06
Цитата(BVU @ Jun 8 2006, 09:56)

Задачу можно решить более простым способом, которая увеличит срок службы системы не до 50-ти, а более лет. На вычислительное устройство, как автономный источник питания ставиться ионисть (на случай сбоя внешнего питания) и периодически контролируется внешнее питание. Запись занных производится в ОЗУ. При обнаружении отключения внешнего питания, данные начинают записываться в eeprom либо система с течением времени (в зависимости от энергоресурса ионистора) консервируется до 'до лучших времен'. Поведенческих вариантов системы можно придумать великое множество исходя из условий эксплуатации.
Я бы сделал так.
Раз идёт разговор о 30 годах НЕПРЕРЫВНОЙ записи, то похоже запись в EEPROM предназначена для возможной аварии. Поэтому предложенное выше решение, на мой взгляд, - самое верное.
На самом деле ионистр избыточен, к томуже он догорогой. Развязывается по питанию диодом (лучше Шотки) микроконтроллер, который будет писать в EEPROM и сама энергонезависимая память. После диода ёмкость на 100-200мкФ - этого должно хватить с лихой. Если всё делать по честному, то надо знать какой объём будет писаться, размер страничной записи, время записи, ток потребления. Исходя из этиз критериев вичисляется ёмкость.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.