Здравствуйте! Наша команда занимается ремонтом и исследованием автомобильной электроники (и не только) более десяти лет. Мы изучаем устройство стороннего ПО, и разрабатываем утилиты для взаимодействия с прошивками и программами. Нередко мы сталкиваемся с интересными задачами. На страницах этого блога мы планируем делиться интересными исследованиями и историями ремонта. Мы надеемся, что наш опыт может быть полезным другим профессионалам в этой области. Сегодня мы хотим поделиться случаем ремонта блока SRS от Volkswagen Crafter, который помог нам углубиться в детали и выявить важные моменты.

 ЭБУ SRS, номер 5QF 959 655 AH. Для того, чтобы убедиться в необходимости ремонта блока управления, в нашей компании тестируемое оборудование запускается сначала на столе.

https://xn--80aackhmik6acgcci5acrf9g.xn--p1ai/wp-content/uploads/2024/09/shema-300x87.png
схема подключения

 Блок управления диагностировался по CAN шине платформой CantracerFD посредством интерфейса Tactrix OpenPort 2.0. Также  его можно было считать другими инструментами для диагностики автомобилей VAG. В блоке, как мы видим, записана актуальная внутренняя ошибка B2000.  В автомобилях группы компаний VAG такие ошибки нестираемые и удаляются только посредством модификации дампов ЭБУ SRS.

https://xn--80aackhmik6acgcci5acrf9g.xn--p1ai/wp-content/uploads/2024/09/b2000-300x268.png
ошибка B2000

В ремонтируемом блоке управления стоит процессор Infineon Tricore TC233-32 серии. Ранее нам встречались похожие блоки, но там был процессор TC222-16 серии. Дампы очень похожи, но имеют немного больший размер. Поэтому первое, что было сделано, это анализ и сравнение дампов с аналогами донорских ЭБУ. Номера доноров:

5QF959655L (TC22xx-16)

5QF959655A

5QF959655AA

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

3A F5 AF AF F5 F5 AF AF

  Изначально мы обратились за помощью на форумы, где нам предложили полностью стереть третью секцию. Очистка третей секции никаких изменений в блоке управления не вызвала. Таким образом, было определено, что внутренняя ошибка находится во второй секции и править нужно её. Изменения во второй секции вызвали появление множества внутренних ошибок в ЭБУ, свидетельствующих о нарушении целостности дампа.  Следующим этапом мы провели более глубокий анализ дампа. Просматривались сигнатуры блоков данных, фрагменты, из которых состоит дамп, где они начинаются и где они заканчиваются, где определяется тип блока, где определяется размер блока, где определяются флаги блока, где контрольная сумма и так далее. Разобрать такой большой дамп вручную -  трудоёмкая задача. Мы приняли решение автоматизировать процесс, для этого был написан скрипт на языке Python. До написания скрипта мы обнаружили алгоритм контрольной суммы, она определяется в формате:

CRC-16/CCITT-FALSE

  Затем дампы обработали калькулятором. Проверили как оригинальный дамп, в котором есть внутренняя ошибка, так и донорские дампы, в которых её нет. В процессе обнаружилось, что контрольная сумма не совпадает по трём блокам. Мы не стали их править, потому что эти же блоки, на донорских дампах имеют такие же проблемы. Далее произвели анализ посредством сравнения блоков, из которых удалено всё лишнее, и есть только данные. Для этого скрипт был модифицирован таким образом, чтобы сортировать блоки данных по типам. Было произведено сравнение однотипных блоков. Далее на скриншоте сравнения текстовых отчётов скрипта, который определяет типы блоков. Видно, что блок типа 0х400  размером 0x468, а у донорского блока размер 0x5F0, он находится слева.

https://xn--80aackhmik6acgcci5acrf9g.xn--p1ai/wp-content/uploads/2024/09/sravnenie-300x135.png
сравнение блоков типа 0x400 и 0x300

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

https://xn--80aackhmik6acgcci5acrf9g.xn--p1ai/wp-content/uploads/2024/09/A00h-300x111.png
сравнение блоков типа 0хА00

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

https://habrastorage.org/getpro/habr/upload_files/d1f/a8a/2f6/d1fa8a2f6cda40b99c8f89e16b6eb853.jpg
блок данных 0хА00

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

Комментарии (10)


  1. dec123
    04.11.2024 05:51

    а после чего возникла ошибка B2000 ?
    FAZIT в блоке есть?


    1. ecurep Автор
      04.11.2024 05:51

      В блоках подушек безопасности ошибка B2000 возникает в ряде случаев:
      1. после превышения некоторого количества записанных в блоке событий;
      2. после "сбоя" при обновлении или выполнения других диагностических функций;
      3. при сбоях в питании;
      4. при сбоях в периферии блока;
      5. при выходе из строя электронных компонентов блока;
      6. нарушение целостности прошивки.

      Конкретно здесь, скорее всего, имели место проблемы с проводкой автомобиля.

      FAZIT не понимаю при чём здесь. Мы не работаем посредством диагностических инструментов, мы работаем непосредственно со встроенными в блок ПЗУ. В современных автомобилях группы VAG есть "Защита компонентов", она включится, если будет использован донорский дамп или ЭБУ с другого автомобиля. Но это - тема отдельной статьи и рассказывать здесь об этом не планировалось.


      1. dec123
        04.11.2024 05:51

        счетчик ударов тоже потерли или Вы стерли только краш и B2000?
        D-Flash из MCU читали/писали по CAN или через UART или JTAG?


        1. ecurep Автор
          04.11.2024 05:51

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


          1. dec123
            04.11.2024 05:51

            Оригинальный VIN автомобиля в блоке сохранился после замены D-Flash? Обновление прошивки блока через ODIS пробовали делать?


            1. ecurep Автор
              04.11.2024 05:51

              Разумеется сохранился. Обновление не делали.


  1. ykira
    04.11.2024 05:51

    Предлагаю дополнить статью фрагментами кода на Python


    1. ecurep Автор
      04.11.2024 05:51

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


  1. shadrap
    04.11.2024 05:51

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


    1. ecurep Автор
      04.11.2024 05:51

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