реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Увеличение количества циклов записи в EEPROM, как правильно программно?
Rst7
сообщение Mar 21 2007, 17:01
Сообщение #16


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(CD_Eater @ Mar 21 2007, 15:22) *
Почему при использовании кода Грея будет равномерный износ ячеек? Мне кажется, это не так, потому что в коде Грея младшие биты меняются гораздо чаще старших, в этом он ничем не отличается от двоичного кода. Это легко проверить, вспомнив формулу перевода двоичного кода в код Грея (там просто XOR соседних битов).


При изменении на +-1 меняется только ОДИН бит, значит все будут равномерно изменяться

Цитата
Код Грея не даёт других преимуществ кроме "атомарности" операции, что само по себе часто бывает полезным.


см. выше


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Mar 21 2007, 17:33
Сообщение #17


Частый гость
**

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Rst7, Вы не правы. Байт, отвечающий за младший биты счётчика, будет перезаписываться каждое второе приращение, а старший бит счётчика изменится только один раз за весь диапазон !
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2007, 18:26
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(CD_Eater @ Mar 21 2007, 16:33) *
Rst7, Вы не правы. Байт, отвечающий за младший биты счётчика, будет перезаписываться каждое второе приращение, а старший бит счётчика изменится только один раз за весь диапазон !
Да, справился с Гуглем, признаю, что был не прав. Получается, преимущество только одно - удалась запись или не успела закончиться при снятии питания - счетчик не порушится а лишь успеет/не успеет увеличить значение.

А перезапись на каждое второе приращение счетчика - уже вдвое увеличивает ресурс, вот wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 21 2007, 18:32
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Есть предложение. Кто-нибудь может привести конкретную формулу как часто можно писать в EEPROM, учитывающую количество свободных байт, таким образом чтоб обеспечивалась гарантированная работоспособность девайса в течение 2-лет (Закон о защите прав потребителей) ну и само собой программный код на Си, обеспечивающий это. Я бы принял это за отраслевой стандарт, как я думаю и многие другие.

А еще удобней, если рассчет будет опираться на количество часов непрерывной работы.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Mar 21 2007, 18:41
Сообщение #20



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Соглашусь с предыдущими ораторами - при такой частоте записи разумнее использовать FRAM или NVRAM того или иного вида, а не EEPROM.
Но возник вопрос: назначение этой char n? Счетчик числа включений? Разрядность маловата. seed для rndg? Дык вроде бы питание не снимается, а только в powerdown контроллер падает.
Собственно нужна ли такая частота записи? И чем состояние коробочки сейчас отличается от ее состояния 256 секунд тому?
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 21 2007, 19:12
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Дык вроде бы питание не снимается, а только в powerdown контроллер падает.


Уже переписал все так, что в данном конкретном приложении удалось обойти эту ситуацию.

Но есть другие, где запоминание байта (иногда и бита хватает) будет важно. Например, питание (возможно ошибочно) было выключено во время нахождения в powerdown. Иногда полезно вести статистику возникновения ситуаций в эксплуатации, интенсивность эксплуатации... да мало что еще...


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2007, 19:19
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Если записи одинакового формата. То счетчик можно хранить прямо внутри записи. При старте последовательно вычитывать все записи, найти запись с макс счетчиком и продолжать записывать со сл. места, инкрементируя счетчик естессно.
Go to the top of the page
 
+Quote Post
acorn
сообщение Mar 21 2007, 21:56
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



Цитата(defunct @ Mar 21 2007, 18:19) *
Если записи одинакового формата. То счетчик можно хранить прямо внутри записи. При старте последовательно вычитывать все записи, найти запись с макс счетчиком и продолжать записывать со сл. места, инкрементируя счетчик естессно.

когда дойдем до 255 (или 65535 - это вряд-ли для встроенного EEPROM) и переполнимся - как писать/искать будем?
Go to the top of the page
 
+Quote Post
proba
сообщение Mar 21 2007, 22:55
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 358
Регистрация: 29-05-05
Пользователь №: 5 526



если сделать кольцевои счетчик из 256 баит то число перезаписеи и растет 256 раз. если из 512 баит то получится ок. 50 млн. циклов.
некоторые EEPROM ( и все FLASH) имеют запиь без стирания, там можно атомарно биты писать, каждыи баит при том имеет 9 состоянии : FF,FE,FC,F8,F0,80,40,20,10,00.
я сделал таким образом счетчик в FLASH е , 125 баит как колцевои счетчик ( мах число = 125 x8= 1000) , а переполнение , т.е. тысячи считал в оставшихся 3 баитах. получилось счетчик, где происходить 1 стирние на 1000 единиц .учитывая ресурс Flash 100K , общии износь будет на 100млн. но не сложно удлинить кольцо 2 ^ N раз
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Mar 21 2007, 23:31
Сообщение #25


Частый гость
**

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Почему запись без стирания не считается изнашивающей операцией?
Go to the top of the page
 
+Quote Post
xemul
сообщение Mar 22 2007, 09:55
Сообщение #26



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(smk @ Mar 21 2007, 19:12) *
Но есть другие, где запоминание байта (иногда и бита хватает) будет важно. Например, питание (возможно ошибочно) было выключено во время нахождения в powerdown. Иногда полезно вести статистику возникновения ситуаций в эксплуатации, интенсивность эксплуатации... да мало что еще...

При мониторинге событий обычно интересны не только сами события, но и время их возникновения. Для мониторинга питания есть специально обученные логгеры у DallasSemi. По любому для этих целей удобнее удобнее использовать что-нибудь с более быстрым циклом записи, чем у ЕЕПРОМ.
А в качестве примера использования кольцевого буфера в EEPROM - те же одометры в машинках. В VW'ах, например, пройденный путь пишется в 3 байта, буфер или 24, или 48 байт (не помню, давно ковырял), дискретность записи (LSB) 100 м. Несложно подсчитать, что VW не расчитаны на пробег более 1677721 кмsmile.gif

Цитата(proba @ Mar 21 2007, 22:55) *
если сделать кольцевои счетчик из 256 баит то число перезаписеи и растет 256 раз. если из 512 баит то получится ок. 50 млн. циклов.
некоторые EEPROM ( и все FLASH) имеют запиь без стирания, там можно атомарно биты писать, каждыи баит при том имеет 9 состоянии : FF,FE,FC,F8,F0,80,40,20,10,00.

А можно ссылочку на pdf таких занятных EEPROM и всех FLASH, которые умеют писАть без (скрытого) стирания, да еще и по-битово?
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 22 2007, 11:10
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Несложно подсчитать, что VW не расчитаны на пробег более 1677721 км

А больше и не надо. Вообще-то и половины более чем достаточно.

Я имел ввиду ведение статистики наступления событий. Например производим ежесекундный мониторинг какого-то события. качество события может характеризоваться тремя значениями: не произошло; произошло, но мало; произошло полностью. Ну вот и пишем статистику, а при попадании изделия на ремонт или по снятии с эксплуатации читаем статистику и делаем выводы. Полезно с позиций оценки ресурса датчиков событий, например...


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Григорий2000
сообщение Mar 29 2007, 15:56
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210



Самое простое - это хранение в начале/конце еепром структуры с адресами "рабочих" структур счетчиков в которых содержится как значение, так и счетчик циклов(применяется некоторая неиспользованность и считаю только до 65535 а не 100к, хотя это - дело вкуса) и все!
перезапись каждой ячейки происходит гарантированно меньше 100к раз!
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Mar 29 2007, 22:31
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



>> Но вот только ходят слухи, что главный бич FRAM-ок
>> - это нестабильность в общем полупроводниковом смысле
>> (от питания/температуры). Любопытно было бы послушать
>> "пострадавших".

да во многих счетчиках электроэнергии бытовых и промышленных стоит FRAM. Тестировали, дошли до 3E+7 циклов чтение-приращение-запись-проверка, дальше забили - уже превышает срок жизни изделия.
По поводу хитрых алгоритмов записи в EEPROM - смущает длительное время записи - вероятность потери данных выше (так как нужно использовать дублирование и при считывании мажоритарную выборку). Но в общем тоже сейчас над этим думаю... Правда стремно уходить от проверенных временем решений - сброс счетчика энергии это все равно что непрописать данные в фискальный модуль кассы =(
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 30 2007, 00:54
Сообщение #30


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(acorn @ Mar 21 2007, 20:56) *
когда дойдем до 255 (или 65535 - это вряд-ли для встроенного EEPROM) и переполнимся - как писать/искать будем?

Нужно чтобы количество записей было меньше разрешающей способности счетчика, тогда с поиском никаких проблем. Вот набросал пример:

Код
#define STORAGE_SIZE 128

typedef struct tagSTORAGE_REC
{
    U8 Sequence;
} TSTORAGE_REC, *PSTORAGE_REC;

TSTORAGE_REC Storage[STORAGE_SIZE];

U8 MaxSequenceIndex(void)
{
    U8 retval = 0;
    U8 max = Storage[0].Sequence;
    U8 i;
    
    for (i = 1; i < COUNT(Storage); i++)
       if (max < Storage[i].Sequence)
       {
          max = Storage[i].Sequence;
          retval = i;
       }
    return retval;
}

#define Next( Index ) ((Index) >= (STORAGE_SIZE -1)) ? 0 : Index + 1;
      
void Store(void)
{
    U8 Idx = MaxSequenceIndex(); // index for the next cell to write data to
    U8 Sq = Storage[ Idx ].Sequence;
    
    if ( Sq == 0xFF )
    { // warp
       U8 OldSq;
       U8 delta;
       do
       {
           OldSq = Sq;
           Idx = Next( Idx );
           Sq = Storage[ Idx ].Sequence;
           delta = Sq - OldSq;
       } while (  delta == 1);
       Sq = OldSq;
    }
    else
    { // normal case
       Idx = Next( Idx );
    }
    Sq += 1;
    Storage[ Idx ].Sequence = Sq; // Записываем..
}
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016