Россия, Новосибирск, улица Волочаевская
Телефон:
+7 (383) 214-82- Показать номер
Пн-сб: 09:00—18:00
whatsapp telegram vk email

Eeprom что это такое в автомобиле

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ: ЕЕПРОМ

Забросил я уроки для начинающих, сегодня поговорим о EEPROM — энергонезависимой памяти.

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

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

Объявляется еепром так же как и переменная, работают с еепром так же как с переменной, кроме некоторых но. Пример (Code Vision AVR):

unsigned char a; // объявляем беззнаковую переменную размером 8 бит
unsigned char eeprom eea; // объявляем “переменную” в еепром такого же типа, этого достаточно, всю остальную работу делает компилятор.

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

1. — значение хранимое в ЕЕПРОМ по умолчанию равно максимально возможному числу, в нашем случае после объявления в eea лежит число 255 или оно же 0xFF или оно же 0b11111111.
2- количество циклов стирания-записи у памяти ЕЕПРОМ относительно мало, поэтому нужно максимально ограничивать число записей в алгоритме программы.

3. Память ЕЕПРОМ самый тормозной тип данных, это нужно учитывать. Особенно при записи в ЕЕПРОМ. Можно получить каку, например, запихнув обработку еепром в прерываниях. В особо ответственных моментах можно использовать флаги состояния памяти ЕЕПРОМ, бывает очень полезно.

После обявления еепром и переменной я делаю команду присвоения числа из еепром в переменную, до начала основного цикла и как правило до начала работы прерываний:

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

Вот пример куска кода записи в ЕЕПРОМ:

unsigned char a; // объявляем беззнаковую переменную размером 8 бит
unsigned char eeprom eea; // объявляем еепром такого же типа,
unsigned char trig; // объявляем переменную, которая будет помнить, что кнопка нажата.

Далее идет основанная часть программы void main(void), в ней :

a=eea; // загоняем данные в с еепром в переменную

Далее идет главный цикл while(1) и в теле цикла:

if(key==1) // если кнопка настройки нажата, то:
<
trig=1; // включаем триггер, который запоминает, что кнопка нажата
a*b+b^2 ; //тут что то делаем нужное, когда кнопка нажата
>
else // если кнопка отжата
<
LED=1 ; //тут что то делаем нужное, когда кнопка отжата
if(trig) //если кнопка отжата и триггер включен, то:
<
eea=a; // пишем переменную а в еепром
trig=0; // сбрасываем триггер
>
>

Запись в ЕЕПРОМ срабатывает по отжатию кнопки единожды, когда триггер равен единице.

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

Для начала немного общих сведений. В системах Январь 5.хх, Январь 7.2, Микас 7.хх, Bosch MP7.0 и Bosch M7.9.7, VS5.1, VS5.6 используется два вида памяти, сохраняемой при отключении питания – FLASH и EEPROM.

Более современные контроллеры Январь 7.2+, Bosch M7.9.7+, Микас-11хх, М7.3 используют процессор с внутренней памятью и не имеют внешнего FLASH.

EEPROM – многократно перезаписываемая память, используемая для хранения временной информации, сохраняемой при отключении питания. В EEPROM хранится коэффициент коррекции СО (в системах, где есть СО-регулирование), пароль и коды иммобилизатора, а так-же паспортные данные автомобиля: VIN, номер кузова, двигателя, имя прошивки и т.д. Доступ к этой памяти возможен как извне, с помощью программ – загрузчиков, так и изнутри управляющей программы. (Например, регулировка с тестера или компьютера уровня СО).

Bosch M7.9.7 и Bosch M7.9.7+ требуют доработок для перевода в режим программирования. Программатор Combiloader позволяет записать программу или калибровки без разборки и доработки блока. Для того, что бы произвести чтение программы из блока без разборки и доработки не обойтись.

Все ЭБУ, упомянутые в этой статье, в полном объеме поддерживаются универсальным программатором CombiLoader (опция) и программой ChipTuning PRO (опция).

Немного подробнее остановимся на новом поколении контроллеров – Январь 7.2+ и М73.

ЭБУ Январь 7.2+ и М73 не имеют внешней флэш – памяти, программа записывается в память процессора и состоит из бутлоадера (программа, управляющая запуском основной программы и ее обновлением), основной программы (программы управления двигателем) и калибровок. Работа с разными типами ЭБУ имеет свои особенности:

Январь‑7.2+ (идентификатор ПО I2xxxxxx), М73 пр-ва Итэлма (идентификатор ПО I3xxxxxx):

В случае, когда при записи с обновлением бутлоадера произошла ошибка, и ЭБУ не выходит на связь, необходимо произвести запись ЭБУ через бутлоадер процессора. Для этого необходимо произвести доработку ЭБУ.

Для записи контроллеров семейств М73/Январь‑7.2+ через бутлоадер процессора, необходимо выпаять резистор, отмеченный синим цветом и запаять его по диагонали, как показано красными стрелками. По окончании программирования, нужно вернуть резистор на место.

М73 пр-ва АВТЭЛ (идентификатор ПО A3xxxxxx):

Процессор ЭБУ защищен. При записи обновляется только основная часть программы и калибровки.

ВНИМАНИЕ! Работа с этим типом ЭБУ через бутлоадер процессора после доработки недопустима и может привести к необходимости замены процессора!

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

1. Установка ЭБУ.
2. Включаем зажигание. Дожидаемся отработки БН и загорания СЕ. (Около 3 – 5 секунд)
3. Выключаем зажигание.
4. Авто готов к работе.

ПРОГРАММЫ – ЗАГРУЗЧИКИ ЭБУ от НПП НТС
Январь 5.х, VS5.x, Микас 7.х

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

НПП НТС тоже наконец – то перестало гонять своих покупателей ПБ‑2 в ДОС и обратно и разродилось простенькой программкой под Windows, позволяющей выбирать номер используемого порта и скорость его работы. Никаких параметров, кроме выбора типа блока между Январь и Микас больше не настраивается, при чтении ЭБУ сразу предлагается сохранение файла, при записи – открытие. В нижней части индикатор выполнения. Программка значительно уступает по возможностям даже первым версиям облегченной (Lite) программе ECU Programmer С.Сапелина. Совсем любопытные могут посмотреть, что же, все-таки находится внутри программатора ПБ‑2.

Версия программы 1.1 от 10.10.2001 позволяет производить очистку EEPROM и работает с файлами двойного размера (128Кб).

Ручной перевод ЭБУ в режим программирования

I. Январь 5.1/5.1.1/5.1.2, Микас 7.х/ Bosch 7.0/ VS5.1

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Контроллер лучше с машины снять. Хоть и есть информация о успешной загрузке прямо на автомобиле, все – таки надежнее работать с минимальной длиной соединительных проводов. Для питания контроллера необходим источник тока 12V/0,5A. Можно пользоваться внешним источником питания или штатным аккумулятором.

Реально это выглядит так: подключаете ЭБУ по приведенной схеме, включаете выключатель S1, ждете 3 – 5 секунд, включаете S2 и запускаете программу.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Загрузка идет по последовательному каналу K‑Line и занимает относительно продолжительное время. Если Ваш адаптер отлично работает с диагностикой, но не желает программировать блоки, скорее всего надо задуматься о его замене на более совершенный вариант. Но у нас без сбоев на скорости до 38 Kbit работает простой вариант адаптера К‑Line на двух транзисторах BC945.

A. Соколов (UncleSam) рекомендует подключать контроллер, как показано на рисунке справа. Суть, в принципе, не меняется. Горящий светодиод сигнализирует о том, что контроллер НЕ НАХОДИТСЯ в режиме программирования.

Для программирования Микас 7.1/7.2 подключение аналогично Январь 5.1, но необходимо использовать не 47 ногу, а 42 (PRG).

Программирование ЭБУ Bosch MP7.0H аналогично Январь 5.1, но необходимо использовать не 47 ногу, а 50 (PRG. Только для записи калибровок. Чтение возможно без перевода в режим программирования).

Таблица обязательных для программирования контактов (55-контактные ЭБУ).

* Как видно из таблицы, использование 37 контакта необязательно на большинстве систем. Но, при постоянном подключении этого контакта, различие систем только в выборе ножки разрешения программирования.

II. Bosch M7.9.7 / Январь 7.2

ЭБУ с 81-контактным разъемом. Подключение этих типов ЭБУ для перевода в режим программирования так же просто, как и Январь 5.

На представленной схеме для универсальности применено переключатель выбора типа ЭБУ, т.к они требуют подачи на 43 ножку (PRG) сигналов разного уровня. Перед программированием нужно выбрать тип ЭБУ переключателем S1 Январь 7.2 или Bosch M7.9.7.

В цепь подачи управляющего напряжения в режиме Январь 7.2 можно установить токоограничительный резистор, который может быть любого типа номиналом 1 – 5,1 Ком. (от +12V до верхнего контакта переключателя S1).

Если контроллер не выходит на связь, необходимо выключателем S2 снять питание с 13 ноги (IGN, зажигание) и сделать паузу не менее 7 – 10 секунд, после чего повторить попытку соединения.

Универсальный программатор ЭБУ CombiLoader автоматически все сделает за Вас без всяких переключателей. Следует иметь ввиду что этот программатор считывает/записывает прошивки не в простом бинарном виде, а в формате, доступном для редактирования программой Chip Tuning Pro.

Для перевода этого блока в режим программирования достаточно замкнуть контакт, отмеченный треугольником на массу через резистор 4 – 6 кОм. Можно (и даже нужно) изготовить щуп с резистором внутри и крокодилом с другой. Он понадобится Вам и для работы с любыми другими ЭБУ, переводимые в бутстрап. Замыкать нужно на время установки связи, как только процесс пошел, перемычку можно убрать.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

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

Главная Диагностика ВАЗ Практика Убить иммобилайзер

Убить иммобилайзер

Штатный иммобилизатор ВАЗ — некое «волшебное» устройство, высокое предназначение которого поставить в тупик злоумышленников и уберечь Ваш автомобиль от хищения третьими лицами. На самом деле это не совсем так: спасает он только от «пионеров», злоумышленники не воспринимают его за мало — мальскую преграду, а иммо, в отместку, частенько портит кровь своим хозяевам. Устройство это неоднозначное — имеет ярых сторонников и не менее ярых противников. Я являюсь скорее противником, поэтому данный материал может показаться предвзятым.

Иммобилизатор находится: на ВАЗ 2110 прямо над ЭБУ. ВАЗ 2109 с высокой панелью — за панелью приборов, между рулевой колонкой и тем местом, где у карбюраторных находится подсос. При удалении иммобилизатора не забудьте установить перемычку для восстановления связи ЭБУ с диагностической колодкой.
Внутреннее устройство иммобилизатора довольно сложно. Он представляет собой микроконтроллер на базе PIC16C65B, схему K-Line для обмена данными с ЭБУ по диагностической линии и памятью EEPROM, для хранения кодов.

Далее описаны методы борьбы с «заглючившим» или сломавшимся иммобилизатором. Немного теории для упрощения восприятия: Обученный иммобилизатор записывает свой код в EEPROM контроллера. EEPROM — энергонезависимая флэш — память, сохраняющая данные при полностью отключеном питании. При снятии с охраны считывается код обученного черного ключа и сравнивается с кодом, записанным в EEPROM ЭБУ. При совпадении кода дается разрешение на запуск двигателя. Обмен данными между иммобилизатором и ЭБУ происходит по линии диагностики K-Line, поэтому вывести его из строя или сбить код (!) возможно даже невинным подключением диагностического оборудования при включенном зажигании (испытано на собственном опыте). Довольно продолжительное время сей факт приносил немало доходов мастерским, ибо трабл решался и до сих пор иногда решается тривиально и прибыльно — заменой ЭБУ на новый. Так-же, при наличии иммобилизатора не в коем случае нельзя «высаживать» АКБ «в ноль». В этом случае в еепром прописывается хаотичный мусор, и поездки в сервис «на галстуке» не избежать.

Метод оживления контроллера в теории очень прост — нужно очистить энергонезависимую память ЭБУ от информации, оставленной там иммобилизатором. На практике это выглядит так — от иммобилизатора отсоединяется разъем штатной проводки, если Вам необходимо, что бы сигнал диагностики доходил от ЭБУ до диагностической колодки, необходимо в снятом разъеме установить перемычку между контактами 9.1 и 18. Иммо можно выбросить, а можно и оставить — красиво гасить плафон, в этом случае необходимо отрезать от разъема провода от контактов 9.1 и 18 и соединить их вместе. Разъем иммобилизатора при этом установить на прежнее место. Далее, нужно внимательно приглядеться к ЭБУ и выяснить его происхождение. Если это Bosch, необходимо его вскрыть и установить на место штатного чип с программой очистки памяти ЭБУ и включить на несколько секунд зажигание. После обратных манипуляций двигатель заведется, если, конечно, дело было именно в этом. Если же В Вашем блоке ПЗУ запаяна, выходов 2 — либо выпаивать и устанавливать панельку (пригодится впоследствии для Чип — Тюнинга), либо воспользоваться программой COMBISET от US, имеющей функцию очистки ЕЕPROM по последовательному каналу.

Со всей тщательностью и внимательностью отнеситесь к данной процедуре, если запись осуществляется freeware программами. Есть случаи (и один — у меня :)), когда файл для EEPROM заливался прогой FlashECU, и, наоборот, файл с ПО и калибровками — прогой EeprECU. Тупые программы НТС не содержат «защиты от дурака» и позволяют это сделать. В результате либо портится прошивка, либо в епромке записаны несколько байт прошивки. Естественно, автомобиль при этом не подаст Вам никаких признаков жизни. В этом случае желательно переписать сразу все, и прошивку и информацию в eeprom.

После удаления иммобилизатора на автомобилях без катализатора и без регулятора СО (установка СО с компьютера или тестера) необходимо заново отрегулировать СО.

Если после процедуры очистки EEPROM двигатель завелся, можно рискнуть вновь подключить иммобилизатор. Следует иметь ввиду, что для того, что бы иммобилизатор нормально начал выполнять свои функции, необходимо заново «переобучить» его с помощью красного ключа. Инструкция по переобучению иммобилизатора. Данный документ пригодится также и при замене ЭБУ на новый. Может случиться так, что процедура переобучения не сработает. Тогда есть три варианта. Первый — необходимо выпаять eeprom из иммобилизатора, очистить его с помощью программатора и запаять обратно. Запаять можно также и новую, чистую микросхему. Второй — очистить eeprom с помощью программы (aka Uncle Sam) Combiset, режим очистки eeprom Bosch. Третий — приобрести новый иммобилизатор. Во всех трех случаях иммобилизатор «чистый», т.е способен к программированию с помощью любого красного ключа.

Запись информации в EEPROM ЭБУ BOSCH M154

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

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

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

VKimport

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

Последние посетители 0 пользователей онлайн

Для начала мультиметром приходит ли питание на двигатель перемещения лазером. Часто умирает сам двигатель.

Borodach

Всем привет, нужна помощь! Сейчас нахожусь в селе, интернет 4g ловит только в определенных местах. Подскажите как сделать антену, чтобы она подключалась к телефону (3.5 mm jack или USB-С) и стояла там где ловит 4g. Какие материалы нужны и как её сделать ?

Borodach

Хорошо работать с битумным лаком, лучше через иглу. У него хорошая текучесть, не трескается после просушки, прекрасная адгезия к фольге. Заправлял стержень от ручки, шарик извлекал, а с другой стороны вставлял в стержень ватку, она не позволяла быстро испаряться растворителю и не давала самопроизвольно вытекать лаку через пишущий узел. После заправки, стержень вставляется в обычную ручку, что так же, очень удобно. Стержни лучше брать с большим диаметром, в этом случае лака хватает на долго. Да, в перерывах между рисованием, пишущий узел желательно не оставлять на воздухе, я «втыкал» его в какой-нибудь фетр, вату или, что-то подобное, иначе лак подсыхает и отверстие приходится прочищать тонкой проволочкой.

при снижении напряжения питания — завышает показания измеряемого напряжения. начни с проверки батареи питания на фото плохо видно — но такое ощущение, что кирдык в гости к МС пришел.

Тупо отрезать вместе с закрашенным участком трубки от капельницы и выбросить. Для следующего рисования всё сделать заново. Работы на полминуты. В манипуляционных кабинетах поликлиник/больниц можно выпросить хоть мешками и то и другое. Нет никакого смысла в подобной экономии.

@ТарасUA Лучше один раз увидеть чем сто раз услышать. На фото привет из девяностых для рисования простых печатных плат. (работает и не ломается ). Да, лак для ногтей без блесток!

Не знаю даже с чего лучше начать:
— написать, что это все это нужно, чтобы можно подключить к Волге Сайбер блок управления двигателем от американца на 152л.с. без необходимости приобретать в комплекте иммобилайзер и ключи от той же машины;
— или рассказать, что я купил очень бюджетный программатор микросхем EEPROM ?

Если вы не увидели связи между тем и тем, то заваривайте чаёк, постараюсь рассказать о своих планах.
Знаете почему нельзя просто так взять и поставить себе ЭБУ от другой точно такой же машины?
Потому, что не даст иммобилайзер.
Иммобилайзер в реализации крайслера — это не просто коробочка, которая считывает ключ зажигания и разрешает запуск двигателя. Он как Агент Смит из Матрицы прописывает свой уникальный код в разные блоки управления, чтобы те стали единым целым. И да, в блок управления двигателя он себя тоже прописывает. Именно поэтому система отторгнет чужой ЭБУ, считав с него код от чужого иммо, и заблокирует его после нескольких неудачных попыток завестись. И именно поэтому на рынке предлагается приобретать комплект с ключами, личинками, новым замком зажигания и блоком SKIM. Решение хоть и рабочее, но проблемное по установке и дорогое. К тому же, в ЭБУ будет прописан чужой VIN, а это не есть хорошо (читал о случаях проверки сканером в МРЭО с последующим изъятием). Наверное это можно решить дилерским сканером или еще каким другим, но это пока не наш метод)
Гораздо привлекательней приобрести себе ЭБУ от себринга или стратуса и «подружить» его со своим авто самостоятельно. Не будем дальше тянуть кота за хвост: место, где «живет» иммо в ЭБУ давно известно — это пара микросхем EEPROM на блоке. Он там хранится в незашифрованном виде и даже без контрольных сумм в виде VIN-номера авто.

Вот для примера дамп EEPROM. Я подчеркнул ту часть, которую надо заменить на свой VIN. Кстати, исправив один определенный байт можно вообще деактивировать иммобилайзер, но я не буду приводить пример этого (Прости меня владелец Конкорда, я засветил твой номер))

Также удалось выяснить, что в качестве этих ПЗУ используются микрухи ST M95040 или M95080. Стоят эти восьминожки каких-то смешных денег — 28 р/шт (можно взять с запасом на эксперименты)

А вот с программатором не все так просто в плане денег: профессиональные решения стоят очень не кисло. и так как я никогда не имел дела с программаторами, то мне в первых строках гугло-поиск предлагал именно их))
Совершенно случайно нашел программатор, который производит контора энтузиастов с пафосным названием «Электронные войска»)

Вот такой вот программатор за 450р в классной упаковке по уверению разработчиков, может шить кучу разных ПЗУ

Что ж, прикладываем к нему пустую микросхему и пробуем залить на нее дамп от Конкорда (не от самолета, конечно, от Крайслера))

…А перед этим сходим в магазин и купим кабель miniUSB! ))) Потому, что там распаян ни фига microUSB, а этот старый mini, от которого у меня уже ни устройств, ни шнуров не осталось.

eeprom что это такое в автомобиле

Окно программатора с дампом памяти микросхемы ЕЕПРОМ 93С66.

Окно программатора с дампом памяти ROM микроконтроллера MOTOROLA

ClipBoard 2

В умелых руках, логический анализатор один из мощнейших инструментов для изучения работы электронных устройств. Со встроенными декодерами протоколов этот инструмент становиться гораздо приветливее и пользователь избавляется от необходимости «ковыряния» в нулях и еденицах записанного лога. Информация выдаётся в удобно воспринимаемом виде.

ClipBoard 3
ClipBoard 4

Логический анализатор с открытым окном декодера и различными представлениями одних и тех же данных.

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

Автор статьи:
Бочковский Алексей Иванович
СОЮЗ АВТОМОБИЛЬНЫХ ДИАГНОСТОВ

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ: ЕЕПРОМ

8716d6ds 100

Забросил я уроки для начинающих, сегодня поговорим о EEPROM — энергонезависимой памяти.

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

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

Объявляется еепром так же как и переменная, работают с еепром так же как с переменной, кроме некоторых но. Пример (Code Vision AVR):

unsigned char a; // объявляем беззнаковую переменную размером 8 бит
unsigned char eeprom eea; // объявляем «переменную» в еепром такого же типа, этого достаточно, всю остальную работу делает компилятор.

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

1. — значение хранимое в ЕЕПРОМ по умолчанию равно максимально возможному числу, в нашем случае после объявления в eea лежит число 255 или оно же 0xFF или оно же 0b11111111.
2- количество циклов стирания-записи у памяти ЕЕПРОМ относительно мало, поэтому нужно максимально ограничивать число записей в алгоритме программы.

3. Память ЕЕПРОМ самый тормозной тип данных, это нужно учитывать. Особенно при записи в ЕЕПРОМ. Можно получить каку, например, запихнув обработку еепром в прерываниях. В особо ответственных моментах можно использовать флаги состояния памяти ЕЕПРОМ, бывает очень полезно.

После обявления еепром и переменной я делаю команду присвоения числа из еепром в переменную, до начала основного цикла и как правило до начала работы прерываний:

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

Вот пример куска кода записи в ЕЕПРОМ:

unsigned char a; // объявляем беззнаковую переменную размером 8 бит
unsigned char eeprom eea; // объявляем еепром такого же типа,
unsigned char trig; // объявляем переменную, которая будет помнить, что кнопка нажата.

Далее идет основанная часть программы void main(void), в ней :

a=eea; // загоняем данные в с еепром в переменную

Далее идет главный цикл while(1) и в теле цикла:

if(key==1) // если кнопка настройки нажата, то:

else // если кнопка отжата

>

Запись в ЕЕПРОМ срабатывает по отжатию кнопки единожды, когда триггер равен единице.

Учимся прошивать ЭБУ Bosch ME7.5 / Правим Eeprom (на примере 06A906032SG)

cb380cds 100

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

Для тех, кто говорит, что можно прошить галетой, мппс и прочее — на момент написания поста в наличии лишь китайский синий FTDI.

I. Подключение ЭБУ на столе.
II. Считывание Eeprom на столе.
III. Подключение ЭБУ на автомобиле (bootmode).
IV. Считывание Eeprom на автомобиле (bootmode).
V. Правка Eeprom.
VI. Работа с флеш-памятью.

В блоке управления двигателя содержатся несколько типов памяти, каждая из которых выполняет свою функцию. Нас интересуют микросхемы памяти 95040 и AM29F800BB (и аналогичные). Каждая из них содержит в блоке очень важную информацию, при несоответствии которой блок может быть недееспособен.
95040 содержит в себе информацию о «паспорте» блока управления. В зависимости от версии иммобилайзера может содержать в себе все данные иммобилайзера, такие как логин, immo ID, immo Data, вин-номер и прочее. Тип данных этой микросхемы обозначается как EEPROM.
Другой тип неизменяемой памяти, хранящейся в AM29F800BB (или подобных), называется «флеш-памятью». Она содержит в себе все данные о работе двигателя, всех его режимах работы, его оснащенности и взаимосвязи между всеми его компонентами.
Поскольку я произвел полный свап ДВС, ЭБУ, приборной панели, ключей и прочего-прочего, то мне хотелось, чтобы все блоки отображали реальный вин-номер моей тачки. Для приборной панели это не составляет совершенно никаких проблем (Eeprom Programmer 1.19g). А вот с мозгами пришлось провести некоторые манипуляции.

I. Подключение ЭБУ на столе.
ЭБУ прикуривал используя компьютерный блок питания (чтобы он работал без компьютера, необходимо поставить перемычку между зеленым и черным проводом). +12В берем с желтого провода, землю с черного (предварительно лучше убедиться и все проверить мультиметром), также я повесил 12В лампочку на БП, чтобы он не работал вхолостую, в некоторых источниках указано, что работа БП без нагрузки может быть губительна для него.

6f447g4k1e3 960

Цепляем проводами к шнурку:
Пин 4, 5 > Масса
Пин 7 > К-линия (пойдет на 43 пин ЭБУ)
Пин 16 > +12В

6f3efg4k134 960

к блоку управления:
Пин 1 > Масса
Пин 2 > Масса
Пин 3 > +12В
Пин 43 > К-линия (от 7 пина шнурка)
Пин 62 > +12В

6f521404k17f 960

Получилось что-то в этом духе:

6f445804k372 960

Маленькие пинчики для подключения к блоку брал от разъема приборной панели (VAG N 907 647 01).

6f445c04k1ac 960

II. Считывание Eeprom на столе.
Для того, чтобы мы могли считать Eeprom нам потребуется ввести блок управления в бут-режим. Для этого необходимо указанную ногу флеш-памяти замкнуть на массу через 10 кОм резистор.

6f525404lf2 960
6f3b7804k258 960
6f446404k114 960

Для контроля над своими действиями и самим собой я повторял описанную выше процедуру несколько раз подряд, сравнивая слитый Eeprom в редакторе (Araxis Merge, например).
Eeprom слит, значит вы защищены от непредвиденных ошибок чтения/записи и всегда можете вернуть как было.

6f448g4l22 960

III. Подключение ЭБУ на автомобиле (bootmode).
Если вам не хочется заморачиваться с блоком питания, искать и подключать эти пины, то есть второй вариант подключения блока. Снимаем минусовую клемму АКБ, извлекаем ЭБУ из автомобиля, снимаем верхнюю крышку с блока, несем обратно в авто. Выворачиваем разъемы проводки таким образом, чтобы ЭБУ был подключен и при этом лежал на лобовом стекле (это касаемо шкоды, на других авто может отличаться).

IV. Считывание Eeprom на автомобиле (bootmode).
Шнур подключаем в разъем OBD. Все, что касается программной части и командной строки, то все остается как в части «II.». Изменяется лишь алгоритм ввода ЭБУ в бут-режим. Итак, мозги подключены и лежат на лобовом стекле. Один человек замыкает контакты, как показано в части «II.» Другой при этом поворачивает замок зажигания в включенное положение. Также ждем 3 сек, контакты размыкаем, начинаем через командную строку считывать Eeprom. Добавлю, что необходимо будет извлечь предохранитель приборной панели, чтобы приборка не мешала компьютеру соединиться с ЭБУ! При этом при возвращении предохранителя на место у вас загорится ошибка по подушкам «Нет связи с приборной панелью», которую придется потом стирать.

Готовимся копать EEPROM ЭБУ

Сегодня первый удачный день экспериментов с «невиданной фигней»))

Если вы не увидели связи между тем и тем, то заваривайте чаёк, постараюсь рассказать о своих планах.
Знаете почему нельзя просто так взять и поставить себе ЭБУ от другой точно такой же машины?
Потому, что не даст иммобилайзер.
Иммобилайзер в реализации крайслера — это не просто коробочка, которая считывает ключ зажигания и разрешает запуск двигателя. Он как Агент Смит из Матрицы прописывает свой уникальный код в разные блоки управления, чтобы те стали единым целым. И да, в блок управления двигателя он себя тоже прописывает. Именно поэтому система отторгнет чужой ЭБУ, считав с него код от чужого иммо, и заблокирует его после нескольких неудачных попыток завестись. И именно поэтому на рынке предлагается приобретать комплект с ключами, личинками, новым замком зажигания и блоком SKIM. Решение хоть и рабочее, но проблемное по установке и дорогое. К тому же, в ЭБУ будет прописан чужой VIN, а это не есть хорошо (читал о случаях проверки сканером в МРЭО с последующим изъятием). Наверное это можно решить дилерским сканером или еще каким другим, но это пока не наш метод)
Гораздо привлекательней приобрести себе ЭБУ от себринга или стратуса и «подружить» его со своим авто самостоятельно. Не будем дальше тянуть кота за хвост: место, где «живет» иммо в ЭБУ давно известно — это пара микросхем EEPROM на блоке. Он там хранится в незашифрованном виде и даже без контрольных сумм в виде VIN-номера авто.

1oAAAgBpV A 960

Также удалось выяснить, что в качестве этих ПЗУ используются микрухи ST M95040 или M95080. Стоят эти восьминожки каких-то смешных денег — 28 р/шт (можно взять с запасом на эксперименты)

А вот с программатором не все так просто в плане денег: профессиональные решения стоят очень не кисло. и так как я никогда не имел дела с программаторами, то мне в первых строках гугло-поиск предлагал именно их))
Совершенно случайно нашел программатор, который производит контора энтузиастов с пафосным названием «Электронные войска»)

h0AAAgBpV A 960

Что ж, прикладываем к нему пустую микросхему и пробуем залить на нее дамп от Конкорда (не от самолета, конечно, от Крайслера))

…А перед этим сходим в магазин и купим кабель miniUSB! ))) Потому, что там распаян ни фига microUSB, а этот старый mini, от которого у меня уже ни устройств, ни шнуров не осталось.

Что такое eeprom в автомобиле?

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

EEPROM (Electrically Erasable Programmable Read-Only Memory)

На сегодняшний день классическая двухтранзисторная технология EEPROM практически полностью вытеснена флеш-памятью типа NOR. Однако название EEPROM прочно закрепилось за сегментом памяти малой ёмкости независимо от технологии.

Содержание

История

Элай Харари в 1977 году создал EEPROM с помощью автоэлектронной эмиссии [Источник 2] через плавающий затвор. В 1978 году Джордж Перлегос в Intel разработал процессор Intel 2816, который был построен на более ранней технологии EPROM, но использовал тонкий подзатворный окисленный слой, позволяющий чипу стереть собственные байты без УФ-источника. Перлегос и другие позже использовали технологию, которая подразумевала использование на устройстве конденсаторов для обеспечения необходимого напряжения для программирования микросхемы. [1] [2]

Принцип действия

Принцип работы EEPROM основан на изменении и регистрации электрического заряда в изолированной области (кармане) полупроводниковой структуры. [3]

Ячейка памяти EEPROM представляет собой транзистор, в котором затвор выполняется из поликристаллического кремния. Затем этот затвор окисляется и в результате он будет окружен оксидом кремния — диэлектриком с прекрасными изолирующими свойствами. Изменение заряда («запись» и «стирание») производится приложением между затвором и истоком большого потенциала, чтобы напряженность электрического поля в тонком диэлектрике между каналом транзистора и карманом оказалась достаточна для возникновения туннельного эффекта. Для усиления эффекта туннелирования электронов в карман при записи применяется небольшое ускорение электронов путём пропускания тока через канал полевого транзистора (явление инжекции горячих носителей). После снятия программирующего напряжения индуцированный заряд остаётся на плавающем затворе, и, следовательно, транзистор остаётся в проводящем состоянии. Заряд на его плавающем затворе может храниться десятки лет. Чтение выполняется полевым транзистором, для которого карман выполняет функцию затвора. Потенциал плавающего затвора изменяет пороговые характеристики транзистора, что и регистрируется цепями чтения.

Ранее подобная конструкция ячеек применялась в ПЗУ с ультрафиолетовым стиранием (EPROM).Сейчас особенностью классической ячейки EEPROM можно назвать наличие второго транзистора, который помогает управлять режимами записи и стирания. Стирание информации производится подачей на программирующий затвор напряжения, противоположного напряжению записи. В отличие от ПЗУ с ультрафиолетовым стиранием, время стирания информации в EEPROM памяти составляет около 10 мс. Структурная схема энергонезависимой памяти с электрическим стиранием не отличается от структурной схемы масочного ПЗУ. Единственное отличие — вместо плавкой перемычки используется описанная выше ячейка.

Некоторые реализации EEPROM выполнялись в виде одного трёхзатворного полевого транзистора (один затвор плавающий и два обычных). Эта конструкция снабжается элементами, которые позволяют ей работать в большом массиве таких же ячеек. Соединение выполняется в виде двумерной матрицы, в которой на пересечении столбцов и строк находится одна ячейка. Поскольку ячейка EEPROM имеет третий затвор, то, помимо подложки, к каждой ячейке подходят 3 проводника (один проводник столбцов и 2 проводника строк).

Интерфейс

Устройства EEPROM используют последовательный или параллельный интерфейс для ввода/вывода информации.

Устройства с последовательным интерфейсом

Типичный EEPROM протокол содержит 3 фазы: Код операции, фазы адреса и фазы данных. Код операции — обычно первые 8 бит, далее следует фаза адреса в 8-24 бита (зависит от устройства) и в конце запись или чтение информации.

Каждое устройство EEPROM, как правило, имеет свой код операций для выполнения различных функций. Функции для SPI EEPROM могут быть:

Ряд других операций, которые поддерживают некоторые EEPROM устройства:

Устройства с параллельным интерфейсом

Параллельные устройства EEPROM обычно содержат в себе 8-битную шину данных и адресную шину достаточного объёма для покрытия всей памяти. Большинство таких устройств имеют защиту записи на шинах и возможность выбора чипа. Некоторые микроконтроллеры содержат в себе такие интегрированные EEPROM. Операции на таких устройствах проще и быстрее в сравнении с последовательным интерфейсом EEPROM, но за счет того, что для его функционирования требуется большое количество точек вывода (28pin и больше), параллельная память EEPROM теряет популярность уступая место памяти типа Flash и последовательной EEPROM.

Другие устройства

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

Режимы отказа

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

Родственные типы памяти

Флэш-память является более поздней формой EEPROM. В промышленности, существует конвенция, чтобы зарезервировать термин EEPROM для побайтно стираемой памяти относительно поблочно стираемой флэш-памяти. EEPROM занимает большую площадь кристалла, чем флэш-память для той же мощности, потому что каждая ячейка обычно требует чтения, записи и стирания, в то время как для стирания Flash схемы памяти используются большие блоки ячеек.

Новые технологии энергонезависимой памяти, такие как в FeRAM и MRAM медленно заменяют EEPROM в некоторых устройствах, но, как ожидается, останется небольшая доля рынка для EEPROM в обозримом будущем.

Сравнение EPROM, EEPROM и Flash

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

EPROM же, напротив, использует инжекцию горячих носителей [Источник 6] на плавающем затворе. Стирание осуществляется с помощью ультрафиолетового источника света, хотя на практике многие чипы упакованы в пластик, который является непроницаемым для ультрафиолета, делая их «однократно программируемыми».

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

Работа с параметрами в EEPROM, как не износить память

Введение

Доброго времени суток. Прошлая моя статья про параметры в EEPROM была, мягко говоря, немного недопонята. Видимо, я как-то криво описал цель и задачу которая решалась. Постараюсь в этот раз исправиться, описать более подробно суть решаемой проблемы и в этот раз расширим границы задачи.

А именно поговорим о том, как хранить параметры, которые необходимо писать в EEPROM постоянно.

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

Особенность таких параметров заключается в том, что их нельзя писать просто так в одно и то же место EEPROM, вы просто израсходуете все циклы записи EEPROM. Например, если, необходимо писать время работы один раз в 1 минуту, то нетрудно посчитать, что с EEPROM в 1 000 000 циклов записей, вы загубите его меньше чем за 2 года. А что такое 2 года, если обычное измерительное устройство имеет время поверки 3 и даже 5 лет.

Кроме того, не все EEPROM имеют 1 000 000 циклов записей, многие дешевые EEPROM все еще производятся по старым технологиям с количеством записей 100 000. А если учесть, что 1 000 000 циклов указывается только при идеальных условиях, а скажем при высоких температурах это число может снизиться вдвое, то ваша EEPROM способно оказаться самым ненадежным элементом уже в первый год работы устройства.

Поэтому давайте попробуем решить эту проблему, и сделать так, чтобы обращение к параметрам было столь же простым как в прошлой статье, но при этом EEPROM хватало бы на 30 лет, ну или на 100 (чисто теоретически).

Итак, в прошлой статье, я с трудом показал, как сделать, так, чтобы с параметрами в EEPROM можно было работать интуитивно понятно, не задумываясь, где они лежат и как осуществляется доступ к ним

Для начала проясню, для чего вообще нужно обращаться по отдельности к каждому параметру, этот момент был упущен в прошлой статье. Спасибо товарищам @ Andy_Big и @ HiSER за замечания.

Все очень просто, существует огромный пласт измерительных устройств, которые используют полевые протоколы такие как HART, FF или PF, где пользовательские команды очень атомарные. Например, в HART протоколе есть отдельные команды — запись единиц изменения, запись верхнего диапазона, запись времени демпфирования, калибровка нуля, запись адрес опроса и т.д. Каждая такая команда должна записать один параметр, при этом успеть подготовить ответ и ответить. Таких параметров может быть до 500 — 600, а в небольших устройствах их около 200.

Если использовать способ, который предложил пользователь @HiSER- это будет означать, что для перезаписи одного параметра размером в 1 byte, я должен буду переписать всю EEPROM. А если алгоритм контроля целостности подразумевает хранение копии параметров, то для 200 параметров со средней длиной в 4 байта, мне нужно будет переписать 1600 байт EEPROM, а если параметров 500, то и все 4000.

Малопотребляющие устройства или устройства, питающиеся от от токовой петли 4-20мА должны потреблять, ну скажем 3 мА, и при этом они должны иметь еще достаточно энергии для питания модема полевого интерфейса, графического индикатора, да еще и BLE в придачу. Запись в EEPROM очень энергозатратная операция. В таких устройствах писать нужно мало и быстро, чтобы средний ток потребления был не высоким.

Очевидно, что необходимо, сделать так, чтобы микроконтроллер ел как можно меньше. Самый простой способ, это уменьшить частоту тактирования, скажем до 500 КГц, или 1 Мгц (Сразу оговорюсь, в надежных применениях использование режима низкого потребления запрещено, поэтому микроконтроллер все время должен работать на одной частоте). На такой частоте, простая передача 4000 байт по SPI займет около 70 мс, прибавим к этому задержку на сохранение данных в страницу (в среднем 7мс на страницу), обратное вычитывание, и вообще обработку запроса микроконтроллером и получим около 3 секунд, на то, чтобы записать один параметр.

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

Но вернемся к нашей основной проблеме — мы хотим постоянно писать параметры.

Как работать с EEPROM, чтобы не износить её

Те кто в курсе, можете пропустить этот раздел. Для остальных краткое, чисто мое дилетантское пояснение.

Как я уже сказал, число записей в EEPROM ограничено. Это число варьируется, и может быть 100 000, а может и 1 000 000. Так как же быть, если я хочу записать параметр 10 000 000 раз? И здесь мы должны понять, как внутри EEPROM устроен доступ к ячейкам памяти.

Итак, в общем случае вся EEPROM разделена на страницы. Страницы изолированы друг от друга. Страницы могут быть разного размера, для небольших EEPROM это, скажем, 16, 32 или 64 байта. Каждый раз когда вы записываете данные по какому-то адресу, EEPROM копирует все содержимое страницы, в которой находятся эти данные, во внутренний буфер. Затем меняет данные, которые вы передали в этом буфере и записывает весь буфер обратно. Т.е. по факту, если вы поменяли 1 байт в странице, вы переписываете всю страницу. Но из-за того, что страницы изолированы друг от друга остальные страницы не трогаются.

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

Да придется пожертвовать память, но как сделать по другому, я пока не знаю. Если есть какие мысли — пишите в комментариях.

Анализ требований и дизайн

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

Все требования можно сформулировать следующим образом:

Пользователь должен задать параметры EEPROM и время обновления параметра

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

Количество циклов перезаписи

Время обновления параметра

Время жизни устройства

Хотя конечно, можно было дать возможность пользователю самому задавать количество записей, но что-то я хочу, чтобы все считалось само на этапе компиляции.

Каждая наша переменная(параметр) должна иметь уникальный начальный адрес в EEPROM

Мы не хотим сами руками задавать адрес, он должен высчитываться на этапе компиляции

При каждой следующей записи, адрес параметра должен изменяться, так, чтобы данные не писались по одному и тому же адресу

Это также должно делаться автоматически, но уже в runtime, никаких дополнительных действий в пользовательском коде мы делать не хотим.

Мы не хотим постоянно лазить в EEPROM, когда пользователь хочет прочитать параметр

Обычно EEPROM подключается через I2C и SPI, передача данных по этим интерфейсам тоже отнимает время, поэтому лучше кэшировать параметры в ОЗУ, и возвращать сразу копию из кеша.

При инициализации мы должны найти самую последнюю запись, её считать и закешировать.

За целостность должен отвечать драйвер.

За алгоритм проверки целостности отвечает драйвер, если при чтении он обнаружил несоответствие он должен вернуть ошибку. В нашем случае, пусть в качестве алгоритма целостности будет простое хранение копии параметра. Сам драйвер описывать не буду, но приведу пример кода.

Ну кажется это все наши хотелки. Как и в прошлой статье давайте прикинем дизайн класса, который будет описывать такой параметр и удовлетворять нашим требованиям:

Класс AntiWearNvData будет похож на, CachedNvData из прошлой статьи, но с небольшими изменениям. При каждой записи в EEPROM, нам нужно постоянно сдвигать адрес записи, поэтому необходимо хранить индекс, который будет указывать на номер текущей записи. Этот индекс должен записываться в EEPROM вместе с параметром, чтобы после инициализации можно было найти запись с самым большим индексом — эта запись и будет самой актуальной. Индекс можно сделать uint32_t точно хватит на 30 лет — даже при 100 000 циклах записи.

Посмотрим на то, как реализуются наши требования таким дизайном.

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

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

По нему мы будет рассчитывать следующий адрес записи

Для того, чтобы после выключения/включения датчика найти последнюю запись, считать её и проинициализировать значением по адресу этой записи кеширумое значение в ОЗУ.

Давайте посмотрим как реализован метод расчета текущего адреса записи:

Мы не хотим постоянно лазить в EEPROM, когда пользователь хочет прочитать параметр

Метод Get() — крайне простой, он просто возвращает копию из ОЗУ

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

В общем-то и все класс готов, полный код класса:

Результат

Собственно все, теперь мы можем регистрировать в списке любые параметры:

Что произойдет в этом примере, когда мы будем писать 10,11,12. 15 в наш параметр. Каждый раз при записи, адрес параметра будет смещаться на размер параметра + размер индекса + размер копии параметра и индекса. Как только количество записей превысит максимальное количество, параметр начнет писаться с начального адреса.

На картинке снизу как раз видно, что число 15 с индексом 5 записалось с начального адреса, а 10 теперь нет вообще.

В данном случае после сброса питания, при инициализации, будет найдена запись с индексом 5 и значением 15 и это значение и индекс будут записаны в кэшируемую копию нашего параметра.

Вот и все, надеюсь в этой статье цель получилось пояснить более детально, спасибо за то, что прочитали до конца.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Eeprom что это такое в автомобиле

Итак, что такое EEPROM и как правильно понимать суть этого слова, встречая его в тексте и говоря при этом про программирование блоков управления?

Для начала обратимся к истории. В старых блоках управления микросхемы памяти EEPROM использовались для записи адаптаций, а также уникальных сведений об автомобиле (VIN, синхронизация иммобилайзера и т.д.). Грубо говоря, в EEPROM записывалось всё, что не относится к самой прошивке. Программа управления двигателем (прошивка) при этом хранилась в отдельной микросхеме Flash-памяти.

Данные хранимые в микросхеме EEPROM тоже называли просто «EEPROM», иногда даже опуская слово «данные» (технически грамотно было бы говорить хотя бы «данные EEPROM», но некоторые мастера этим попросту пренебрегали).

Спустя некоторое время, когда ЭБУ стали куда более современными, а технологии изготовления Flash-памяти значительно шагнули вперед, когда даже процессоры сами по себе стали содержать внутреннюю Flash-память достаточного объема, от микросхем памяти EEPROM начали отказываться. А данные, которые раньше приходилось хранить в EEPROM, стало принято хранить во Flash-памяти, вместе с основной микропрограммой. Эту область Flash-памяти, куда записываются «данные EEPROM», стали называть «виртуальный EEPROM» (Virtual EEPROM), что с технической точки зрения вроде бы некорректно, но настолько укоренилось в лексиконе, что и спорить уже бесполезно.

Таким образом, догадываться о смысле термина приходится исключительно исходя из контекста. В каких-то случаях, EEPROM это просто микросхема, в каких-то случаях это данные, а в каких-то случаях речь может, вовсе, идти про область (определенное адресное пространство) Flash-памяти.

Ссылка на основную публикацию
Похожее