Показано с 1 по 19 из 19

Тема: Запись инфы во внешнее EEPROM I2C

  1. #1
    AudioKiller
    Автор темы
    Аватар для AudioKiller
    Регистрация
    10.02.2005
    Адрес
    Ростов-на-Дону
    Возраст
    59
    Сообщений
    2,468

    Вопрос Запись инфы во внешнее EEPROM I2C

    Для хранения большого количества инфы, сохраняемой при выключении питания, в микроконтроллерах используются внешние микросхемы EEPROM, которых до чёрта разных.
    Многие (все?) микросхемы EEPROM имеют страничную организацию. При записи байта (насколько я понимаю) во внутренний буфер микросхемы считывается вся нужная страница, в ней меняется нужный байт, и вся страница записывается обратно в память.
    А если мне нужно записать за один раз пяток-десяток переменных размером от одного до четырёх байт, то имеет смысл организовать работу так:
    - считалась в буфер страница памяти
    - на неё записались все мои данные: подразумевается, что суммарный размер записываемых данных не превышает размера страницы
    - страница сохранилась в память и вся моя инфа записалась за один раз.
    Это экономит время и ресурс микросхемы.

    Как это организовать - хз.
    Есть что-нить толковое, чтобы почитать? Гугл ничего толкового не выдал - либо от меня скрывает секретные сведения, либо я не так спрашиваю (а куда Гуглу паяльник засовывать, чтобы он сказал всё?)

    НЕ Ардуино!!!
    - Что значит маловато шлюпок?! Не разводите панику, это непотопляемый корабль!
    Томас Эндрюс, конструктор "Титаника"

  2. #2
    Старый знакомый Аватар для ass77
    Регистрация
    08.01.2015
    Сообщений
    867

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Прежде всего доки на интересующую память и поковырять штатные либы, хоть от того же атмела

  3. #3
    Частый гость Аватар для alex3
    Регистрация
    27.01.2014
    Адрес
    Королёв
    Сообщений
    377

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Вообщем, чтение - операция не ведущая к деградации ячеек памяти, в отличие от записи. Поэтому для сохранения ресурса правильнее писать данные в ячейку только если содержимое изменилось. Для этого в стандартной библиотеке Ардуино есть функция update(). Если в вашей библиотеке её нет, реализовываете сами по простому алгоритму: чтение, сравнение, запись если отличается.
    Насчёт скорости не уверен. У вас реально тормозит прошивка при записи нескольких переменных? Или попытка оптимизации ради оптимизации?
    Может вам вообще не EEPROM нужен?
    Есть, например, FRAM который и быстрее и ресурс больше имеют. Чипы дёшевы и легкодоступны.
    Конкретизируйте ТЗ, тогда возможно будут даны более конкретные советы.

  4. #4
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,161

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    При записи байта (насколько я понимаю) во внутренний буфер микросхемы считывается вся нужная страница, в ней меняется нужный байт, и вся страница записывается обратно в память.
    Не совсем так. Есть совсем простые микробы, у которых доступна только команды чтения и записи. Есть более продвинутые, у которых есть чтение запись и стирание (страницы, кластера, чипа). Оба два типа древней мамонта.
    Если стирание не выведено в юзеринтерфейс, то оно происходит внутри, без участия юзера.
    Надо помнить о главном - стирание - это все биты установили в 1. Запись - часть бит сбросили в ноль. Если мы стёрли страницу, потом пишем всю страницу заново сразу или по 1 байту - не важно, ресурс зависит от циклов стирания.

    В остальном в первую очередь читать аппноты и даташиты производителя.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

  5. #5
    Старый знакомый Аватар для ass77
    Регистрация
    08.01.2015
    Сообщений
    867

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от alex3 Посмотреть сообщение
    Для этого в стандартной библиотеке Ардуино есть функция update().
    Не поверите, но не только в дурдуино этот макрос есть. В данном случае речь не об этом.

  6. #6
    Частый гость Аватар для alex3
    Регистрация
    27.01.2014
    Адрес
    Королёв
    Сообщений
    377

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    - считалась в буфер страница памяти
    - на неё записались все мои данные: подразумевается, что суммарный размер записываемых данных не превышает размера страницы
    - страница сохранилась в память и вся моя инфа записалась за один раз.
    Это экономит время и ресурс микросхемы.
    Время может и сэкономит, если запись страницы будет быстрее чем несколько записей ячеек. Ресурс - точно нет. Описанный мной макрос сохраняет ресурс лучше: записываются только нужные ячейки, а не вся страница, и только если данные изменились.
    Необходимость ускорения записи тоже не понятна, насколько надо ускорить? Есть ли в этом реальная необходимость или это академический интерес?

  7. #7
    rince-wind
    Гость

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Подробно об эмуляции EEPROM поверх страничной памяти: https://www.st.com/resource/en/appli...lectronics.pdf

  8. #8
    AudioKiller
    Автор темы
    Аватар для AudioKiller
    Регистрация
    10.02.2005
    Адрес
    Ростов-на-Дону
    Возраст
    59
    Сообщений
    2,468

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Нужна именно EEPROM - максимальная дешевизна при объёме до 64 килобайт. Надо хранить порядка 4000-5000 событий, которые происходят сравнительно редко (раз в несколько минут, а то и раз в час), но хранить долго и при пропадании питания. Причём каждое событие описывается рядом параметров, вот и возникла идея записи сразу страницы: в одном блоке передал кучу инфы, и она сразу записалась.
    Понятно, что можно записывать и по одной переменной за один посыл. Просто посылов получается многовато. И дело даже не в экономии ресурса памяти - его при такой редкой записи вполне хватает, а в экономии батарейки. У меня батарейное питание. Поэтому процессор всё время спит, а по прерыванию получает инфу, обрабатывает и результаты сохраняет. Обработка простая, так что основное время работы - запись в память. Питание 3,3 вольта (а если удастся - то и 2,7 вольт), так что на 1 МГц работать нереально. Да и на 400 кГц может не получиться - важное условие низкая себестоимость. Так что скоростная память может не влезть в бюджет.

    В доках на память про страницы написано либо очень мало, либо вообще ничего. Правда это Микрочип и Атмел, может другие производители пишут более подробно. Пока ковыряю апноты Атмел.


    Цитата Сообщение от alex3 Посмотреть сообщение
    в стандартной библиотеке Ардуино
    Не Ардуино! Нормальная разработка.


    Цитата Сообщение от rince-wind Посмотреть сообщение
    об эмуляции EEPROM
    Там эмуляция, как я понял. А нужна работа с реальной внешней микросхемой.
    - Что значит маловато шлюпок?! Не разводите панику, это непотопляемый корабль!
    Томас Эндрюс, конструктор "Титаника"

  9. #9
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,249

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от alex3 Посмотреть сообщение
    если запись страницы будет быстрее чем несколько записей ячеек.
    У большинства еепромок, время записи одного байта и всей страницы - равны.

    Если писать надо часто - есть еепромки, в которых один из блоков имеет на порядки большее число циклов (endurance) чем остальные. В каких-то можно этот блок назначить, т.е выбрать из всех имеющихся, т.к. реально это просто переключение дополнительной памяти, отведенной на биты коррекции.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  10. #10
    Старый знакомый Аватар для ass77
    Регистрация
    08.01.2015
    Сообщений
    867

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Нужна именно EEPROM - максимальная дешевизна при объёме до 64 килобайт. Надо хранить порядка 4000-5000 событий, которые происходят сравнительно редко (раз в несколько минут, а то и раз в час), но хранить долго и при пропадании питания. Причём каждое событие описывается рядом параметров, вот и возникла идея записи сразу страницы: в одном блоке передал кучу инфы, и она сразу записалась.
    И в чем проблема? Храним массив данных все время в оперативке (подобрать только МК с достаточным объемом) по прерыванию от супервизора разряда батареи сливаем постранично в еепром. Запись будет происходить только когда батарейке конец придет.

  11. #11
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,161

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    В доках на память про страницы написано либо очень мало, либо вообще ничего.
    Для самых простых микроб(at24*) в доках указан размер страницы, а что еще надо указывать?

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Надо хранить порядка 4000-5000 событий, которые происходят сравнительно редко
    Обычный журнал, хранить последние ххх записей. Делал такое, правда у меня всегда spi eeprom.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

  12. #12
    rince-wind
    Гость

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Там эмуляция, как я понял. А нужна работа с реальной внешней микросхемой.
    Там алгоритм с wear-levelling и гарантированной надежностью для любой микросхемы с постраничной организацией памяти.

  13. #13
    AudioKiller
    Автор темы
    Аватар для AudioKiller
    Регистрация
    10.02.2005
    Адрес
    Ростов-на-Дону
    Возраст
    59
    Сообщений
    2,468

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от ass77 Посмотреть сообщение
    И в чем проблема? Храним массив данных все время в оперативке (подобрать только МК с достаточным объемом
    1. 64 килобайта оперативка? Плюс переменные и стек... Там проц нужен копеечный.
    2. Писать надо СРАЗУ.


    Цитата Сообщение от Openreel Посмотреть сообщение
    Для самых простых микроб(at24*) в доках указан размер страницы, а что еще надо указывать?
    Как сделать, чтобы сначала моими данными заполнилась страница в кэше микросхемы EEPROM, т.е. микросхема получала данные и ждала, когда они закончатся. А уж потом эта страница реально записывалась в память? Если делать обычным способом, то данные будут записываться по одиночке.


    Цитата Сообщение от rince-wind Посмотреть сообщение
    любой микросхемы с постраничной организацией памяти.
    Насколько я понимаю, обычные EEPROM не имеют специально страничной организации. Просто так они внутри устроены, что могут писать не только о одному байту, но и по странице. А организация у них матричная, страница - это дополнительная приблуда.
    - Что значит маловато шлюпок?! Не разводите панику, это непотопляемый корабль!
    Томас Эндрюс, конструктор "Титаника"

  14. #14
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,161

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Насколько я понимаю, обычные EEPROM не имеют специально страничной организации.
    Обычные ЕЕПРОМ это кто, обычный стиральный порошок, не существующий в природе?
    Существующие страничные были всегда, есть процесс стирания и он всегда минимум на целую страницу.



    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Как сделать, чтобы сначала моими данными заполнилась страница в кэше микросхемы EEPROM, т.е. микросхема получала данные и ждала, когда они закончатся.
    Плавно вдохнуть и плавно выдохнуть, концентрируя внимание на дыхании. И так несколько минут. Потом таки открыть даташит и прочитать внимательно протокол обмена. Там же всё есть.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

  15. #15
    Завсегдатай Аватар для Meta|_
    Регистрация
    08.03.2005
    Адрес
    Северная Голландия
    Возраст
    40
    Сообщений
    1,994

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    Нужна именно EEPROM - максимальная дешевизна при объёме до 64 килобайт. Надо хранить порядка 4000-5000 событий, которые происходят сравнительно редко (раз в несколько минут, а то и раз в час), но хранить долго и при пропадании питания
    Мы подобные задачи решали с помощью FRAM (дорого, но быстро и очень надёжно), SRAM + CR2032, EEPROM, и ещё пробовали какой-то гибрид под названием EERAM (не помню чьё это, физически там EEPROM и SRAM-кеш в одной сравнительно недорогой микросхеме). Со стороны прошивки это всё работает по сути идентично.
    Ещё был вариант с большой (кратно избыточной) NOR-флешкой и хитрыми алгоритмами записи с wear leveling (это вам наверное перебор). Вот там по необходимости стирали страницу, потихоньку писали в неё по несколько байтиков, после заполнения страницы переходили к следующей и так по кольцу. Геморроя много, в т. ч. "стыки записи", "протёртые" сектора, "не очень хорошо" записанные биты если писалось экстренно при пропадании питания и т. д.
    ∇·D = ρ
    ∇·B = 0
    ∇xE = – ∂B/∂t
    ∇xH = j + ∂D/∂t
    © J. C. Maxwell, O. Heaviside

  16. #16
    Завсегдатай Аватар для Pyku_He_oTTyda
    Регистрация
    22.06.2005
    Адрес
    Москва
    Возраст
    50
    Сообщений
    4,304

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    AudioKiller, а весь сыр/бор из за копеечной 24С04 в этой теме?
    https://www.google.com/url?sa=t&sour...lI_c_1QutZnKMD
    Андрей

  17. #17
    Завсегдатай Аватар для Serge_L
    Регистрация
    12.09.2008
    Адрес
    Калуга
    Возраст
    49
    Сообщений
    2,743

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    1) Оценить время жизни, исходя из ресурса той же 24с04 и потребного числа записей. Может, оно и не надо ничего? Там 1м гарантированных циклов записи.
    2) дороже, но не смертельно: spi flash 25х минимального объема;
    3) использовать nvram (помните, такие кубики Dallas в старых компах?))), там и реал-тайм клок ещё нахаляву)
    Это просто джиттер какой-то! (с) momitko

  18. #18
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,225

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от AudioKiller Посмотреть сообщение
    А если мне нужно записать за один раз пяток-десяток переменных размером от одного до четырёх байт, то имеет смысл организовать работу так:
    - считалась в буфер страница памяти
    - на неё записались все мои данные: подразумевается, что суммарный размер записываемых данных не превышает размера страницы
    - страница сохранилась в память и вся моя инфа записалась за один раз.
    Это экономит время и ресурс микросхемы.

    Как это организовать - хз.
    Не понятно в чем вопрос. Вы же сами сначала описали как реализуется, а потом спрашиваете - как реализовать?
    Выделяете в ОЗУ два массива необходимого объема для поочередного заполнения (например каждый объемом в страницу). Когда один массив заполнен - переключаетесь на второй (пустой) массив.
    А первый (заполненный) массив параллельно неспешно передается на запись в еепром.
    При пропадании питания активный массив сразу пишется в еепром, не дожидаясь полного заполнения.

  19. #19
    Старый знакомый Аватар для ass77
    Регистрация
    08.01.2015
    Сообщений
    867

    По умолчанию Re: Запись инфы во внешнее EEPROM I2C

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Не понятно в чем вопрос. Вы же сами сначала описали как реализуется, а потом спрашиваете - как реализовать?
    Коллега хочет готовую подпрограмму обработки его специфических задач. Неардуино, дешевоисердито и видимо еще с пояснениями как потом записаные постранично данные разобрать.

Социальные закладки

Социальные закладки

Ваши права

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