Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino и энергонезависимая память
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт апр 03, 2026 12:06:11

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 86 ]    , 2, , ,  
Автор Сообщение
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 12:32:53 
Открыл глаза

Зарегистрирован: Сб ноя 04, 2017 19:21:12
Сообщений: 77
Рейтинг сообщения: 0
У меня не чисто бытовые цели, поэтому мой выбор - DS3231. Проверено временем, его точность меня полностью устраивает. Но дополнительной памяти у него, увы, нет.
Замените его на что-то из линейки FM31T372/374/376/378. И будет вам и RTC с погрешностью не более 2.5 минут за год (встроенный уже на заводе температурно-компенсированный кварц) и + несколько Кб FRAM. И всё это счастье в одном флаконе корпусе. И никакой мороки с кольцевыми буферами - можно писать в одни и те же адреса хоть до посинения!

Хорошая вещь, вот только достать ее у нас не так просто. Это DS-ки на каждом углу продаются.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 12:58:27 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Цитата:
Кольцевой буфер в ЕЕПРОМ всего делов то.

Склоняюсь пока к этому варианту.

https://github.com/chayanforyou/WearLev ... arLeveling - либа для Ардуино. Надо только ручками под свои нужды (размеры подправить).
Я у себя пишу структуру. 1 поле uint32_t - порядковый номер записи, далее пошли данные (фиксированный размер), далее в конце CRC16 на всякий случай. Ну и пишу по кругу и читаю после перезагрузки. По номеру записи определяю какая последняя.
Если реально только пару байт надо сохранять - можно значительно упростить и сократить "служебные данные".


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 16:01:58 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
По номеру записи определяю какая последняя.
Если реально только пару байт надо сохранять - можно значительно упростить и сократить "служебные данные".
А зачем там "номер записи"?
Кольцевой буфер на флеши строится просто: Кольцо из N секторов стирания. В котором как минимум один сектор должен быть стёрт. Вот от этого стёртого и нужно искать в сторону головы записи.
Представьте себе червяка, который ползёт по кольцу из секторов стирания. Как только он собирается заползти на новый сектор (сектор S1), то он сначала стирает сектор идущий за ним (сектор S2), а потом - начинает заползать на S1. Чтобы найти голову червяка, сначала ищем полностью стёртый сектор, а потом двигаемся от его границы (по байтам содержащим чистое значение (0xFF например)) в сторону головы червяка. Пока не наткнёмся на неё.
Длина червяка - это его размер в байтах. Каждая новая запись - одно тело червяка вперед по 0xFF-кам + 1 байт интервал (между записями).
Индексы никакие не нужны. Писать такое кольцо можно сразу - даже поверх заполненной мусором флеши (только обеспечивать чтобы всегда как минимум один полный стёртый сектор был в кольце). Предварительное стирание флеши не нужно.
Чтобы тело червяка отличать от чистой флеши (0xFF), нужно предварительно закодировать данные тела так, чтобы они не содержали стёртого значения (экранировать стёртое значение из данных).


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 18:03:24 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
jcxz, ну можно и так. У меня там свои нюансы были, мне стирать на сектор вперед неудобно было бы (накладных расходов больше). Плюсы и минусы у обоих способов есть.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 22:16:42 
Друг Кота

Карма: 1
Рейтинг сообщений: 91
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 9115
Откуда: .ru
Рейтинг сообщения: 0
Тема любопытная... тоже думаю как лучше сделать... :roll:

Наверно самое простое так:

1. Разбиваем EEPROM на сетора:

FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

2. Записываем данные в первый сектор:

1111111 FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

3. Записываем новые данные в новый сектор, а старый сектор стираем:

FFFFFFFF 1111111 FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

4. Записываем новые данные в новый сектор, а старый сектор стираем:

FFFFFFFF FFFFFFFF 1111111 FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

5. И т.д. ))

Получили кольцевой буфер.

Один недостаток - каждый сектор по два раза записываем и стираем. Износ EEPROM в два раза больше... :roll:
Но всё таки лучше чем писать всё в одно место))

Интересно... а кто реально проводил эксперименты по износу AVR ?
Действительно ли там ограничение на 100.000 циклов ?
Просто я так много ещё не писал))
:)


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 22:45:03 
Записываем новые данные в новый сектор, а старый сектор стираем

Такой вариант ресурс ячеек сокращает в двое. :facepalm:


Вернуться наверх
   
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 23:04:22 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Такой вариант ресурс ячеек сокращает в двое. :facepalm:
Ресурс считается по количеству стираний. Записывать можно сколько угодно.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Ср сен 02, 2020 23:51:32 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Цитата:
Интересно... а кто реально проводил эксперименты по износу AVR ?
Действительно ли там ограничение на 100.000 циклов ?

Где-то видел тесты. Реально по факту в разы больше.
Всё-таки поискал и вот, нашел: https://chipenable.ru/index.php/program ... iment.html
По факту что-то больше 3 млн циклов при 25*С. Просто 100К - это гарантированный производителем ресурс во всем температурном диапазоне МК. Это не значит, что после 100К записей внезапно всё начнет ломаться.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 00:14:45 
Записывать можно сколько угодно.

Вы с чтением не перепутали? Это читать можно сколько угодно, а стирать и записывать – только определённое количество раз. :)
Вложение:
1.png


Вернуться наверх
   
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 07:09:28 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
А много чего вы можете записать, не стирая? Думаете есть принципиальная разница сразу записать в ячейку один ноль, а позже еще один. Или сразу два нуля записать?


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 07:12:18 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 134
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1368
Рейтинг сообщения: 0
Записывать можно сколько угодно.

Вы с чтением не перепутали?

Всё верно. Запись и стирание - это разные операции.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 11:09:27 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Вы с чтением не перепутали? Это читать можно сколько угодно, а стирать и записывать – только определённое количество раз. :)
Не перепутал. Почитайте что такое "флешь-память" и о принципах её работы.

Добавлено after 5 minutes 53 seconds:
А много чего вы можете записать, не стирая? Думаете есть принципиальная разница сразу записать в ячейку один ноль, а позже еще один. Или сразу два нуля записать?
Разница - огромная!
Например у меня чип памяти с секторами стирания ==256КБ. А записывать нужно структуру размером например ==8 байт. Естественно я буду записывать в один сектор флешь кольцевого буфера 256*1024/8=32768 раз. И сотру его только 1 раз на каждые 32768 записи (когда сектор полностью заполнится).
Или Вы будете писать, а затем стирать сектор каждый раз при записи следующих 8 байт данных? Чтобы ресурс флеши поскорее убить? В 32768 раза быстрее чем нужно? :)))

PS: Правда для флешь памяти программ многих МК дело обстоит несколько сложнее: Там часто используют алгоритмы контроля (на аппаратном уровне) содержимого FLASH. И поэтому дописывать в произвольные смещения флешь - нельзя. А записывать можно элементами фиксированного размера (обычно == 16 байт). Но всё равно - это намного лучше чем стирать каждый раз перед записью заново весь сектор.
Для EEPROM-памяти таких ограничений нет.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 11:25:11 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
jcxz, я вообще-то не вам писал, а Самсусамыч. Соглашаясь с вашим утверждением, что "Ресурс считается по количеству стираний. Записывать можно сколько угодно.".
Но только зачем вы сейчас о страничном флэше пишете? Мы про EEPROM с по-байтовым доступом говорили. Где можно записать-стереть 1 байт отдельно.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 11:40:46 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Но только зачем вы сейчас о страничном флэше пишете? Мы про EEPROM с по-байтовым доступом говорили. Где можно записать-стереть 1 байт отдельно.
Ну - здесь уже о разных говорили. Даже о FRAM. :)
А EEPROM предложили как я помню - по той причине, что у неё ресурс стираний больше.
Но другой путь увеличения ресурса кольцевого буфера - это просто взять чип ФЛЕШЬ большого объёма (пускай с большими секторами стирания). И таким образом увеличить количество циклов записи на одно стирание.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 14:41:05 
Вы с чтением не перепутали? Это читать можно сколько угодно, а стирать и записывать – только определённое количество раз. :)
Не перепутал. Почитайте что такое "флешь-память" и о принципах её работы.

Я прекрасно знаю, что это такое и «с чем это едят». :wink:

Как Вы прокомментируете данный параметр?
Вложение:
3.png

А данное утверждение?
Вложение:
4.png

Будете продолжать настаивать, что «Записывать можно сколько угодно.»? :)) Ну-ну…
Цитата:
Ресурс записи
Изменение заряда сопряжено с накоплением необратимых изменений в структуре и потому количество записей для ячейки флеш-памяти ограничено. Типичные количества циклов стирания-записи составляют от десятков и сотен тысяч до тысячи или менее, в зависимости от типа памяти и технологического процесса. Гарантированный ресурс значительно более низок при хранении нескольких бит в ячейке (MLC и TLC) и при использовании техпроцессов класса «30 нм» и более современных.

Одна из причин деградации — невозможность индивидуально контролировать заряд плавающего затвора в каждой ячейке. Дело в том, что запись и стирание производятся над множеством ячеек одновременно — это неотъемлемое свойство технологии флеш-памяти. Автомат записи контролирует достаточность инжекции заряда по референсной ячейке или по средней величине. Постепенно заряд отдельных ячеек рассогласовывается и в некоторый момент выходит за допустимые границы, которые может скомпенсировать инжекцией автомат записи и воспринять устройство чтения. Понятно, что на ресурс влияет степень идентичности ячеек. Одно из следствий этого — с уменьшением топологических норм полупроводниковой технологии создавать идентичные элементы все труднее, поэтому вопрос ресурса записи становится все острее.

Другая причина — взаимная диффузия атомов изолирующих и проводящих областей полупроводниковой структуры, ускоренная градиентом электрического поля в области кармана и периодическими электрическими пробоями изолятора при записи и стирании. Это приводит к размыванию границ и ухудшению качества изолятора, уменьшению времени хранения заряда.


Последний раз редактировалось Самсусамыч Чт сен 03, 2020 14:54:23, всего редактировалось 1 раз.

Вернуться наверх
   
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 14:51:16 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Будете продолжать настаивать, что «Записывать можно сколько угодно.»? :)) Ну-ну…
И что? В чём именно противоречие с тем что я сказал?
Почитайте внимательнее что я писал. Вы похоже ничего не поняли. :dont_know:

А те цитаты, которые Вы дёргаете, толком не понимая о чём там говорится, говорят о количестве циклов записи/стирания для одной ячейки флешь. Один такой цикл - это один переход одной ячейки (для SLC - бита) из нестёртого состояния, в стёртое. Можно конечно считать не переходы 0->1, а переходы 1->0 - это будет то же самое количество.
И если скажем для сектора флеши размером 256КБ сделать 256*1024*8 = ~2М отдельных операций записи, в каждой операции модифицируя всего 1 бит, а потом стереть весь сектор, то счётчик циклов для всех ячеек сектора увеличится всего на 1. Вот об этом я и писал.


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 15:09:42 
Почитайте внимательнее что я писал. Вы похоже ничего не поняли. :dont_know:

Вы утверждаете в своём высказывании: https://radiokot.ru/forum/viewtopic.php ... 3#p3887233
Что записывать можно неограниченное количество раз («Записывать можно сколько угодно»). Я Вам привожу факты, что это не так, так как ресурс записи имеет ограниченное количество раз. О котором указывает и производитель. Так что Ваше утверждение не соответствует действительности.


Вернуться наверх
   
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 15:59:24 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: -3
Вы утверждаете в своём высказывании: https://radiokot.ru/forum/viewtopic.php ... 3#p3887233
Что записывать можно неограниченное количество раз («Записывать можно сколько угодно»).

Да уж.... медицина тут бессильна.... :facepalm:


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 17:33:16 
Друг Кота

Карма: 1
Рейтинг сообщений: 91
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 9115
Откуда: .ru
Рейтинг сообщения: 0
NStorm писал(а):
По факту что-то больше 3 млн циклов при 25*С.

Хм... интересно. :roll: 3 млн циклов - это не плохо))

Можно придумать другой способ записи... Например как SD карте... Там есть "шапка" с адресом ячеек и сектора с данными.

1. "шапка" с адресом ячеек:
FFFFFFFF
Разбиваем EEPROM на сектора:
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

2. Записываем адрес в "шапку",
00FFFFFF
а данные в нулевой сектор :
000000 FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

3. Записываем новый адрес в "шапку",
01FFFFFF
а данные в первый сектор :
000000 1111111 FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

4. Записываем новый адрес в "шапку",
02FFFFFF
а данные в второй сектор :
000000 1111111 2222222 FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

5. И т.д. ))

Только теперь "шапка" быстро износится...))


Вернуться наверх
 
 Заголовок сообщения: Re: Arduino и энергонезависимая память
СообщениеДобавлено: Чт сен 03, 2020 17:52:18 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Только теперь "шапка" быстро износится...))
А зачем тогда? Просто писать последовательно в сектор и всё. И все его байты будут изнашиваться равномерно.
Но можно и вашим методом, только номер сектора указывать номером самого старшего 0-го бита. Т.е. шаги:
1. шапка == FFFFFFFF
2. шапка == FFFFFFFE
3. шапка == FFFFFFFC
4. шапка == FFFFFFF8
5. шапка == FFFFFFF0
...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 86 ]    , 2, , ,  

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y