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

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

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

  • Главная
  • Рубрикация
  • Указатель А — Я
  • Порталы
  • Произвольно
  • Журнал
  • Редакторам
    • Ссылки сюда
    • Связанные правки
    • Загрузить файл
    • Спецстраницы
    • Версия для печати
    • Постоянная ссылка
    • Сведения о странице
    • Цитировать страницу
    • Читать
    • Просмотр
    • История

EEPROM (Electrically Erasable Programmable Read-Only Memory)

EEPROM (Electrically Erasable Programmable Read-Only Memory) — электрически стираемое перепрограммируемое ПЗУ (ЭСППЗУ), один из видов энергонезависимой памяти (таких, как EPROM и PROM), используемой в компьютерах и других электронных устройствах для хранения относительно небольших объемов данных но с возможностью чтения, удаления или записи байтов по отдельности. В EEPROM памяти чаще всего хранятся пользовательские данные в сотовых аппаратах, которые не должны стираться при выключении питания (например адресные книги), конфигурационная информация роутеров или сотовых аппаратов, реже эти микросхемы применяются в качестве конфигурационной памяти FPGA или хранения данных DSP. Микросхемы организованы в виде массивов плавающего затвора транзисторов [Источник 1] . Они могут быть запрограммированы и соединяются в цепи, путем применения специальных сигналов программирования. Изначально, микросхемы были ограничены для однобайтовых операций, которые сделали их медленнее, но современные микросхемы позволяют многобайтовые операции. EEPROM также имеет ограниченный срок для стирания и перепрограммирования, теперь достигает миллиона операций в современные микросхемы.

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

Содержание

  • 1 История
  • 2 Принцип действия
  • 3 Интерфейс
    • 3.1 Устройства с последовательным интерфейсом
    • 3.2 Устройства с параллельным интерфейсом
    • 3.3 Другие устройства
  • 4 Режимы отказа
  • 5 Родственные типы памяти
  • 6 Сравнение EPROM, EEPROM и Flash
  • 7 Список производителей EEPROM
  • 8 Примечания
  • 9 Источники
  • 10 Литература

История

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

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

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

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

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

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

Интерфейс

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

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

Общий интерфейс может быть в виде шин: SPI [Источник 3] и I²C [Источник 4] , Microwire, UNI/O [Источник 5] и 1-Wire.

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

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

  • Write Enable (WRENAL)
  • Write Disable (WRDI)
  • Read Status Register (RDSR)
  • Write Status Register (WRSR)
  • Read Data (READ)
  • Write Data (WRITE)

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

  • Program
  • Sector Erase
  • Chip Erase commands

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Электроника для всех

Блог о электронике

AVR. Учебный Курс. Использование EEPROM

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

Читайте также  Как вытравить ржавчину на автомобиле?

Чтобы что-то записать в EEPROM нужно в регистры адреса EEARH и EEARL (EEPROM Address Register) положить адрес ячейки в которую мы хотим записать байт. После чего нужно дождаться готовности памяти к записи – EEPROM довольно медленная штука. О готовности к записи нам доложит флаг EEWE (EEPROM Write Enable) регистра управления состоянием EECR, когда он будет равен 0, то память готова к следующей записи. Сам байт, который нужно записать, помещается в регистр EEDR (EEPROM Data Register). После чего взводится предохранительный бит EEMWE (EEPROM Master Write Enable), а затем, в течении четырех тактов, нужно установить бит EEWE и байт будет записан. Если в течении четырех тактов не успеешь выставить бит EEWE то предохранительный бит EEMWE сбросится и его придется выставлять снова. Это сделано для защиты от случайной записи в EEPROM память.

Чтение происходит примерно аналогичным образом, вначале ждем готовности памяти, потом заносим в регистры нужный адрес, а затем выставляем бит чтения EERE (EEPROM Read Enable) и следующей командой забираем из регистра данных EEDR наше число, сохраняя его в любом регистре общего назначения. Чтобы было понятно, я тебе набросал две процедурки – на чтение и на запись. Чтобы записать байт , нужно в регистры R16 и R17 занести младший и старший байт адреса нужной ячейки, а в регистр R21 байт который мы хотим записать. После чего вызвать процедуру записи. Аналогично и с чтением – в регистра R16 и R17 адрес, а в регистре R21 будет считанное значение.

Вот так выглядит запись в память:

… LDI R16,0 ; Загружаем адрес нулевой ячейки LDI R17,0 ; EEPROM LDI R21,45 ; и хотим записать в нее число 45 RCALL EEWrite ; вызываем процедуру записи.

LDI R16,0 ; Загружаем адрес нулевой ячейки LDI R17,0 ; EEPROM из которой хотим прочитать байт RCALL EERead ; вызываем процедуру чтения. После которой ; в R21 будет считанный байт.

Ну и, разумеется, сами процедуры чтения и записи

EEWrite: SBIC EECR,EEWE ; Ждем готовности памяти к записи. Крутимся в цикле RJMP EEWrite ; до тех пор пока не очистится флаг EEWE CLI ; Затем запрещаем прерывания. OUT EEARL,R16 ; Загружаем адрес нужной ячейки OUT EEARH,R17 ; старший и младший байт адреса OUT EEDR,R21 ; и сами данные, которые нам нужно загрузить SBI EECR,EEMWE ; взводим предохранитель SBI EECR,EEWE ; записываем байт SEI ; разрешаем прерывания RET ; возврат из процедуры EERead: SBIC EECR,EEWE ; Ждем пока будет завершена прошлая запись. RJMP EERead ; также крутимся в цикле. OUT EEARL, R16 ; загружаем адрес нужной ячейки OUT EEARH, R17 ; его старшие и младшие байты SBI EECR,EERE ; Выставляем бит чтения IN R21, EEDR ; Забираем из регистра данных результат RET

Да, при работе с EEPROM нужно в цикле ожидания готовности не забывать командой WDR сбрасывать Watch Dog Timer — специальный сторожевой таймер, отслеживающий зависание процессора. Если его не сбрасывать с нужной периодичностью, то он сбрасывает контроллер. Это, конечно, если Watch Dog используется. По дефолту он вырублен. Но помнить надо, иначе огребете трудно отслеживаемый глюк.

Впрочем, у EEPROM тоже есть свои прерывания. Это:

.ORG $01E RETI ; (EE_RDY) EEPROM Ready

И никто не помешает выбросить цикл ожидания и сделать массовую запись в ЕЕПРОМ на прерываниях! Аналогично как это сделано для USART. А если надо что то сохранить очень быстро, то можно и буферизированную с пробросом через RAM таким же образом запись заюзать. Т.е. сначала быстро сожрали в оперативку, а потом, неспеша, по прерываниям, загнать в EEPROM.

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

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

127 thoughts on “AVR. Учебный Курс. Использование EEPROM”

Спасибо! Отличная статья! Как раз сейчас нужно будет использовать EEPROM. Конечно можно прочитать даташит, что я обычно и делаю, но там все довольно разбросано, а здесь раз прочитал и в голове сложилась четкая структура.

P.S. Еще интересно, может у тебя уже был опыт по использованию карт памяти SD/MMC? Там же вроде элементарно по SPI с ними общаться.

До SPI пока руки не доходили. А так да, в планах. С этими карточками проблема составляет не SPI доступ, а FAT 🙂

Впринципе туда можно любую файловую систему зарулить. Хоть Fat, хоть Ext2fs, хоть вобще BSD’шную файловую систему.
А описаний и документации, как работать с этими системами хоть отбавляй!
Хочу использовать SD катрочку в автомобильном логгере (запись показаний датчиков системы впрыска)

Забыл написать, что у атмеловских контроллеров есть так называемая «мертвая зона» EEPROM-a. У 64й атмеги, например, это все адреса от 0x00 — 0x100. Так же была замечена тенденция (по крайней мере на атмегах), чем круче модель (ATMeag32->64->128), тем больше у нее мертвая зона EEPROM. Причем в документации, про нее нифига не написано и подбирать придется в ручную. Ах да, чем же она такая мертвая эта зона. А тем, что запись и чтение в ней происходят через раз, а то и не происходят вообще. Дрочится конечно можно, но лучше оставить эти 100 адресов на советси разработчиков и работать со стабильным ПЗУ.

Может это контроллеры бракованные были? Или может запись производилась без проверки готовности EEPROM’а?

Нет, контроллеры н бракованные и запись проводилась так как нужно, будь уверен.

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

Задание:
Разработать систему измерения частоты и скважности сигнала с ТТЛ – совместимыми уровнями и вывод результата на индикатор МТ-16S2х (частота – верхняя строка, скважность — нижняя). Диапазон измеряемых частот — 1÷1000 Гц. Абсолютный шаг измерения скважности – не менее 0,1 мс. Период накопления данных при измерении частоты – 1 секунда.
ядро м/п системы:
ATMEGA-8, ATTINY2313 (AVR)
Нужны:
расчетные параметры устройств (адреса, режимы работы и.т.д.),
принципиальную электрическую схему системы,
блок-схему программы, программу на языке ассемблера.

Помогите пожалуйста, я не понимаю в этом ничего. А вам может будет интересно.
Зарание спасибо.

Не, нам это не интересно уже. Если будут _конкретные_ вопросы, на которые можно будет дать четкий ответ, то задавай.

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

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

Блин, парюсь уже часа 3 с этим EEPROM
В .ESEG объявил константы, так Студия не цапает их сама при эмуляции — пришлось вручную через меню указывать файл .epp. Ладно, вроде заработало.
Но!! В Протеусе никак не могу загрузить данные EEPROM. Уж и конвертер hex2bin скачал, .epp файл конвертнул в .bin, указал в настройках ATMega8 — Initial Contens of EEPROM этот файл. А нифига — смотрю в паузе на содержимое EEPROM — везде 0xFF
Помогите, плиз!

Хм… Помог сброс данных модели и последующий выбор .bin файла….
И все-таки протеус очень веселый….

З.Ы. Студия тоже не фонтан… Сменил в простеньком проекте мегу8 на мегу 32 — так студия перестала показывать состояние всех РВВ… Создал пустой проект, скопипастил код туда — все заработало 🙂 Чудеса просто…

А вот такой насущный вопрос:
Собираю схему электронного одометра. Надо будет хранить пробег включая сотни метров. Ясно, что возможность записи в EEPROM закончится очень быстро. Вопрос: 100,000 записей это для всей памяти либо для одной ячейки? Т.е. могу ли я записать в оду ячейку 100000 раз потом перейти к следующей и т.д. таким образом использовать EEPROM долгое время? Если нет, то какой выход в данной ситуации можно посоветовать?
Спасибо!

Читайте также  Чем удалить царапины на автомобиле своими руками?

1 применить память типа FRAM от Ramtron у ней число циклов перезаписи такое, что скорей у твоей машины все молекулы сотрутся.

2 держать данные в памяти, а на епром сбрасывать раз в 10-15 минут.

И 100 000 это для каждой ячейки.

Почему фигня в еепром при включении питания пишется? бодлевел вроде поставил.

Мой архив по ремонту Audi

Ремонт и обслуживание Audi

  • Главная
  • Мотор 1.8т 20v
    • Постройка мотора
      • Разжился новым блоком 1.8т
      • Снятие мотора
      • Дефектовка маслонасоса 1.8т
      • Сборка поршневой
      • Финальная сборка блока
      • Установка блока на машину
      • Финал, установка ГБЦ
      • Завершение — Помывка
      • Кап. ремонт ГБЦ
    • Ремонт ГБЦ 1.8т 20v
      • Снятие ГБЦ
      • Разборка ГБЦ
      • Чистка ГБЦ
      • Сборка ГБЦ
      • Установка ГБЦ
      • Замена МСК
      • Промывка гидрокомпенсаторов
      • Ремонт Фазика, Фазовращятеля
      • Прирезка седел
      • Точность ручной прирезки
      • Кап. ремонт ГБЦ
    • Направляющие для ГБЦ
      • Сравнение направляющих
      • Приспособление для самостоятельной выпрессовки направляющих
      • Приспособление для самостоятельной запрессовки направляющих
    • Документация по мотору
      • Шпаргалка по устройству головы 1.8 турбо
      • Шпаргалка по устройству ГБЦ ADR.
    • Всякое полезное
      • Внутренний фильтр форсунки
      • Дефектовка дроссельной заслонки
      • Ремонт дроссельной заслонки 1.8т
      • Замена масла через щуп.
      • Перенос байпаса
      • Чистка клапана СВВ
      • Промывка двигателя димексидом
  • A4 B5 механика
    • Радиатор ГУР от УАЗ
    • Замена вискомуфты
    • Регулировка форс. омывателя
    • Ремонт петель подлокотник
    • Уплотнитель багажника
    • Ремонт адсорбера
    • Замена Радиатора печки
    • Тест пробок рас. бачка
    • Как прыгает маслопробка
    • Восстановление фар
    • Чистка обивки салона
    • Приспособление для оцинковки сколов
  • MAF (ДМРВ) Bosch
    • Самомтоятельная диагностика MAF(ДМРВ)
    • Простой тестер MAF(ДМРВ) своими руками.
    • Инструкция для осциллографа-тестера MAF(ДМРВ)
    • Как и чем правильно промывать MAF(ДМРВ)
    • Тестирование нового МАФ от NTK
    • Пример чистки MAF 1
    • Пример чистки MAF 2
    • Пример чистки MAF 3
  • Электрика
    • Салон
      • Как Снять Navi +.
      • Ремонт RDS-TMC тюнера
      • Питания на ТMC тюнер
      • Установка эмулятора CD
      • Подключение мультируля
      • Ремонт кнопок на руле
      • Камера заднего вида к Navi
      • Колечки в приборку
      • Салонное зеркало
    • Зажигание
      • Кап. ремонт жгута катушек зажигания
      • Замена катушек зажигания на улучшенные, от R8,RS6
      • Главное реле, питание катушек зажигания
    • Мотор и кузов
      • Замена щеток в генераторе Valeo
      • Ремонт моторчика дворников
      • Ремонт клапанов N249 и N112
      • Питание лямбда зондов
    • Схемы, блоки
  • Диагностика
    • Автомобильный Осциллограф
    • Делаем VCDS шнур
    • Ремонт KKL, VAG COM
    • Galletto 1260K-line из подручных материалов.
    • Тестер тормозухи
    • Генератор импульсов для промывки форсунок
    • Простой дымогенератор
    • Манометр для замера давления масла
    • Мини камера
  • Иммобилайзер, ц. замок
    • Ремонт Immo1
    • Привязка ключей A4 B5
    • Проверка кнопок брелка ЦЗ
    • Ремонт блока ЦЗ
    • Ремонт контактов блока ЦЗ
    • Описание блоков ЦЗ VAG. 1983-2003года.
  • ЭБУ прошивка и доработка
    • Двухпрошивочный ЭБУ ME 7.5
    • Плата переключения прошивок для Вosch ME 7.5
    • Установка двух прошивочного блока на машину.
    • Самомтоятельная прошивка ЭБУ МЕ7.5
    • Простой программатор для чтения EEPROM приборок и мозгов
  • Приборная панель
    • Замена дисплея
    • Вытаскивание пин кода из приборки UK-NSI
    • Вывод информации на приборку с navi plus rns-d
    • Дампы приборных панелей VAG, моя подборка.
  • Audi 100(200)
    • Электрика A100, А80
    • Впрыск
    • Диагностика и ремонт
    • Климат контроль
    • Отчетки по ремонту

Простой программатор для чтения EEPROM приборок и мозгов

Простой программатор для чтения EEPROM приборок и мозгов из подручных материалов.

Понадобилось мне тут вычитать eeprom приборки VDO, то что он легко вычитывается KKL шнурком я в курсе ? Программатора для этих флешек у меня не было. Полазив по сусекам нашел программатор USBASP, это программатор AVR микроконтроллеров, стоит всего 90 руб. Вспомнил что где то читал что его легко превратить в программатор spi, i2 и microwire флешек банально сменой прошивки. Эти флешки используются в приборках и практически во всех блоках управления двигателем. То что надо, перекрывает почти все мозги и приборки.
Вообще считать – записать eeprom обычно надо для того что б вытянуть пароль иммо, отключить иммо, скорректировать в мозгах вин номер и логин иммо, восстановить eeprom после не удачной прошивки и окирпичивании устройства… В общем полезный зверек, тем более не везде можно это сделать софтово.

Для начала берем вот такой программатор.

Вот мои. Почему 2 ? Да по тому что надо будет в одном прошивку сменить и превратить его в программатор флешек. Если нет второго то не беда, соберите программатор для ЛПТ порта из пяти проводков и резисторов. Но у меня две штуки есть, купил давно на всякий случай по акции, для прошивки диагностических кабелей использую.

Соединяем программаторы вот так и меняем в одном прошивку. Будет он у меня программатором под флешки. Где взять прошивку и как прошить написано вот тут forum.easyelectronics.ru/viewtopic.php?t=10947 там же и программа для работы с usbasp в роли программатора флешек. Это пост автора проекта. Огромное ему спасибо!

Смотрим что он поддерживает в интересующем меня диапазоне машин. А поддерживает практически все ? Все приборки и почти все блоки управления… Имею ввиду установленные в них микросхемы памяти.

Вот допустим модели мозгов Audi, зелеными галочками пометил что поддерживает.

Вот конкретно по моим любимым мозгам МЕ 7.5 из которых сделал себе двух прошивочные

Приступим к работе с ним.
У меня задача вытянуть eeprom из приборки VDO, узнать пароль иммо и при необходимости залить вытянутый дамп в другую сохранив калибровки стрелок и привязанные ключи. Почему я не делаю это софтово? Очень просто, приборка радостно сгорела с дымком и все такое. Кирпич в общем ? В таких вот случаях без программатора не обойтись.

Берем приборку. Как разобрать писать не буду и так все знают ?

Вон она. Флешка с eepromом. 93С86…

Выпаиваем ее по быстрому…

Подключаем в соответствии со схемой. Схема разнится от типа флешки. У меня в VDO стоит microwire 93LС86… Значит по второй схеме…

Так как панельки у меня под SMD8 нет (заказал), то сделаю по быстрому переходник.
Возьму кусочек шлейфа, разделаю, нанесу цветовые метки.

И банально подпаяю, благо делов на минуту… Не очень фотогенично зато надежно ?

Напряжение питания выбираем в соответствии с даташитом на микросхему. Программатор выдает или 3.3v или 5v, переключается перемычкой. В моем случае любое, так как микросхема может работать в диапазоне 2.5-5.5 вольт.

Теперь можно подсоединить к компу и начать процесс считывания.

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

Далее все просто. Нажимаем считать. Идет процесс. Все считано.
Вот почти и все. EEPROM считан. Но есть одна тонкость, считан он правильно но не совсем. При чтении прошивки из EEPROM 93с86 байты в словах перевернуты. Например первое слово 02 03 а должно быть 03 02. Так как проект этого софта не коммерческий то он очень простой и в нем нет опции intel/motorola с которой сразу правильно. Но это не беда ? Сохраняем файл.

Теперь запускаем редактор WinHex, открываем нем файл нашего eeprom и делаем ему свап.
Вот так:
Правка – Модифицировать данные

В менюшке выбираете «Обратный порядок байт», блин, у меня кота байтом зовут ? Ставим 2 байта и жмем «ОК»

Вот и все, наш eeprom в нужном нам виде предстает ?
Ну и сохраняете его. В случае с приборкой VDO иммо3 можете на вин номер ориентироватся, если он стал правильно отображается то все правильно мы сделали

Теперь пароль на иммо вытянуть надо. Тут можно руками и все такое но на много проще сделать это с помощью всеми любимой программы, а именно VAG EEPROM Programmer.
Открываете полученный файл eeprom и в нем и сразу все что надо видите ?
Можно или ручками перенести данные в новую приборку а можно этот дамп залить со всеми калибровками и шкаламии ключами. Ну и пробег можете подкрутить пока законом не запретили ?
Вот так все просто ?

Введение

Если вы читали предыдущий материал, то знаете как объявлять, читать и записывать данные в EEPROM. Но давайте разберемся, как же на самом деле происходят эти операции и что от нас скрывает компилятор. Это позволит лучше понимать работу микроконтроллера, и при желании написать свои специфические функции для работы с EEPROM.

Читайте также  Чем можно промыть систему охлаждения в автомобиле?

Регистры для работы с EEPROM

Для работы с EEPROM используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.

Регистр адреса EEAR (EEPROM Address Register) предназначен для адресации однобайтной ячейки EEPROM памяти, к которой будет производиться обращение.
Для полной адресации хотя бы минимального объема EEPROM памяти (512-ти байт) требуется 9 разрядов (2 в 9-ой степени = 512), поэтому регистр EEAR является 16-ти разрядным и физически расположен в двух регистрах ввода/вывода – EEARH и EEARL. Регистр EEARL полностью доступен для записи/чтения. А в регистре EEARH для записи/чтения доступны только младшие разряды, используемые для адресации. Остальные разряды доступны только для чтения и содержат «0».

Для чтения/записи используется один и тот же регистр данных – EEDR (EEPROM Data Register). Если выполняется процедура записи, мы должны поместить в EEDR байт данных, если выполняется процедура чтения, прочитать байт данных из EEDR.


Регистр управления EECR (EEPROM Control Register)
предназначен для управления доступом к EEPROM.

Бит EERIE (EEPROM Ready Interrupt Enable) – разрешение/запрещение прерывания по событию готовности EEPROM. Если бит EERIE установлен в 1, установлен флаг глобального разрешения прерываний (бит I регистра SREG) и бит EEWE очищен, то микроконтроллер будет генерировать прерывание “EEPROM Ready Interrupt”.

Бит EEMWE (EEPROM Master Wirte Enable) — главное разрешение записи. Если в течении 4-ех тактов после установки этого бита, устанавливается бит EEWE, то микроконтроллер выполняет запись в EEPROM. Бит EEMWE аппаратно сбрасывается в ноль после 4-ех периодов тактовой частоты.

Бит EEWE (EEPROM Write Enable) — разрешение записи. Этот бит выполняет роль стартового сигнала записи в EEPROM. Когда установлен адрес, данные и бит EEMWE, установка бита EEWE инициирует запись в EEPROM. Бит EEWE должен быть установлен в течении 4-ех тактов после установки EEMWE. Если это произойдет позже, то запись в EEPROM не будет произведена. Чтобы избежать возможных проблем, рекомендуется запрещать прерывания на время выполнения записи в EEPROM.
Бит EEWE аппаратно сбрасывается, после завершения операции записи. Поэтому перед каждой операцией записи в EEPROM нужно проверять состояние этого разряда.

Бит EERE (EEPROM Read Enable) — разрешение чтения. Установка бита EERE инициирует процесс чтения из EEPROM. Перед каждым циклом чтения нужно проверять состояние разряда EEWE, если выполняется операция записи, то чтение из EEPROM не даст результата.

Низкоуровневая запись в EEPROM на Си

Разберем вариант низкоуровневой работы с EEPROM, то есть без использования встроенных макросов/функций компиляторов. Допустим, мы объявили в EEPROM переменную, как нам изменить ее значение из своего приложения?

Процедура записи в EEPROM состоит из следующих шагов:

1. Ожидаем готовности EEPROM, опрашивая бит EEWE регистра EECR.
2. Устанавливаем адрес в регистре EEAR.
3. Записываем байт данных в регистр EEDR.
4. Устанавливаем основной флаг разрешения записи EEMWE регистра EECE
5. Устанавливаем флаг разрешения записи EEWE регистра EECE

Тут есть два нюанса.
Запись в EEPROM не может производиться одновременно с записью во флэш память. Если ваше приложение в какие то моменты пишет во флэш, то перед записью EEPROM`а, проверьте флаг SPMEN регистра SPMCR. Он должен быть сброшен в ноль. Более подробную информацию смотрите в даташите.

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

В Си коде описанная последовательность будет выглядеть так:

где adr- это адрес байта в EEPROM, value — данные для записи, EEAR — 16-ти разрядный регистр адреса.

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

где data — переменная объявленная в EEPROM, а & — оператор взятия адреса.

Этот код будет одинаковым для IAR AVR, CodeVison и Atmel Studio, а если оформить его в виде функции, то возникнут отличия.

Для IAR AVR и CodeVision AVR:

Для Atmel Studio:

Вариант функции записи с запрещением прерываний будет выглядеть следующим образом.
Для IAR AVR и CodeVision AVR:

Низкоуровневое чтение из EEPROM на Си

Процедура чтения EEPROM состоит из следующих шагов:

1. Ожидаем готовность EEPROM, опрашивая бит EEWE регистра EECR.
2. Устанавливаем адрес в регистре EEAR.
4. Устанавливаем флаг разрешения чтения EERE регистра EECR
5. Считываем содержимое регистра данных EEDR

На Си описанная последовательность будет выглядеть так:

Доступ к объявленной в EEPROM переменной:

Код оформленный в виде функции будет выглядеть следующим образом.
Для IAR AVR и CodeVision AVR:

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, цикл будет выглядеть так: