Avto-mpad.ru

Что такое еепром в эбу, eeprom?

Что такое еепром в эбу, eeprom?

‘roman000′ *’Oct 7 2005, 12:21’]Обясните плиз ,с начала считал что прошивка заливаеться в EEPROM и потом с ней работает, а щас читаю EEPROM иногда вообще говорять отключать или оставлять чистый,совсем запутался что куда лить, а что надо очищать, где поподробнее почитать. интересует BOSH 1.5.4

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

07.10.2005, 15:55 #82

тут я уже был и прочитал – отсюдова и понял чтон адо программаторам заливать прошивку в EEPROM , смущает другое , очем тогда говорят когда тутже в форумах пишут , что keit использовать пустой eeprom или внего загнать ФФ или вообще его отпаять для проверки и заводить без него. Вот и не пойму толи в блоке 2 EEPROM в одном прошивка в другом все остальное или я потерялся.

Наставьте плиз на путь истинный

07.10.2005, 16:29 #83

Вот например вопрос выше – Когда надо чистить EEPROM ?

и ответ на него :

После программирования всегда.

ТАк как же выходит я туда заливаю прошивку а потом его чистить надо – муть какаято

Поясните о чем речь.

07.10.2005, 16:46 #84

Прошивка пишеться во FLASH память,

07.10.2005, 19:36 #85

Расставляю все точки над и…. Так М145 чипуется заменой микросхемы эпром (а не перезаписью флешь как у январей) в данный момент все ПЗУ применяют электростираемые серии W27С512 –45 и записывается в них программа калибровок 64кб через внешний программатор ПЗУ. Теперь вторая микросхема эпром 24схх 8 ножек в ней хранится информация о иммом-ре, патонциом СО, паспортные данные, о которой и спрашиваете ее изменит можно трюмя путями выпаять перепрограммировать и опять в паять, подключить программу Combizet и стереть память и третий записать в ПЗУ 27с512 специальную программу вставить в панельку, вкл заж и она пропишет эпром 24схх программа называется Ewriter

(EEPROM Writer – программа, позволяющая записывать данные в eeprom ЭБУ Bosch M1.5.4

Как известно, в системе Bosch M1.5.4 записать данные в EEPROM 24С02 можно только внешним программатором. Для этого нужно выпаять микросхему, что представляет некоторые сложности. Кроме того, нужен еще программатор для этого типа микросхем.

Данная программа позволяет немного упростить процесс программирования EEPROM путем подготовки специальной прошивки, которая, будучи установленной, в ЭБУ сама пропишет ваши данные в EEPROM. Это очень удобно, если вам необходимо записывать всегда одни и те же данные (например, пароль для защиты прошивки или какой-либо нестандартный идентификатор и т.п.). В этом случае вам нужно лишь один раз подготовить ПЗУ 27С512, в которой будет находится программа, прошивающая EEPROM. Весь процесс программирования будет заключаться в установке этой ПЗУ и включению питания на несколько секунд. Для большей безопасности предусмотрена индикация успешного окончания операции с помощью лампы Check Engine.

Принцип работы с программой очень прост: вы открываете файл, содержащий образ EEPROM, который вы хотите записать в ЭБУ, а программа создает файл-прошивку, которую нужно зашить в ПЗУ 27С512. Попутно можно изменить некоторые идентификационные данные, хранящиеся в EEPROM (VIN, номер кузова и двигателя). Установив полученную ПЗУ в ЭБУ и включив “зажигание”, вы запишите данные в EEPROM.

В версии 1.1 добавлена возможность создания прошивки для полной очистки EEPROM без загрузки внешнего файла, содержащего 0xFF по всем адресам

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

Игры с бубнами исключаются, и не забивайте себе голову стирать ничего ненадо.

Бошь МР7 программа зашивается во флешь калибровки 32кб вся прошива 242кб, эпром состирать можно только программой Combized, а записать в эпром МР7 сначала редактором составить, если знаешь что и прогой Combized этот баг загрузить в микросхему.

Теперь Январь5 калибровки записываются во флешь, а информация о иммом-ре, патонциом СО, паспортные данные, записывается в эпром, вот и возникает вопрос записывается туда еще информация корректирующая калибровки, я не могу этого утверждать и подтвердить, но практика показывает что ничего не меняется в работе машины при очистке эпрома на я5. Сейчас есть загрузчик халявный Combiloader v2.18 он считывает и загружает файлы эпрома и флешь. Если надо состирать данные об иммо то там все есть попутно записать данные тоже все есть. Я никогда ее не стираю без надобности.

Январь 7.2 тоже самое как на Я5, только изначально для своего блока свой эпром, чтобы очистить эпром на Я7 его нужно перезаписать своим чистым эпромам. Если что нибуть идет не так я его перезаписываю, да в нем что то прописывается в редакторе видны изменения но сам не знаю что этим вопросом я не занимался.

Всю информацию собирайте на сайте Окти библиотека и у хрюнов Chiptuner

Arduino EEPROM работа с памятью

EEPROM Arduino ➜ позволяет сохранять данные во время работы программы. Рассмотрим, как работать с EEPROM памятью Ардуино – запись и чтение различных типов данных.

EEPROM память Arduino позволяет сохранять важные данные во время работы программы, например настройки работы системы, даже при отключении питания или при перезагрузке микроконтроллера, так как она является энергонезависимой. Рассмотрим, как работать с EEPROM памятью Ардуино с примерами записи и чтения различных типов данных с помощью команд стандартной библиотеки EEPROM.h.

Arduino EEPROM энергонезависимая память

Энергонезависимая память EEPROM Arduino (Electrically Erasable Programmable Read-Only Memory) — это постоянное запоминающее устройство, которое может хранить записанные в нее данные десятки лет после отключения питания. Количество циклов перезаписи EEPROM памяти несколько сотен тысяч раз при температуре не ниже 24°С, а чтение данных не ограничено. Объем EEPROM памяти Arduino следующий:

  • ATmega168 (плата Arduino Nano) — 512 байт;
  • ATmega328 (плата Arduino Uno, Arduino Nano) — 1 Кбайт;
  • ATmega1280, ATmega2560 (плата Arduino Mega) — 4 Кбайт.

На операцию записи одного байта в EEPROM уходит около 3,3 мкс, а на чтение одного байта уходит около 0,4 мкс (микросекунд). Каждый байт (ячейка) EEPROM в Ардуино по умолчанию (т.е. ни разу не записанная ячейка) имеет значение 255. Обратите внимание, что если данные занимают место больше 1 байта (например, число больше 255), то они разбиваются на несколько ячеек. Это важно учитывать при записи в EEPROM.

Команды библиотеки EEPROM.h Arduino

Функция

Краткое описание

07.10.2005, 19:56 #86
EEPROM.read(address)
Считывает один байт из EEPROM Arduino по адресу address
write()
EEPROM.write(address, value)
Записывает один байт со значением value в EEPROM по адресу address
update()
EEPROM.update(address, value)
Аналог функции write() , но новые данные в ячейку записываются только тогда, когда они отличаются от уже записанного. Использование данной функции позволяет продлить жизнь памяти EEPROM.
EEPROM.get(address, data)
Считывает из EEPROM Arduino любой тип данных по адресу address. При этом данные (data) могут быть любого типа, например, int или float.
EEPROM.put(address, data)
Записывает в EEPROM Arduino любой тип данных по адресу address. Функция записывает в ячейку только отличающиеся данные.
EEPROM[]
EEPROM[address]
Позволяет обращаться с байтами EEPROM Arduino как с массивом. Байты можно считывать и записывать.

Arduino EEPROM запись, чтение данных

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;

Скетч. Чтение Arduino EEPROM (read)

Пояснения к коду:

  1. функция EEPROM.length() позволяет узнать общее число ячеек в памяти. Если вы работаете с Nano ATmega168, то цикл закончится на 512 ячейке;
  2. если память не использовалась, то все значения в ячейках будут равны 255.

Скетч. Запись Arduino EEPROM (write)

Пояснения к коду:

  1. функция EEPROM.write() каждый раз перезаписывает данные в ячейке с адресом 0, что снижает жизненный цикл памяти, лучше использовать EEPROM.update() ;
  2. в следующих примерах не будем перебирать все ячейки в памяти, а запишем и прочитаем только несколько байт в энергонезависимой памяти Ардуино.

Пример работы предыдущей программы

Скетч. Перезапись в Arduino EEPROM (update)

Пояснения к коду:

  1. вывод данных из ячейки с адресом 0 выполняется с помощью разных функций;
  2. функции write/read/update позволяют работать только с типами данных byte и использовать эти функции для данных типа float или int уже нельзя. Для этого следует использовать put/get, которые мы рассмотрим далее.

Arduino EEPROM примеры использования

Для начала рассмотрим запись в EEPROM Arduino числа больше, чем 255, например число 999. При записи в EEPROM число 999 будет разбиваться на множитель (старший байт) и недостающее число (младший байт), занимая при этом уже две ячейки в энергонезависимой памяти (т.е. 999 = 3×256 + 231). Чтобы вывести сохраненное число на монитор порта, его нужно будет «собрать» с помощью функции word() .

Скетч. Запись в память EEPROM int, float

Пояснения к коду:

  1. для записи данных в ячейку в программе использована функция EEPROM.update() , которая перезаписывает ячейку только в случае различия сохраняемых данных с данными в ячейке EEPROM Arduino Uno;
  2. основная проблема с сохранением больших чисел (int, float) в память EEPROM заключается в том, чтобы случайно не перезаписать нужную ячейку новой информацией. Для этого нужно учитывать размер сохраняемых данных в ПЗУ, используя функции EEPROM.put() и EEPROM.get() .

Скетч. Запись строк в EEPROM (String)

Пояснения к коду:

  1. перед сохранением новых данных в памяти, следует узнать размер данных, которые были сохранены, чтобы начать запись в новой ячейке;
  2. удалив из кода строчки для записи данных, вы можете каждый раз при запуске программы считывать все сохраненные данные из ПЗУ Ардуино.

Скетч. Очистка EEPROM Arduino

Чтобы стереть энергонезависимую память ЕЕПРОМ Ардуино и вернуть ее к заводским настройкам следует перезаписать все ячейки в памяти с числом 255. Для этого можно использовать цикл for или while. Простой пример с программой очистки EEPROM Ардуино приведен ниже. Если у вас остались вопросы по работе с EEPROM памятью на Ардуино, то оставляйте их в комментариях к этой записи.

Пояснения к коду:

  1. все ячейки, если они отличаются от 255, автоматически перезапишутся;
  2. функция EEPROM.put() , как и EEPROM.update() перезаписывает ячейку лишь когда данные отличаются, экономя ресурс памяти еепром Ардуино.

Похожие записи по теме:

3 комментариев для “Пример: Arduino EEPROM работа с памятью”

Здравствуйте. Подскажите, как производится запись больших чисел в eeprom. Спасибо

Здравствуйте, очень познавательно.
В последнем примере «Очистка EEPROM Arduino» — «int address» разве не должен быть равен нулю (int address=0)?

Все верно, но так как не задано значение переменной «int address», то она по умолчанию равна нулю

EEPROM. Avrdude. Снова про работу с контроллерами

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

Что такое EEPROM и зачем вести о нём речь?

EEPROM – (Electrically Erasable Programmable Read-Only Memory) область энергонезависимой памяти микроконтроллера, в которую можно записать и прочитать информацию. Зачастую его используют для того, чтобы хранить настройки программы, которые могут меняться в процессе эксплуатации, и которые необходимо хранить при отключенном питании.

Как 3D принтер использует EEPROM?

Рассмотрим на примере Marlin’а. В Marlin Firmware ‘из коробки’ EEPROM не используется. Параметры конфигуратора (Configuration.h), которые включают возможность его использования, по умолчанию, закомментированы.

Если включено использование EEPROM, то принтер может хранить и использовать следующие настройки (подсмотрено у буржуев):

  • Количество шагов на миллиметр
  • Максимальная/минимальная скорость подачи [мм/с]
  • Максимальное ускорение [мм/с^2]
  • Ускорение
  • Ускорение при ретракте
  • Настройки PID
  • Отступ домашней позиции
  • Минимальная скорость подачи во время перемещения [мм/с]
  • Минимальное время участка [мс]
  • Максимальный скачок скорости по осям X-Y [мм/с]
  • Максимальный скачок скорости по оси Z [мм/с]

Редактировать эти настройки можно, используя экран принтера и органы управления. При включенном использовании EEPROM, в меню должны отображаться пункты:

  • Store memory
  • Load memory
  • Restore Failsafe

Так же, можно использовать GCode для работы напрямую (через Pronterface).

  • M500 Сохраняет текущие настройки в EEPROM до следующего запуска или выполнения команды M501.
  • M501 Читает настройки из EEPROM.
  • M502 Сбрасывает настройки на значения по-умолчанию, прописанные в Configurations.h. Если выполнить после неё M500, в EEPROM будут занесены значения по-умолчанию.
  • M503 Выводит текущие настройки – ”Те, что записаны в EEPROM.”

О EEPROM в Repitier firmware можно почитать здесь.

Как считать и записать данные в EEPROM?

Аналогично, описанному в статье про бэкап, методу бэкапа прошивки, используя ключ -U. Только в данном случае после него будет указатель на то, что считывать нужно EEPROM.

avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -Ueeprom:r:’printer_eeprom’.eep:i

avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -Ueeprom:w:’printer_eeprom’.eep:i

Как и зачем стирать EEPROM?

Для начала,- ‘зачем это делать?’. Стирать EEPROM нужно в том случае, если предыдущая прошивка тоже его использовала, и в памяти мог остаться мусор. Где-то я уже натыкался на людей с проблемами, что после перехода с одной прошивки на другую (с Marlin на Repitier ЕМНИП), у них принтер начинал вести себя, скажем так, ‘творчески’. Это связанно с тем, что разные прошивки хранят свои данные под разными адресами. И при попытке читать данные из неверного адреса начинается свистопляска.

Затереть EEPROM можно только программно из прошивки, но для этого придётся – на время залить в контроллер специальный скетч. Подробно об этом можно прочитать в официальной документации по Arduino.

Если же стирается EEPROM не в Arduino плате, а в каком-то абстрактном контроллере, то код скетча нужно будет изменить с учётом размера EEPROM в конкретном контроллере на плате. Для этого нужно будет поменять условие окончания в цикле ‘For’. Например, для ATmega328, у которой 1kb памяти EEPROM, цикл будет выглядеть так:

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

Как избежать износа EEPROM

Резюме: Если вы периодически обновляете некоторое значение в EEPROM каждые несколько минут (или несколько секунд), вы можете столкнуться с проблемой износа ячеек EEPROM. Чтобы избежать этого, требуется снижать частоту записей в ячейку. Для некоторых типов EEPROM даже частота записи чаще чем один раз в час может быть проблемой.

Когда вы записываете данные, время летит быстро

EEPROM повсеместно используется для сохранения параметров настройки и журнала работы во встраиваемых системах. К примеру, вы можете хотеть функцию «черного ящика», для записи последних данных на момент аварии или потери питания. Я видел спецификации с требованием записывать подобные данные каждые несколько секунд.

Но проблема в том, что EEPROM имеет ограниченный ресурс числа записей. После 100,000 или миллиона записей (зависит от конкретного чипа), некоторые из ваших систем начнут испытывать проблемы с отказом EEPROM. (Посмотрите в даташит, чтобы узнать конкретную цифру. Если вы хотите выпустить большое число устройств, «наихудший случай», вероятно, более важен чем «типичный»). Миллион записей кажется большой цифрой, но на самом деле он закончится очень быстро. Давайте посмотрим на примере, предположив, что нам нужно сохранять измеренное напряжение в одну ячейку каждые 15 секунд.

1,000,000 записей при одной записи в 15 секунд дают записи в минуту:
1,000,000 / ( 4 * 60 минут/час * 24 часа/день ) = 173.6 дней.
Другими словами, ваша EEPROM исчерпает резерв в миллион записей менее чем через 6 месяцев.

Ниже приведен график, показывающая время до износа (в годах), основанный на периоде обновления конкретной ячейки EEPROM. Ограничительная линия для продукта с продолжительностью жизни 10 лет составляет одно обновление каждые 5 минут 15 секунд для микросхемы с ресурсом 1 миллион записей. Для EEPROM с ресурсом 100К можно обновлять конкретную ячейку не чаще одного раза в 52 минуты. Это означает, что не стоит и надеяться обновлять ячейку каждые несколько секунд, если вы хотите, чтобы ваш продукт работал годы, а не месяцы. Вышесказанное масштабируется линейно, правда, в настоящем приборе имеются еще и вторичные факторы, такие как температура и режим доступа.

Уменьшить частоту

Самый безболезненный способ решить проблему-это просто записывать данные реже. В некоторых случаях требования к системе это позволяют. Или можно записывать только при каких-либо больших изменениях. Однако, с записью, привязанной к событиям, помните о возможном сценарии, при котором значение будет постоянно колебаться, и вызовет поток событий, которые приведут к износу EEPROM.
(Будет неплохо, если вы сможете определить, сколько раз производилась запись в EEPROM. Но это потребует счётчика, который будет храниться в EEPROM… при этом проблема превращается проблему износа счётчика.)

Прерывание по снижению уровня питания

В некоторых процессорах имеется прерывание по низкому уровню питания, которое можно использовать для записи одного последнего значения в EEPROM, в то время как система выключается по потере питания. В общем случае, вы храните интересующее значение в ОЗУ, и сохраняете его в EEPROM только при выключении питания. Или, возможно, вы записываете EEPROM время от времени, и записываете другую копию в EEPROM как часть процедуры выключения, чтобы убедиться, что самые последние данные запишутся.
Важно убедиться, что есть большой конденсатор по питанию, который будет поддерживать напряжение, достаточное для программирования EEPROM достаточно продолжительное время. Это может сработать, если вам нужно записать одно или два значения, но не большой блок данных. Осторожно, тут имеется большое пространство для ошибки!

Кольцевой буфер

Классическое решение проблемы износа-использовать кольцевой буфер FIFO, содержащий N последних записей значения. Так-же понадобится сохранять указатель на конец буфера в EEPROM. Это уменьшает износ EEPROM на величину, пропорциональную числу копий в этом буфере. Например, если буфер проходит через 10 различных адресов для сохранения одного значения, каждая конкретная ячейка модифицируется в 10 раз реже, и ресурс записи возрастает в 10 раз. Вам также понадобится отдельный счётчик или отметка времени для каждой из 10 копий, чтобы можно было определить, которая из них последняя на момент выключения. Другими словами, понадобится два буфера, один для значения, и один для счетчика. (Если сохранять счетчик по одному и тому-же адресу, это приведёт к его износу, т.к. он должен увеличиваться при каждом цикле записи.) Недостаток этого метода в том, что нужно в 10 раз больше места чтобы получить в 10 раз большую продолжительность жизни. Можно проявить смекалку, и упаковать счетчик вместе с данными. Если вы записываете большое количество данных, добавление нескольких байт для счетчика — не такая уж большая проблема. Но в любом случае, понадобится много EEPROM.
Atmel приготовил аппноут, содержащий все кровавые подробности:
AVR-101: High Endurance EEPROM Storage: www.atmel.com/images/doc2526.pdf

Особый случай для счётчика числа записей

Иногда нужно сохранить счётчик, а не сами значения. К примеру, вы можете хотеть знать число включений прибора, или время работы вашего устройства. Самое плохое в счётчиках, это то, что у них постоянно меняется младший значащий бит, изнашивая младшие ячейки EEPROM быстрее. Но и тут возможно применить некоторые трюки. В аппноуте от Microchip есть несколько умных идей, таких как использование кода Грея, чтобы только один бит из многобайтового счётчика менялся при изменении значения счетчика. Также они рекомендуют использовать корректирующие коды для компенсации износа. (Я не знаю, насколько эффективно будет применение таких кодов, т.к. это будет зависеть от того, насколько независимы будут ошибки в битах в байтах счётчика, используйте на свой страх и риск, прим. авт.). Смотри аппноут: ww1.microchip.com/downloads/en/AppNotes/01449A.pdf

Примечание: для тех, кто хотел бы узнать больше, Microchip подготовил документ, содержащий детальную информацию об устройстве ячеек EEPROM и их износе с диаграммами:
ftp.microchip.com/tools/memory/total50/tutorial.html

Дайте мне знать, если у вас имеются какие-либо интересные идеи по поводу борьбы с износом EEPROM.

Примечание переводчика: в последние годы появились микросхемы EEPROM со страничной организацией стирания (подобной микросхемам FLASH), где логически можно адресовать ячейки (читать, записывать и стирать) побайтно, но при этом микросхема невидимо для пользователя стирает всю страницу целиком и перезаписывает новыми данными. Т.е. стерев ячейки по адресу 0, мы фактически стёрли и перезаписали ячейки с адресами 0. 255 (при размере страницы 256 байт), поэтому трюк с буфером в этом случае не поможет. При исчерпании ресурс записей у такой микросхемы выходит из строя не одна ячейка, а вся страница целиком. В даташитах для таких микросхем ресурс записи указан для страницы, а не для конкретной ячейки. Смотри, например, даташит на 25LC1024 от Microchip.

Читать еще:  Лада Гранта не горит панель приборов
Ссылка на основную публикацию
Adblock
detector