Что такое 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 в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

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

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

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

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

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

Интерфейс

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

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

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

АвтоДиагност

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

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

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

Последнее серийное Вазовское ПО поддерживает программируемую пользователем функцию альтернативного запуска, т.е контроллер в аварийном режиме разрешает произвести одну поездку при условии активации этой функции и правильного ввода пароля. Активация и ввод пароля из 6 цифр (программирование) должна производится заблаговременно и производится нажатиями на педаль газа, представьте, сколько раз Вам будет нужно, не сбиваясь, ее надавить, если Вы задумали, например, число «999999». Впоследствии, при отказе иммобилизатора, можно, опять – таки многочисленными нажатиями на газульку, упросить машину завестись. Подробнее об этом изврате для неутомимых и любознательных любителей отстоя можно почитать в описании иммобилизатора.

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

Если у Вас Январь 5.1.Х, то необходимо вооружиться Программатором блоков, скачать специальную программку перезаписи EEPROM, и залить в блок прошивку EEPROM, считанную с “чистого”, с необученным иммобилизатором, контроллера. Можно считать старый файл, любым редактором исправить все на FF и залить обратно, имеющаяся в EEPROM информация практически не несет никакой смысловой нагрузки, если блок работает без иммобилизатора, содержит лишь КС, коэффициент коррекции СО и название прошивки.
Если Вы счастливый владелец программатора ECU Programmer, убрать иммо из памяти ЭБУ можно одним изящным кликом по кнопочке “Remove Imm.” В системах Bosch M1.5.4 с запаянной микросхемой ПЗУ возможно два варианта – либо выпаивание ПЗУ и установка монтажной панели (“кроватки”), либо использование последней версии программы (aka Uncle Sam) – CombiSet.
Может так случиться, что целиком стирать eeprom нельзя, тогда нужно подредактировать дамп по методе Kn: Для удаления записи об иммо достаточно байты с 02 до 07 заменить на FF. После подключения иммо не нужен и на это место очевидно ЭБУ прописывает 0FD1 0FD1 0FD1. Если после записи FF иммо отключить физически, пишется туда 0FD30FD30FD3. Если прописать сразу не FF а 0FD10FD10FD1 иммо не мешает больше. Самое интересное – если вписать случайную последовательность на это место, то иммо работает(. ) и прописывает туда ЭБУ снова 005100510051. Меняются еще байты с 050 адреса и с 070, но на что они влияют и как – загадка.

Со всей тщательностью и внимательностью отнеситесь к данной процедуре, если запись осуществляется 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.

EEPROM и flash память

EEPROM — это энергонезавимая память с электрическим стиранием информации. Количество циклов записи-стирания в этих микросхемах достигает 1000000 раз. Заминающие ячейки в них, также как и в постоянных запоминающих устройствах с электрическим стиранием EPROM, реализуются на основе транзисторов с плавающим затвором. Внутреннее устройство этой запоминающей ячейки приведено на рисунке 1:

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 1. Запоминающая ячейка ПЗУ с электрическим стиранием (EEPROM)

Ячейка EEPROM памяти представляет собой МОП транзистор, в котором затвор выполняется из поликристаллического кремния. Затем в процессе изготовления микросхемы этот затвор окисляется и в результате он будет окружен оксидом кремния — диэлектриком с прекрасными изолирующими свойствами. В транзисторе с плавающим затвором при полностью стертом ПЗУ, заряда в “плавающем” затворе нет, и поэтому данный транзистор ток не проводит. При программировании, на второй затвор, находящийся над “плавающим” затвором, подаётся высокое напряжение и в него за счет туннельного эффекта индуцируются заряды. После снятия программирующего напряжения индуцированный заряд остаётся на плавающем затворе, и, следовательно, транзистор остаётся в проводящем состоянии. Заряд на его плавающем затворе может храниться десятки лет.

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

Структурная схема энергонезависимой памяти с электрическим стиранием не отличается от структурной схемы масочного ПЗУ. Единственное отличие — вместо плавкой перемычки используется описанная выше ячейка. Ее упрощенная структурная схема приведена на рисунке 2.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 2. Упрощенная структурная схема EEPROM

В качестве примера микросхем EEPROM памяти можно назвать отечественные микросхемы 573РР3, 558РР3 и зарубежные микросхемы серий AT28с010, AT28с040 фирмы Atmel, HN58V1001 фирмы Hitachi Semiconductor, X28C010 фирмы Intersil Corporation. В EEPROM памяти чаще всего хранятся пользовательские данные в сотовых аппаратах, которые не должны стираться при выключении питания (например адресные книги), конфигурационная информация роутеров или сотовых аппаратов, реже эти микросхемы применяются в качестве конфигурационной памяти FPGA или хранения данных DSP. EEPROM изображаются на принципиальных схемах как показано на рисунке 3.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 3. Условно-графическое обозначение электрически стираемого постоянного запоминающего устройства

Чтение информации из параллельной EEPROM памяти производится аналогично чтению из масочного ПЗУ. Сначала на шине адреса выставляется адрес считываемой ячейки памяти в двоичном коде A0. A9, затем подается сигнал чтения RD. Сигнал выбора кристалла CS обычно используется в качестве дополнительного адресного провода для обращения к микросхеме. Временные диаграммы сигналов на входах и выходах этого вида ПЗУ приведены на рисунке 4.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 4. Временные диаграммы сигналов чтения информации из EEPROM памяти

На рисунке 5 приведен чертеж типового корпуса микросхемы параллельной EEPROM памяти.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 5. Чертеж корпуса микросхемы параллельной EEPROM

Обычно данные, которые хранятся в EEPROM требуются достаточно редко. Время считывания при этом не критично. Поэтому в ряде случаев адрес и данные передаются в микросхему и обратно через последовательный порт. Это позволяет уменьшить габариты микросхем за счет уменьшения количества внешних выводов. При этом используются два вида последовательных портов — SPI порт и I2C порт (микросхемы 25сXX и 24cXX серий соответственно). Зарубежной серии 24cXX соответствует отечественная серия микросхем 558РРX.

Внутренняя схема микросхем серии 24сXX (например AT24C01) приведена на рисунке 6.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 6. Внутренняя схема микросхемы AT24C01

Подобные микросхемы широко используются для сохранения настроек телевизоров, в качестве памяти plug and play в компьютерах и ноутбуках, конфигурационной памяти ПЛИС и сигнальных процессоров (DSP). Применение последовательной EEPROM памяти позволило значительно уменьшить стоимость данных устройств и увеличить удобство работы с ними. Пример расположения данной микросхемы на печатной плате карты памяти компьютера приведен на рисунке 7.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 7. EEPROM на печатной плате карты памяти компьютера

На рисунке 8 приведена схема электронной карты с применением внешней EEPROM микросхемы.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 8. Схема электронной карты с применением внешней EEPROM

На данной схеме микроконтроллер PIC16F84 осуществляет обмен данными с EEPROM памятью 24LC16B. В таких устройствах, как SIM-карта, уже не применяется внешняя микросхема памяти. В SIM-картах сотовых аппаратов используется внутренняя EEPROM память однокристального микроконтроллера. Это позволяет максимально снизить цену данного устройства.

Схема управления для электрически стираемых программируемых ПЗУ получилась сложная, поэтому наметилось два направления развития этих микросхем:

FLASH – ПЗУ отличаются от ЭСППЗУ тем, что стирание производится не каждой ячейки отдельно, а всей микросхемы в целом или блока запоминающей матрицы этой микросхемы, как это делалось в РПЗУ.

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 9. Условно-графическое обозначение FLASH памяти

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Рисунок 10. Временные диаграммы сигналов чтения информации из ПЗУ

На рисунке 10 стрелочками показана последовательность, в которой должны формироваться управляющие сигналы. На этом рисунке RD – это сигнал чтения, A – сигналы выбора адреса ячейки (так как отдельные биты в шине адреса могут принимать разные значения, то показаны пути перехода как в единичное, так и в нулевое состояние), D – выходная информация, считанная из выбранной ячейки ПЗУ.

Вместе со статьей “Постоянные запоминающие устройства (ПЗУ)” читают:

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле
Окно программатора с дампом памяти ROM микроконтроллера MOTOROLA

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

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

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

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

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

Источник

Работа с EEPROM памятью

Что такое eeprom в автомобиле. Смотреть фото Что такое eeprom в автомобиле. Смотреть картинку Что такое eeprom в автомобиле. Картинка про Что такое eeprom в автомобиле. Фото Что такое eeprom в автомобиле

Вот и добрались мы до третьего типа памяти, доступного на Arduino: EEPROM (англ. Electrically Erasable Programmable Read-Only Memory – электрически стираемое перепрограммируемое постоянное запоминающее устройство (ЭСППЗУ)), она же энергонезависимая память. Вспомним остальные типы памяти, Flash и SRAM, и их возможности по хранению данных:

ТипЧтение из программыЗапись из программыОчистка при перезагрузке
FlashДа, PROGMEMМожно, но сложноНет
SRAMДаДаДа
EEPROMДаДаНет

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

Единственный важный момент: EEPROM имеет ресурс по количеству перезаписи ячеек. Производитель гарантирует 100 000 циклов записи каждой ячейки, по факту это количество зависит от конкретного чипа и температурных условий, независимые тесты показали 3-6 миллионов циклов перезаписи при комнатной температуре до появления первой ошибки, т.е. заявленные 100 000 взяты с очень большим запасом. Но есть небольшое уточнение – при заявленных 100 000 циклах перезаписи гарантируется сохранность записанных данных в течение 100 лет при температуре 24°C, если перезаписывать по миллиону – данные испортятся быстрее. В то же время количество чтений каждой ячейки неограниченно.

EEPROM представляет собой область памяти, состоящую из элементарных ячеек с размером в один байт (как SRAM). Объём EEPROM разный у разных моделей МК:

Основная задача при работе с EEPROM – не напутать с адресами, потому что каждый байт имеет свой адрес. Если вы пишете двухбайтные данные, то они займут два байта, и следующие данные нужно будет писать по адресу как минимум +2 к предыдущему, иначе они “перемешаются”. Рассмотрим пример хранения набора данных разного типа, расположенных в памяти последовательно друг за другом (в скобках я пишу размер текущего типа данных, на размер которого увеличится адрес для следующего “блока”):

Важный момент: все ячейки имеют значение по умолчанию (у нового чипа) 255.

Скорость работы с EEPROM (время не зависит от частоты системного клока):

Возможны искажения при записи данных в EEPROM при слишком низком VCC (напряжении питания), настоятельно рекомендуется использовать BOD или вручную мониторить напряжение перед записью.

При использовании внутреннего тактового генератора на 8 МГц, его отклонение не должно быть выше 10% (7.2-8.8 МГц), иначе запись в EEPROM или FLASH скорее всего будет производиться с ошибками. Соответственно все разгоны внутреннего клока недопустимы при записи EEPROM или FLASH.

Для работы с EEPROM в среде Arduino у нас есть целых две библиотеки, вторая является более удобной “оболочкой” для первой. Рассмотрим их обе, потому что в “чужом скетче” может встретиться всё что угодно, да и совместное использование этих двух библиотек делает работу с EEPROM невероятно удобной.

Библиотека avr/eeprom.h

Запись:

Обновление:

Макросы:

Рассмотрим простой пример, в котором происходит запись и чтение единичных типов данных в разные ячейки:

Точно так же можно хранить массивы:

В библиотеке avr/eeprom.h есть ещё один очень полезный инструмент – EEMEM, он позволяет сделать автоматическую адресацию данных путём создания указателей, значение которым присвоит компилятор. Рассмотрим пример, в котором запишем в EEPROM несколько переменных, структуру и массив, раздав им автоматически адреса. Важный момент! Адреса задаются снизу вверх по порядку объявления EEMEM, я подпишу их в примере:

EEMEM сам раздаёт адреса, основываясь на размере данных. Важный момент: данный подход не занимает дополнительного места в памяти, т.е. нумерация адресов вручную цифрами, без создания EEMEM “переменных”, не занимает меньше памяти! Давайте вернёмся к нашему первому примеру и перепишем его с EEMEM. При указании адреса через EEMEM нужно использовать оператор взятия адреса &

Ну и напоследок, запись и чтение блока через EEMEM. Адрес придётся преобразовать в (const void*) вручную:

Таким образом можно добавлять “данные” для хранения в EEPROM прямо по ходу разработки программы, не думая об адресах. Рекомендую добавлять новые данные над старыми, чтобы адресация не сбивалась (напомню, адресация идёт снизу вверх, начиная с нуля).

Библиотека EEPROM.h

Библиотека EEPROM.h идёт в комплекте с ядром Arduino и является стандартной библиотекой. По сути EEPROM.h – это удобная оболочка для avr/eeprom.h, чуть расширяющая её возможности и упрощающая использование. Важный момент: подключая в скетч EEPROM.h мы автоматически подключаем avr/eeprom.h и можем пользоваться её фишками, такими как EEMEM. Рассмотрим инструменты, которые нам предлагает библиотека:

В отличие от avr/eeprom.h у нас нет отдельных инструментов для работы с конкретными типами данных, отличными от byte, и сделать write/update/read для float/long/int мы не можем. Но зато у нас есть всеядный put/get, который очень удобно использовать! Также можем пользоваться тем, что нам даёт avr/eeprom.h, которая подключается автоматически с EEPROM.h. Рассмотрим пример с чтением/записью байтов:

Гораздо удобнее чем write_block и read_block, не правда ли? Put и get сами преобразовывают типы и сами считают размер блока данных, использовать их очень приятно. Они работают как с массивами, так и со структурами.

EEPROM.h + avr/eeprom.h

Ну и конечно же, можно использовать одновременно все преимущества обеих библиотек, например автоматическую адресацию EEMEM и put/get. Рассмотрим на предыдущем примере, вместо ручного задания адресов используем EEMEM, но величину придётся привести к целочисленному типу, сначала взяв от него адрес, т.е. (int)&адрес_еемем

С возможностями библиотек разобрались, перейдём к практике.

Реальный пример

Рассмотрим пример, в котором происходит следующее: две кнопки управляют яркостью светодиода, подключенного к ШИМ пину. Установленная яркость сохраняется в EEPROM, т.е. при перезапуске устройства будет включена яркость, установленная последний раз. Для опроса кнопок используется библиотека GyverButton. Для начала посмотрите на первоначальную программу, где установленная яркость не сохраняется. Программу можно чуть оптимизировать, но это не является целью данного урока.

Полезные трюки

Инициализация

Под инициализацией я имею в виду установку значений ячеек в EEPROM “по умолчанию” во время первого запуска устройства. В рассмотренном выше примере мы действовали в таком порядке:

При первом запуске кода (и при всех дальнейших, в которых в ячейку ничего нового не пишется) переменная получит значение, которое было в EEPROM по умолчанию. В большинстве случаев это значение не подойдёт устройству, например ячейка хранит номер режима, по задумке разработчика – от 0 до 5, а из EEPROM мы прочитаем 255. Непорядок! При первом запуске нужно инициализировать EEPROM так, чтобы устройство работало корректно, для этого нужно определить этот самый первый запуск. Можно сделать это вручную, прошив программу, которая забьёт EEPROM нужными данными. Далее прошить уже рабочую программу. При разработке программы это очень неудобно, ведь количество сохраняемых данных может меняться в процессе разработки, поэтому можно использовать следующий алгоритм:

Рассмотрим на всё том же примере со светодиодом и кнопками:

Сброс до “заводских”

Скорость

Как я писал выше, скорость работы с EEPROM составляет:

При большом желании можно использовать ячейку вместо переменной, т.е. выше мы с вами рассматривали пример, в котором EEPROM читался в переменную в программе, и дальнейшая работа происходила уже с ней. При сильной нехватке оперативной памяти можно читать значение напрямую из EEPROM, ведь это занимает ничтожно мало времени. А вот с записью всё гораздо хуже, там целых 3.3 мс. Например так:

Для изменения значения придётся прочитать ячейку, выполнить нужные операции, и снова в неё записать. Ещё один удобный хак: можно ввести макросы на чтение и запись определённых значений, например:

Получим удобные макросы, с которыми писать код будет чуть быстрее и удобнее, т.е. строка SET_MODE(3) запишет 3 в ячейку 0

Уменьшение износа

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

Посмотрим на всё том же примере:

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

Видео

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *