|
Проблема с DataFlash AT45DB161D, Умирает память |
|
|
|
Sep 15 2009, 06:51
|
Группа: Участник
Сообщений: 3
Регистрация: 17-03-07
Пользователь №: 26 260

|
Столкнулся с такой проблемой, после 3-х – 5-и месяцев использования перестает работать Dflash AT45DB161D. Причем выпадает вся память, даже те страницы в которые не велась запись. Память используется для хранения счетчиком, и накопления статистики; средняя частота записи 1 мин. Кто сталкивался с такой проблемой отзовитесь плиз!!!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 21)
|
Sep 15 2009, 08:49
|
Местный
  
Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410

|
60*24*30*5 = 216000, что уже в 2 раза больше гарантируемого ресурса. Во вторых, там есть приписка, что если писать в одну страницу больше чем 10000 раз подряд, то надо перезаписывать весь сектор Цитата Each page within a sector must be updated/rewritten at least once within every 10,000 cumulative page erase/program operations in that sector
|
|
|
|
|
Sep 16 2009, 12:02
|
Группа: Участник
Сообщений: 3
Регистрация: 17-03-07
Пользователь №: 26 260

|
Цитата(Itch @ Sep 16 2009, 13:17)  или взять флешку побольше и организовать циклический буфер. Циклический буфер там реализован, единственое что не делается так ето, что если писать в одну страницу больше чем 10000 раз подряд, то надо перезаписывать весь сектор. Насколько ето кретично и как ето делать?
|
|
|
|
|
Sep 25 2009, 11:39
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-09
Пользователь №: 52 554

|
Цитата(xemul @ Sep 15 2009, 12:00)  Если такая интенсивность записи топикстартеру действительно необходима, то его спасет только что-нить вроде FRAM. Полностью поддерживаю. Для накопления большой статистики, действительно, альтернативы flash-памяти нет. Но тогда нужно помнить о необходимости erase/write достаточно больших страниц данных, которые иногда просто негде хранить на время erase. Когда лет 6 назад я предложил писать статистику во fram у меня было мало сторонников - очень высокая стоимость. Тем не менее, я настоял на fram 32K (всего, хотя это было не 5 копеек). Работает без проблем по сей день. Применяю и в новых разработках, только 64K (цена уже таже). Проще поработать над форматом действительно необходимых данных и не разрабатывать велосипедные алгоритмы перезаписи по счетчику, который тоже нужно где-то хранить. Если данные изменяются не часто, тогда flash без проблем. Есть еще и eeprom, но это зависит от конкретной задачи, правильная формулировка которой уже должна привести к оптимальному решению.
|
|
|
|
|
Sep 26 2009, 15:15
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Подозреваю, что andron86 неверно понимает фразу "циклическая запись в ФЛЕШ"  2 andron86:Циклическая запись - это не запись в цикле (в одни и те же ячейки памяти). Под циклической записью подразумевается такой метод записи в память, когда каждый обновившийся блок данных пишется не по старому адресу, а по новому, еще не занятому. По заполнению всей флеши выполняется стирание и запись начинается сначала. Т.е. цикл идет по адресам флеши. Естетственно, рзмер флеши должен быть в N раз больше размера блока данных. Таким образом мы продлеваем жизнь флеши в N раз. Алгоритмы записи в общем случае могут различаться, но принцип остается тот же.
|
|
|
|
|
Sep 28 2009, 08:35
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Itch @ Sep 28 2009, 10:04)  Собсна, недостаток видится только один - необходимость просканировать практически всю флешку на предмет свободного блока при инициализации. Свободный блок - это тот, на котором последовательный номер записи прыгает вниз. Т.е. |... 521 522 105 106 107 ...| - свободный 105-ый. Через надцать кругов работы |50001 50002 ... 55123 55124| - свободный 50001-ый На старте везде нули. Такой перепад ищется не полным сканированием флешки, а методом половинного деления, для 1024 блоков прочитать придётся, если не глючу, 11.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 28 2009, 20:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(IgorKossak @ Sep 28 2009, 22:47)  Только спустя некоторое время после перехода через ноль такой "прыжок" застрянет в одном месте, т. е. при |65534 65535 0 1 ... 10 65123 ... | сканирование покажет на 0 как на свободный, а не на 65123 если подобное не учесть в алгоритме сканирования. имелась ввиду конструкция вида: Код ((A[i]+1) % max_cnt) != (A[i+1]) P.S. Уже не один раз кидал ссылку на Атмеловский Appnote AVR101: High Endurance EEPROM Storage. Советую всё-таки ознакомиться.
|
|
|
|
|
Sep 28 2009, 20:46
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Petka @ Sep 28 2009, 23:18)  имелась ввиду конструкция вида: Код ((A[i]+1) % max_cnt) != (A[i+1]) Та не, имелся ввиду таки перепад вниз, при двоичном поиске для выбора половины важно именно больше/меньше. Но я не вижу проблемы в том, чтобы сделать в качестве ключа, к примеру, 32-битный unixtime, который в логе и так не помешает. При этом даже несколько записей в одну секунду не поломают алгоритм.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|