Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.07.2008, 14:18
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
База данных в at24с1024
Как лучше организовать?
В общем проблема то вот в чем. Память имеет ограничение количества записей - 100 000. Мне необходимо делать около 5 000 записей в день, одна запись 5 байт. И устройство должно работать лет 10. Вот и задачка.
При таком раскладе памяти хватит на 20 дней.
Память микросхемы 131072 байт.
Можно эти 5 байт записывать не в одну ячейку, а каждый раз в новую. Тогда нужен указатель. Если указатель будем записывать в ту же память, то выйдет то же самое.
Если под указатель выделить например 2000 байт и перемещать его, предыдущее значение затирая 0xFF, и искать указатель, перебирая ячейки пока не будет значение не 0xFF, проблему решает. Но появляется другая проблема. После события в программе запись должна произойти не позднее чем через 200мс после события. А считывание 2000 байт по и2с занимает около 800мс, многовато времени...
Может у кого то есть еще идеи, как можно это все побороть?
|
|
|
|
18.07.2008, 16:46
|
|
Прописка
Регистрация: 19.08.2004
Сообщений: 156
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
|
|
|
|
20.07.2008, 18:55
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: База данных в at24с1024
Сообщение от dimonbest
|
Как лучше организовать?
В общем проблема то вот в чем. Память имеет ограничение количества записей - 100 000. Мне необходимо делать около 5 000 записей в день, одна запись 5 байт. И устройство должно работать лет 10. Вот и задачка.
При таком раскладе памяти хватит на 20 дней.
Память микросхемы 131072 байт.
Можно эти 5 байт записывать не в одну ячейку, а каждый раз в новую. Тогда нужен указатель. Если указатель будем записывать в ту же память, то выйдет то же самое.
Если под указатель выделить например 2000 байт и перемещать его, предыдущее значение затирая 0xFF, и искать указатель, перебирая ячейки пока не будет значение не 0xFF, проблему решает. Но появляется другая проблема. После события в программе запись должна произойти не позднее чем через 200мс после события. А считывание 2000 байт по и2с занимает около 800мс, многовато времени...
Может у кого то есть еще идеи, как можно это все побороть?
|
Указатель тоже меняешь.( я это делал через 256х256 записей)
В CVAVR это выглядить так.
Правда это делалось для внутреней EEPROM, но принцип тот же.
//////////////////////////////////////////////////////////////////////
void wr_poz (unsigned int b)
{
#asm ("cli")
if (BASEPOZ[ADR]‹64) BASEPOZ[ADR]=b; //ЗДЕСЬ НОМЕР ПОЗИЦИИ
else BASEPOZ[ADR]=b+128;
i=BASEPOZ[ADR+1];
i++;
if (i›255)i=0;
BASEPOZ[ADR+1]=i;//МЛАДШИЙ БАЙТ СЧЕТЧИКА ЗАПИСИ
if (BASEPOZ[ADR+1]==0)
{
i=BASEPOZ[ADR+2];//СТАРШИЙ БАЙТ СЧЕТЧИКА ЗАПИСИ
i++;
if (i›255)i=0;
BASEPOZ[ADR+2]=i;
}
if (BASEPOZ[ADR+2]==0&&BASEPOZ[ADR+1]==0) //ЕСЛИ ЭТО 65536 ЗАПИСЬ ТО МЕНЯЕМ
{ //АДРЕСС EEPROM
i=ADR;
i=i+2;
if (i›496) res_end();//i=0;
ADR=i; //ЗДЕСЬ НОМЕР ПОЗИЦИИ
BASEPOZ[ADR]=BASEPOZ[ADR-2];//b; //ЗДЕСЬ НОМЕР ПОЗИЦИИ
BASEPOZ[ADR+1]=0;
BASEPOZ[ADR+2]=0;
BASEPOZ[ADR-1]=255;
BASEPOZ[ADR-2]=255;
}
#asm ("sei")
}
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
21.07.2008, 10:56
|
|
Временная регистрация
Регистрация: 06.05.2005
Сообщений: 93
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Увеличить размер записываемого сообщения до 6 байт и в этот 6-ой байт писать порядковый номер сообщения, искать в массиве самый большой номер и от него продолжать запись. Это при перезагрузке программы, если не было перезагрузки, то текущий адрес записи хранить в озу, удобнее ЕЕПРОМ перед использованием обнулить, либо искать наименьший номер и номер уменьшать
|
|
|
|
21.07.2008, 12:55
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от demaven
|
...искать в массиве самый большой номер...
|
С поиском как раз таки и проблема, много времени на него тратится.
Сообщение от demaven
|
Это при перезагрузке программы, если не было перезагрузки, то текущий адрес записи хранить в озу
|
А это - идея
|
|
|
|
21.07.2008, 12:59
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Можно, только у нее обьем меньше, а цена выше:
FM24C512-G RAMTRON SO8 55.95грн. (~11$)
|
|
|
|
21.07.2008, 13:04
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
to woroba
За код спасибо. Но наверное проще всего хранить адрес в ОЗУ! Пока остановлюсь на этом.
|
|
|
|
21.07.2008, 14:53
|
|
Прописка
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
|
Сообщение от dimonbest
|
Можно, только у нее обьем меньше, а цена выше:
FM24C512-G RAMTRON SO8 55.95грн. (~11$)
|
Могу посоветовать промежуточный вариант - м/сх 93С76
"• 10,000,000 ERASE/WRITE cycles guaranteed", а цена ~0,5USD.
Прикрепленный файл: 4628615.pdf
|
|
|
|
21.07.2008, 15:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
я не хотел писать в эту тему, но все-таки - как говорится, имхо - вообще бы не связывался с еепром в таком раскладе (всего 5 байт, можно хранить в регистрах) - поставил бы батарейку и переводил в слип при отсутствии напруги.При появлении просыпался .
|
|
|
|
21.07.2008, 16:21
|
|
Временная регистрация
Регистрация: 06.05.2005
Сообщений: 93
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Сообщение от urry
|
(всего 5 байт, можно хранить в регистрах) - поставил бы батарейку и переводил в слип при отсутствии напруги.При появлении просыпался .
|
Вся беда в том, что батарейка имеет весьма неприятное свойство - садится и при этом теряются все данные.
Поиск осуществляется один раз после включения, а затем счетчик адреса хранится в озу
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:54.
|
|