Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR+Eeprom 2-serial Алгоритм увеличения количества записей
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Bekass
Есть Eeprom , ее ресурс записи максимум 1000000 раз.
Необходимо записывать данные примерно раз в 0.5-1 секунду на срок 30-50 лет....
Судя по расчетам на такое времени одной ячейки памяти не хватит...
Может кто встречался с алгоритмами записи (по разным ячейкам, по битово или еще как-то ) для таких многократных режимов write ????? wub.gif wub.gif wub.gif
otrog
Еще есть FRAM ее ресурс записи неограничен.
http://electronix.ru/forum/index.php?showt...9&hl=fram&st=15
Bekass
Fram Дороже Eeprom , поэтому выбор руковадстав пао на Eeprom sad.gif
bzx
Идея простая - писать информацию по разным адресам EEPROM. Для этого надо знать характер записываемых данных, только тогда можно предложить эффективный алгоритм записи и восстановления данных.
vesago
Я пишу по кольцу, а указатели храню в FRAM. FRAM у меня с чесами реального времени, супервизором и памятью на 32к. Если не использовать какой-то памяти для хранения указателей, то надо решить проблему синхронизации. Наверное можно строить запись таким образом, что она фиксированной длинны и имеет уникальный номер или дату время. Тогда при старте проц может отыскать место, куда ложить новую запись.
arttab
Самое простое писать по кольцу, следя чтоб было место для новой записи (это будет указатель на то куда писать новую запись) и если место кончается стирать "перед" собо1 (FF -> 00).
Не оригинально и признак начала записи может понадобиться, зато просто.
AndyBig
У Атмела есть аппноут, посвященный этому. Там организуется именно кольцевая запись, но без отдельного хранения указателя начала. Точно не помню как, но как-то очень просто smile.gif.
defunct
Цитата(AndyBig @ Jun 6 2006, 22:33) *
Точно не помню как, но как-то очень просто smile.gif.

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

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

Да довольно 'компетентное' у Вас руководство... при непрерывной записи с интервалом в 0.5 сек. eeprom-ма хватит всего лишь на ~5.5 лет. smile.gif
А чем внутреннее ОЗУ то неустраивает?
nameless
Совсем недавно аналогичная задача встала из-за непредсказуемого на объекте поведения питалова...
Так вот. Если запрещенных комбинаций нет (типа 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]
И память перетирать при этом не страшно!
BVU
Задачу можно решить более простым способом, которая увеличит срок службы системы не до 50-ти, а более лет. На вычислительное устройство, как автономный источник питания ставиться ионистр (на случай сбоя внешнего питания) и периодически контролируется внешнее питание. Запись данных производится в ОЗУ. При обнаружении отключения внешнего питания, данные начинают записываться в eeprom либо система с течением времени (в зависимости от энергоресурса ионистора) консервируется до 'до лучших времен'. Поведенческих вариантов системы можно придумать великое множество исходя из условий эксплуатации.
SasaVitebsk
Цитата(BVU @ Jun 8 2006, 09:56) *
Задачу можно решить более простым способом, которая увеличит срок службы системы не до 50-ти, а более лет. На вычислительное устройство, как автономный источник питания ставиться ионисть (на случай сбоя внешнего питания) и периодически контролируется внешнее питание. Запись занных производится в ОЗУ. При обнаружении отключения внешнего питания, данные начинают записываться в eeprom либо система с течением времени (в зависимости от энергоресурса ионистора) консервируется до 'до лучших времен'. Поведенческих вариантов системы можно придумать великое множество исходя из условий эксплуатации.


Я бы сделал так.
Раз идёт разговор о 30 годах НЕПРЕРЫВНОЙ записи, то похоже запись в EEPROM предназначена для возможной аварии. Поэтому предложенное выше решение, на мой взгляд, - самое верное.
bzx
На самом деле ионистр избыточен, к томуже он догорогой. Развязывается по питанию диодом (лучше Шотки) микроконтроллер, который будет писать в EEPROM и сама энергонезависимая память. После диода ёмкость на 100-200мкФ - этого должно хватить с лихой. Если всё делать по честному, то надо знать какой объём будет писаться, размер страничной записи, время записи, ток потребления. Исходя из этиз критериев вичисляется ёмкость.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.