Неисправность модуля памяти eeprom эбу ошибка последней записи в eeprom

Обновлено: 03.07.2024

Код P0603 — Ошибка оперативной памяти контроллера.

Что означает ошибка P0603?

P0603 срабатывает, когда есть внутренняя неисправность в модуле памяти Keep Alive Memory (KAM) или неисправно питание / заземление блока управления.

Блок управления двигателем или ЭБУ по-английски называется Engine Control Unit (ECM) / Powertrain Control Unit (PCM).

Когда вы едете на автомобиле, блок управления двигателем получает информацию от большого количества датчиков. ЭБУ чувствует, как вы ведёте свой автомобиль, и оптимизирует состав и время впрыска.

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

Ошибка P0603 — это общий код неисправности, который применяется ко всем производителям и моделям автомобилей с 1996 года.

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

Каждый раз, когда вы заводите автомобиль, блок управления двигателем пытается прочитать память из КАМ. Если он не может прочитать память несколько раз / попыток, он вызовет код неисправности P0603. Если есть ошибка P0603, двигатель будет работать в режиме по умолчанию и не будет оптимизировать / учиться в процессе вождения.

Таблица устранения ошибки

КодОписаниеПричины Устранение
P0603Ошибка внутренней памяти контроллераНизкое напряжение аккумулятора.

Слабые клеммы аккумулятора.
Неисправность памяти ЭБУ.

Вода в ЭБУ (PCM/ECM).

Повреждение питающего провода ЭБУ.

Повреждение "земли" ЭБУ.

Ошибка программного обеспечения ЭБУ.

Проверьте и восстановите клеммы аккумулятора.

Проверьте все предохранители.

Проверьте заземление между аккумулятором и корпусом.

Проверьте напряжение зарядки с помощью цифрового мультиметра.

Проверьте питающий провод ЭБУ.

Проверьте заземляющий провод ЭБУ.

Проверьте отсутствие воды, коррозии в ЭБУ и его разъёмах.

Замените блок управления, если он неисправен.

Другие связанные коды неисправностей

  • P0601 — Ошибка контрольной суммы памяти контроллера.
  • P0602 — Ошибка программирования блока управления.
  • P0604 — Ошибка RAM памяти контроллера.
  • P0605 — Ошибка ROM памяти контроллера.

Симптомы P0603

Симптомы ошибки P0603 — это, как правило, только загорание лампочки Check Engine, и ваш автомобиль может не запуститься. Машина может не иметь никаких симптомов, если неисправность носит прерывистый характер. Вы также можете получить несколько других симптомов.

  • Двигатель может не запуститься / трудный пуск.
  • Лампочка Check Engine или Service Engine Soon.
  • Включение других аварийных лампочек. .
  • Неустойчивое ускорение.
  • Неустойчивый холостой ход.
  • Рывки при переключении передач (АКПП).

Причины P0603

Наиболее распространенная причина этого кода неисправности — проникновение воды, которая повреждает блок управления. Также может быть короткое замыкание в проводке ЭБУ, которое повреждает внутренние части контроллера.

Вы должны всегда проверять / измерять все соединения перед тем, как менять блок управления двигателем, так как, если короткое замыкание всё ещё осталось, вы можете также повредить свой новый ECM / PCM.

  • Низкое напряжение аккумулятора.
  • Плохое соединение в клеммах батареи.
  • Ошибка модуля памяти Keep Alive Memory (KAM) в ECM / PCM.
  • Попадание воды в ECM / PCM.
  • Неисправный провод питания ECM / PCM.
  • Неисправный провод заземления ECM / PCM
  • Ошибка программного обеспечения ECM / PCM.
  • Проблемы с зарядкой (генератор, выпрямитель, проводка).

Устранение P0603

  • Зарядите автомобильный аккумулятор и сотрите ошибки.
  • Проверьте обе клеммы аккумулятора, почистите, восстановите контакт.
  • Проверьте все предохранители.
  • Проверьте провод между аккумулятором и корпусом.
  • Проверьте напряжение зарядки с помощью цифрового мультиметра (должно быть более 14 Вольт на холостом ходу).
  • Проверьте «+» ECM / PCM.
  • Проверьте «−» на ECM / PCM.
  • Проверьте отсутствие воды / коррозии внутри ECM / PCM.
  • Проверьте коррозию в разъёме блока управления.
  • Замените ECM / PCM, если он неисправен.

Как диагностировать код P0603

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

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

  1. Визуально осмотрите клеммы аккумулятора и проверьте, не ослаблены ли они. Проверьте провод между аккумулятором и корпусом. Очистите контакты, если вы видите коррозию или плохое соединение. Проверьте точки заземления и очистите разъём контроллера.
  2. Подключите автомобильное зарядное устройство к аккумулятору и убедитесь, что оно заряжает аккумулятор. Дайте зарядиться некоторое время.
  3. Подключите сканер OBD2 и считайте код P0603. Сотрите код и перезапустите зажигание. Проверьте, возвращается ли код ошибки. Прокатитесь несколько раз, чтобы проверить, проблема исчезла или P0603 продолжает возвращаться. Если проблема все еще возникает, продолжайте устранение неисправности.
  4. Измерьте напряжение между клеммами аккумулятора на холостом ходу (> 14 Вольт) и при выключенном двигателе (> 12 Вольт) с помощью цифрового мультиметра. Замените все поврежденные предохранители.
  5. Отсоедините разъем блока управления ECM / PCM и найдите схему распиновки его разъём. Измерьте 12 вольт на всех проводах питания и убедитесь, что контакты заземления в норме. Проверьте отсутствие коротких замыканий.
  6. Откройте блок управления и проверьте на наличие видимых повреждений / попадания воды.

Если все провода питания, заземления, напряжение аккумулятора / генератора в порядке и вы не можете обнаружить какие-либо короткие замыкания, это может быть внутренняя неисправность в блоке управления двигателем. Вы можете либо отдать его в ремонт, либо заменить.

эбу киа рио

В более новых автомобилях в ЭБУ обычно встроен иммобилайзер, и вы не можете заменить его без программирования. Некоторые блоки управления могут быть запрограммированы только один раз. Если вы покупаете б/у блок управления, вы не можете запрограммировать его дважды. Тем не менее, в некоторых сервисах есть инструменты для их перепрошивки, но это требует дополнительной работы. Покупка нового блока управления двигателем — это всегда самый простой выбор. Старые параметры всегда следует считывать со старого блока управления перед установкой нового.

в нашей группе вконтакте

ДИАГНОСТИРУЙТЕ ВАШЕ АВТО САМИ!

Коды ошибок ГАЗ ГАЗ 065 Неисправность при записи во флэш-ОЗУ блока управления (EEPROM)

Отключение массы блока от двигателя.
1.Вероятно, провод массы блока управления был отключен от аккумулятора или от массы двигателя. Каждое принудительное отключение массового провода от аккумулятора через выключатель массы может приводить к записи в блок кода неисправности "065". После 10 минут непрерывной работы системы указанный код автоматически сбрасывается блоком.
2.Если принудительное выключение массы не производилось, то Вероятно, имело место кратковременная потеря контакта проводов массы блока "19" и "61" с металлической массой двигателя или кузова. Проверьте надежность крепления наконечников проводов массы к двигателю и кузову, а также их целостность.
3.После устранения неисправности включите зажигание, сбросьте коды неисправностей, запустите двигатель и проконтролируйте отсутствие кода неисправности "065".

Отключение блока от клеммы "30" бортсети.
1.Вероятно, провод электропитания блока управления был отключен от клеммы "Плюс" аккумулятора. Каждое принудительное отключение силового провода от аккумулятора может приводить к записи в блок кода неисправности "065". После 10 минут непрерывной работы системы указанный код автоматически сбрасывается блоком.
2.Если принудительное выключение бортсети не производилось, то вероятно имела место кратковременная потеря контакта в цепи электропитания блока: "58"-"18а"-"37б"-"37".
3.Проверьте надежность контактов и качество заделки проводов:
- в колодке предохранителя "25А";
- в колодке главного реле;
- в колодке блока управления.
4.После устранения неисправности включите зажигание, сбросьте коды неисправностей, запустите двигатель и проконтролируйте отсутствие кода неисправности "065".

Нарушение электрических контактов в жгутовом соединителе блока.
1.Для проверки неисправности цепи жгута отсоедините блок от жгута проводов.
2.Внимательно осмотрите целостность контактов розетки жгута и вилки. Утопленные контакты необходимо переустановить, а помятые контакты отрихтовать или заменить.
3.После устранения неисправности включите зажигание, сбросьте коды неисправностей, запустите двигатель и проконтролируйте отсутствие кода неисправности "065".

Неисправность блока управления двигателем.
Вероятно, неисправна аппаратная часть (флэш-ОЗУ) блока управления двигателем.
1.После замены тестируемого блока на контрольный включите зажигание, запустите двига-тель и проконтролируйте отсутствие кода неисправности "065".
2.Если код "065" не регистрируется на контрольном блоке, то замените тестируемый блок исправным.

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

Одна из старых проблем AVR - это повреждение EEPROM данных при пониженном питании микроконтроллера. Это может происходить в двух случаях:

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

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

- Нужно удерживать микроконтроллер AVR в состоянии сброса, если напряжение питания находится ниже нормы. Для этого можно использовать внешние супервизоры питания или встроенный детектор пониженного питания - Brown-out Detector (BOD). Встроенный детектор управляется с помощью fuse битов микроконтроллера - BODEN и BODLEVEL. BODEN - разрешает/запрещает работу детектора, а BODLEVEL - определяет его уровень срабатывания.
Если сброс микроконтроллера происходит во время процесса записи в EEPROM, то операция записи будет завершена только при достаточном уровне напряжения.

- Также в многие разработчике рекомендуют не использовать 0-ую ячейку EEPROM`a, поскольку именно ее содержимое чаще всего повреждается при снижении питания микроконтроллера.

Операция записи в EEPROM состоит из нескольких шагов. Вспомним эту последовательность:

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

Бит EEWE должен быть установлен в течении 4-ех тактов после установки бита EEMWE. Если этого не произойдет по причине прерываний, то запись в EEPROM не будет произведена. Этого легко избежать, если запретить прерывания перед 4-м шагом, а после 5-го снова разрешить их.

Однако есть еще один подводный камень. Если прерывание возникло после 1-го, 2-го или 3-го шага, и в прерывании тоже используются операции с EEPROM (чтение или запись), то запись может не состояться, или запишутся не те данные и не туда, потому что содержимое регистров EEAR (адрес) и EEDR (данные) будет изменено.

Описанное выше касается и процедуры чтения EEPROM.

Лечить это можно следующими способами:

- Не использовать операции чтения и записи EEPROM в прерываниях.
Это особенно касается операции записи, потому что она медленная и выполняется с использованием внутреннего RC генератора. Например, для mega16 в даташите указано, что при записи в EEPROM используется внутренний RC генератор с частотой 1 МГц (независимо от установок fuse битов CKSEL) и время записи составляет 8.5 мс. Для прерывания это очень долго.

- Запрещать прерывания на время всей процедуры записи (чтения) EEPROM, то есть в самом начале.

- Сохранять в начале обработчика прерывания содержимое регистров EEAR (адрес) и EEDR (данные), а перед выходом восстанавливать их.

- Использовать флаги (семафоры) для сигнализации о выполнении работы с EEPROM.
Перед выполнением записи в основном цикле программы (или задаче, если используется ос) устанавливать программный флаг, а в прерывании (или другой задаче) проверять его.

EEPROM имеет ограниченный ресурс. Atmel гарантирует, что количество циклов перезаписи EEPROM составляет не меньше 100000. Цифра довольно большая, однако и она может быть достигнута, если записывать в EEPROM часто и на протяжении долгого времени.
Есть два приема по "увеличению" ресурса EEPROM.
Первый - простой и состоит в том, чтобы записывать в EEPROM данные, только если они изменили свое значение.

Второй- хитрый и состоит в том, чтобы хранить данные не в одной ячейки памяти (или группе ячеек, если речь идет о многобайтных переменных), а в нескольких, и записывать в них по очереди.
Допустим, нам нужно хранить в EEPROM один байт. Выделяем под него 8 байтов и каждый раз записываем в следующую ячейку, когда доходим до последней ячейки, то записываем в первую. И так по кругу, как в кольцевом буфере. Если каждая ячейка EEPROM имеет ресурс 100000, то записывая в 8 ячеек по очереди, мы получаем ресурс перезаписи байта 800000.

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

Если используются свои функции для работы с EEPROM, то могут возникнуть проблемы при высоких уровнях оптимизации компилятора. Компилятор может объединить одинаковые (с его точки зрения) части кода в одну подпрограмму и нарушить логику работы вашей функции. Чтобы этого не происходило нужно или запрещать оптимизацию данной функции, или отключать перекрестную оптимизацию (cross call optimization) для функции или файла. Как это делается зависит от компилятора. Как правило, для этого существуют определенные ключи и прагмы.

Один из простых способов повышения надежности хранения данных в EEPROM - это метод мажоритарного резервирования. Суть метода заключается в том, что для хранения данных выделяется нечетное количество ячеек памяти - N. При сохранении данных - запись производится во все выделенные ячейки. При чтении - читаются тоже все, но решение относительно содержимого принимается на основе равенства (N+1)/2 ячеек.

Рассмотрим пример тройного мажоритарного резервирования байта данных. Для сохранения байта используются три байта EEPROM, а решение о содержимом принимается на основании равенства 2 байтов. Код приведен для компилятора IAR AVR.

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

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


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

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

  • ATmega328 (Arduino UNO, Nano, Pro Mini): 1 кБ
  • ATmega2560 (Arduino Mega): 4 кБ
  • ATtiny85 (Digispark): 512 Б

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

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

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

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

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

Запись:

Обновление:

Макросы:

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

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

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

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

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

Логика работы с адресами такая же, как в предыдущем пункте урока! Обратите внимание на работу с EEPROM как с массивом, можно читать, писать, сравнивать, и даже использовать составные операторы, например EEPROM[0] += 10 , но это работает только для элементарных ячеек, байтов. Теперь посмотрим, как работает put/get:

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

EEPROM.h + avr/eeprom.h

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

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

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

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

  • Подключить библиотеку EEPROM.h
  • При запуске: чтение яркости из EEPROM и включение светодиода
  • При клике: запись актуального значения в EEPROM

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

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

  1. Чтение из EEPROM в переменную
  2. Использование переменной по назначению

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

Теперь при первом запуске мы получим инициализацию нужных ячеек. Если нужно переинициализировать EEPROM, например в случае добавления новых данных, достаточно изменить наш ключ на любое другое значение в пределах одного байта (0-254). Я пишу именно до 254, потому что 255 является значением ячейки по умолчанию и наш трюк не сработает.

Скорость

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

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

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

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

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

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

    Ёмкий конденсатор по питанию микроконтроллера, позволяющий сохранить работу МК после отключения питания на время, достаточное для записи в EEPROM (

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

Видео

Читайте также: