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 за замечания.

Если использовать способ, который предложил пользователь @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.

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

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

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

Читайте также:  mail delivery subsystem что это

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Результат

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

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

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

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

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

Источник

Eeprom эбу что это такое

I. Что это такое

Несмотря на огромную популярность предыдущей статьи (которую без указания источника информации перепечатал журнал «Мастер 12 V» и куски которой размещены еще на сотне мелких околоавтомобильных интернет – страничек) я решил ее коренным образом переработать.

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

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

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

Читайте также:  раскатистый голос это какой

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

На автомобилях «Калина» и «Приора» микрочип находится внутри штатного брелка. Брелок так же управляет штатным центральным замком (и штатной сигнализацией). В а/м «Приора» конструктивно иммобилайзер объединен с контроллером стеклопакета, на «Калине» – блок АПС‑ 6 отдельный, расположен за магнитолой.

II. Проблемы и решения.

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

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

Иммобилизатор находится: на ВАЗ 2110 прямо над ЭБУ, то есть, для того, что бы добраться до него необходимо открутить боковой щиток; в ВАЗ 2109 с высокой панелью – за панелью приборов, между рулевой колонкой и тем местом, где у карбюраторных находится подсос. На автомобиле Шевроле-Нива доступ к иммобилайзеру (как, впрочем, и ко всему другому) сильно затруднен. Расположение смотрите на фото.

При удалении иммобилизатора не забудьте восстановить линию диагностики – установить перемычку для восстановления связи ЭБУ с диагностической колодкой. Для того, что бы пользоваться всеми остальными функциями иммобилизатора, можно обрезать провода и соединить их, восстановив тем самым K‑line (об этом чуть ниже), а разъем вставить на место.

включении, не обнаружив иммобилайзер на линии диагностики, сам прописывает код разрешения запуска. Если Вы пользователь программатора COMBILOADER (или старой версии ECU Programmer) от SMS-Software, убрать иммо из памяти ЭБУ совсем элементарно – нужно считать EEPROM, нажать на кнопку «Удалить Имм» и записать дамп обратно.

Вы можете сами проанализировать дампы eeprom и соответствующий статус иммобилайзера.

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

В случае, если ЭБУ меняется на новый, иммобилизатор будет сохранять работоспособность, реагировать на ключи и выключение/включение зажигания, но запуск двигателя запрещать не будет. В этом случае необходимо полностью переобучить иммобилайзер, используя красный и черные ключи. Иммо АПС‑ 4 ранних выпусков могли немотивированно «прописаться» во вновь подсоединенный ЭБУ, но эти случаи крайне редки.

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

На автомобилях «Калина» деактивация иммобилайзера приведет к неполной работоспособности штатного центрального замка. Так же при неправильном обучении АПС‑ 6 (ошибках при активации) устройство блокируется. В этом случае единственный выход – запись «чистого» eeprom. Всегда старайтесь сохранять образа eeprom перед, да и после активации.

Назначение выводов иммобилайзера АПС‑ 6

К катушке антенны, в замке зажигания

Дополнительное реле питания стеклоподъемников

От выключателя головного света

К задним противотуманным фонарям

Постоянный плюс, от АКБ, питание АПС‑ 6

Постоянный плюс, от АКБ

Соединяется с массой при включении задних ПТФ

К катушке антенны, в замке зажигания

От ВК двери водителя

От ВК габаритного освещения

К кл. 15 блока управления СП «Норма»

К задним противотуманным фонарям

Постоянный плюс, от АКБ

K‑Line. Кл. 71 ЭСУД, кл. 3 блока управления СП «Норма»

К светодиодному индикатору АПС комбинации приборов, кл. 8 блока управления СП «Норма»

Клемма 15 замка зажигания

III. Согласование иммобилайзера и сигнализации.
(информация с Hass-Doddev.narod.ru)

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

Наиболее оптимальный способ – развязать диодами цепи концевых выключателей. Несмотря на то, что этот способ достаточно трудоемкий, он является наиболее удачным, т.к. сохраняется функция плавного гашения света. В схему добавляется 5 диодов. Диоды практически любые, на ток до 1 А и обратное напряжение 20 вольт. Три диода и провода к ним удобнее всего подсоединять у БСК. Два диода у водительской двери – непосредственно у концевика, и оттуда же тащить провод к остальным диодам.

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

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

Следующий способ исключает функцию плавного гашения плафона и требует разборки блока иммобилайзера. Разобрав его, на печатной плате можно увидеть крупный транзистор, один из выводов которого соединен с выводом № 10 иммобилайзера. Достаточно отпаять этот вывод транзистора от разъема, чтобы решить проблему.

IV. Запись информации в EEPROM ЭБУ BOSCH M 154

В дальнейшем ALMI Software планирует написать программу, работающую через K‑Line (в ПЗУ будет находится лишь «интерфейс», а данные можно будет писать прямо из ваших файлов на компьютере).


V. Процедуры активации иммобилайзеров.

Как активировать иммобилизатор там, где он считывается прямо с ключа, например, на Калине или Приоре?

Заправить в автомобиль хотя бы 10 литров бензина, чтобы не путаться в писках.

• Собрать черный ключ.
• Закрыть двери.
• Включить КРАСНЫМ ключом зажигание.
• 3 писка. Вытащить ключ.
• Быстро (в течение 5 – 6 секунд) включить ЧЕРНЫМ зажигание.
• 3 писка + 2 писка.
• Быстро (в течение 5 – 6 секунд) включить КРАСНЫМ зажигание
• 3 писка + 2 писка.
• Выключить зажигание КЛЮЧ В ЗАМКЕ.
• 1 писк.
• Быстро (в течение 5 – 6 секунд) включить зажигание на 5 СЕКУНД. (Внимание. Обязательно дождаться бибикалки – засада в этом месте).
• Мигнула аварийка, бибикнул сигнал
• Выключить зажигание. КЛЮЧ В ЗАМКЕ до погасания машинки на панели.


Более развернутая инструкция

A. Закрыть все двери автомобиля. Включить зажигание обучающим ключом и подождать во включенном состоянии не менее 6 секунд.

B. Выключить зажигание. Лампа должна начать быстро мигать ( 5 раз в секунду) всё время, пока правильно выполняется процедура обучения. Прекращение быстрого мигания лампы означает неправильное действие, выход за рамки временного интервала или неисправность. Вынуть обучающий ключ из замка зажигания.

C. Пока мигает лампа (около 6 секунд) необходимо, вставить рабочий ключ в замок и включить зажигание. Если всё сделано правильно, зуммер выдаст три звуковых сигнала при включении зажигания.

D. Ждать с включенным зажиганием (около 6 секунд) до выдачи зуммером ещё двух звуковых сигналов. Если через 6 секунд зуммер не выдал звуковых сигналов, а быстрое мигание лампочки прекратилось, то необходимо выключить зажигание и начать процедуру снова. Если ситуация повторяется, то это означает неисправность или то, что этот рабочий ключ уже был обучен с другим иммобилизатором.

E. Выключить зажигание.

F. Если необходимо обучить второй рабочий ключ, то следует ещё раз выполнить пункты С…Е, используя для включения зажигания второй обучаемый рабочий ключ. Если нет – продолжить выполнение с пункта G.

G. Пока мигает лампа (около 6 секунд) необходимо вынуть ключ из замка зажигания, вставить снова обучающий ключ в замок и включить зажигание. Если всё сделано правильно, зуммер выдаст три звуковых сигнала при включении зажигания.

H. Ждать с включенным зажиганием (около 6 секунд) до выдачи зуммером ещё двух звуковых сигналов.

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

J. Не позднее 6 секунд после звукового сигнала (пока быстро мигает лампа) необходимо включить зажигание этим же обучающим ключом. Подождав 2 – 3 секунды, выключить зажигание. Не позднее 5 секунд после выключения зажигания зуммер должен выдать три звуковых сигнала, а лампочка должна прекратить быстрое мигание. Не включать зажигание ещё минимум 10 секунд. При работе с некоторыми контроллерами прекращение мигания лампочки и выдача зуммером 3 звуковых сигналов происходит уже при включении зажигания. В этом случае всё равно следует выключить зажигание и подождать не менее 10 секунд.

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

Для проведения ресинхронизации необходимо

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

Источник

Читайте также:  corona renderer что это
Сказочный портал
Цвет провода Назначение
1 Зеленый
9 Желто/Черный K‑Line. Кл. 7 колодки диагностики, кл. 8 блока управления ЭУР.
10 Бело/Голубой