Исследование прошивок Mono-Motronic, делимся мыслями, советуем, работаем вместе

  • Автор темы Neuss
  • Дата начала
  • Ответы 205
  • Просмотры 110К
  • Теги
    mono-motronic
Neuss

Neuss

Гаражный маньяк
Сообщения
347
Реакции
45
Город
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion


Частью эксперимента по переходу с Mono-Motronic 1.2.1 на 1.2.3 была идея изучения прошивки ЭБУ и возможностей её настройки(адаптации). На данный момент ЭБУ успешно функционирует в моём авто, Заказан программатор, ожидаю посылки почтой. Прошивки же не дают покоя... Имея опыт реверсинга программ на ASM и ARM хочется разобраться и здесь. Много тем поднималось, мало какие сохранились. Здесь попытаюсь систематизировать всё имеющееся. Быть может вместе добьёмся успеха. Примером послужит Motronic OnLine, где все алгоритмы и карты уже раскрыты, но стоят очень дорого.

В моём распоряжении ЭБУ Mono-Motronic 1.2.3 номер VAG 8A0 907 311 H, Bosch 0 267 357 577. Процессор имеет маркировку Фольксваген Пассат Б58371. В каталогах Siemens было найдено соответствие SAB80C515A.


157248_02.jpg


Тщательный поиск всё же дал результат: есть даташит по процессору в ЭБУ SAB80C515A.pdf

В даташите встретилась ссылка на семейство процессоров, к которому и принадлежит сименс в ЭБУ Intel 8051 ( всё что находил ранее гласило о Intel 8080). В той же иструкции есть распиновка ножек, адреса портов и прочее.

прошивка моего ЭБУ была загружена в IDA, Processor type: Intel 51 series: 8051. После чего сразу же предлагается выбрать конкретный процессор из сейства. И в списке значится "C515A RAM=1152 ROM=0 EPROM=0 EEPROM=0" То, что нужно. Происходит автоанализ и полностью разобранная прошивка, без ошибок готова.

Все адреса и порты соответствуют описанным в даташите.

=======================================================
Здесь приложу программы, которые имеют отношение к делу:
ECM2001_v6.2 Редактор прошивок, с невыясненными функциями.

IDA_Pro_Advanced_v5.2 Дизассемблер, очень мощный инструмент.

1.2.3 Firmware Прошивки от Stranger21.
=======================================================

Отдельно поблагодарю: Stranger21, Voytik, Igel, Michael_Home за идеи и консультации.
 
Зато есть прошиваемый ЭБУ ;)
 
К модератору, перенесшему тему сюда: было бы очень приятно получить уведомление о переносе, а не искать свою тему по всему форуму (хорошо бы это в правила добавить, как у других).
Было 2 причины создания в общей теме:
- Один раз там, хоть и безуспешно, вопрос поднимался и не был перенесен.
- Популярность общего раздела гораздо выше = больше людей, имеющих опыт в программировании, будет привлечено.

Спасибо за внимание.
 
Neuss написал(а):
Частью эксперимента по переходу с Mono-Motronic 1.2.1 на 1.2.3 была идея изучения прошивки ЭБУ и возможностей её настройки(адаптации).

Neuss, я так понимаю, что это Вами сказано в отношении именно м1.2.3.
Если я не ошибаюсь и Вам не нужен больше м1.2.1, то готов у Вас его купить, поскольку мои достижения в области вскрытия алгоритмов м1.2.1 более чем скромные, в том числе по причине отсутствия оперативной возможности ползанья тестером по печатной плате (Э3 на м1.2.1 отсутствует).

*Инструментарий дизассемблирования использовал другой.
**Программная отладка моноджетроника возможна в Протеусе, включая аппаратное реал-тайм моделирование (в джетронике чистый 80с51 - ацп отдельный чип), программная только М1.2.1 и старше (включая SAB 80С517) - "Keil uVision3".

Процессор в м1.2.1 стоит именно Siemens SAB 80С535 (хотя, конечно, хрен редьки не слаще - нижняя строчка):



Озу вот такое - http://www.alldatasheet.com/datasheet-pdf/...S/SAE81C52.html
***Схему доступа к ОЗУ и ПЗУ потом поменяли, применив соответствующий контролер.

При этом, не было (ну я так и не увидел) прошивок для двигателя RP иных, нежли чем для моноджетроника и мономотроника 1.2.1.

М1.2.2 - с очень близким к м1.2.1 схемой и алгоритмами - уже для AAM... ;)
 
Neuss написал(а):
Процессор имеет маркировку Фольксваген Пассат Б58371. В каталогах Siemens было найдено соответствие SAB80C515A.

Не могли бы дать ссылочку на этот каталог?
Здесь https://vwts.ru/forum/index.php?s...t&p=2067809 такого номера не было, а по моим представлениям, в коротком 1.2.3 уже по-идее должен стоять проц. SAB 80С517 :unknw:
 
При этом, не было (ну я так и не увидел) прошивок для двигателя RP иных, нежли чем для моноджетроника и мономотроника 1.2.1.

Михаил, если для вас это представляет не праздный интерес, то я займусь выковыриванием прошивки для RP :LOL:
 
michael_home,
распаивая проводку, я сделал 2 "хвоста" для двух типов ЭБУ. Специально для того, чтобы не оставаться без машины во время экспериментов. 5 минут на замену и машина снова на ходу. Потому продавать пока не буду, извиняюсь.

А чем вы дизассемблировали прошивку? Какие есть ещё варианты? Что я упустил?

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

Сам каталог я скачал, смогу залить на обменник, но Только после 20, с работы. Сейчас с КПК сижу.

Прошивка на RP у меня есть с блока 1.2.1, если интересно, тоже выложу. Напишите номер Вашего ЭБУ.

 
Я предлагал RP для моноджетроника :LOL:
 
Не праздный, но и не архиважный. Тем более, что таблицы сами по себе, мне не интересны, а в джетронике отсутствует часть алгоритмов (УОЗ).
Сами алгоритмы - заложены в ассемблере в соответствии с рисунками (графиками) "библии", но вот подробности...
Как минимум хотелось бы все же довести ассемблер до полностью отвязанного от адресов текста с подробными комментариями...
Пока выполнена программа минимум - есть текст ассемблера, с некоторыми частично разобранными в отладчике (программном симуляторе) подпрограммами, обратное ассемблирование которого дает 100% исходную прошивку 1.2.1.
Но, если говорить о 1800 меток (и соответствующих им условным переходам) и напрочь отсутствующем соответствии входов АЦП входным контактам ЭБУ, то я нахожусь где-то в самом начале пути... не говоря даже о целевом расписывании констант и переменных...
 
ten70 написал(а):
Я предлагал RP для моноджетроника  :LOL:

Да, ten70, я помню, спасибо. :thankyou2:
Только она у Вас тюненная и в чем именно - неизвестно. Скорее всего именно в таблицах. Мне же джетроник интересен только как сравнение с м1.2.1 (движок тот же и соответственно таблицы те же и может быть по тем же векторам входа) и потому, что ее можно в моделирование загнать. Поэтому и если уж время тратить, то на оригинальную, а не тюненную.
 
Neuss написал(а):
А чем вы дизассемблировали прошивку?

Стареньким (DOS) тоже немецким дизассемблером ADIS51

Ассемблер - свободный (DOS Linux Win) ASEM-51 (из 80С51 - до 80С517 включительно)

P.S. Прошивка для 1.2.1 имеет единственный вариант исполнения - т.е. одинакова на всех М1.2.1 (во всяком случае отличающейся - не видел).
 
Тогда я вечером залью стандартную прошивку.

Есть ли мысли о методике прозвонки?

И ещё, где почитать про протеус? Как отлаживать прошивку в нём?
 
Neuss написал(а):
Есть ли мысли о методике прозвонки?

Ничего иного как на столе включить блок и дергая входы датчиков и питаний тестером определить, на какие номера разрядов порта № 6 проца они приходят - в голову не приходит.
Neuss написал(а):
И ещё, где почитать про протеус? Как отлаживать прошивку в нём?

Вот - http://kazus.ru/forums/showthread.php?t=13198
Только зачем он Вам? :unknw: Ни 1.2.1, ни 1.2.2 ни 1.2.3 Вы там смоделировать не сможете - нет там модели проц 80С535... защищено авторскими правами Infeon (Siemens)... :wall:
Написал же однозначно - в протеусе можно только джетроник - в нем 80С51... При этом нет такой модели ОЗУ и АЦП, но можно аналоги применить...
 
сколько слоев плата в 1.2.3 ? (я насчет того что прозванивать будет сложновато, если там 4 или выше слоев)
 
Cyber_RAT написал(а):
сколько слоев плата в 1.2.3 ?

Да они все - двуслойки.
Вот джетроник:

45962_10.jpg

https://vwts.ru/forum/index.php?s...st&p=524700

Вот М1.2.1:

41955_03.jpg

https://vwts.ru/forum/index.php?s...st&p=478667

Вот здесь
https://vwts.ru/forum/index.php?s...t&p=2139615 Игорь фото 1.2.2 и короткого 1.2.3 выкладывал:





Проблема в другом - на входе датчиков стоит собственная микруха Bosh - входной интерфейс, а на неё описаний, даже функциональных - нетути...
При этом прозвонить её входные и выходные ножки, функционально (соответствие вход - выход) большой заморочки не представляет. а уж прозвонить 8 выходов до вполне конкретных ножек порта проца - тем более..
 
Найти даташит на этот бошевский контроллер весьма сложно. Расшифровки его обозначения нигде нет.

Но есть мысль: у процессора 6 портов. Если в прошивке забить чтение с порта 1, например, или посылать туда нули, залить эту прошу в ЭБУ и считать ошибки, то, вероятно, мы получим ошибку отсутствия сиала от ДХ. Так, методом исключения и патча, можно выяснить распиновку процессора.
 
ДХ и так по идее заводится не на 6 порт (порт АЦП), а на № 1 - порт внешних прерываний (самый первый порт - № 0) :)

Когда попробуете реализовать свою методу прозвонки - может, созреете для продажи мне своего м1.2.1 ? :rolleyes:
 
Я как пример привёл ДХ, имея в виду любой из сигналов, получаемых процессором для обработки.

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

Разве на разборах нет ММ1.2.1?
 
Что-то притихла тема...

Опишу мысли: вторая половина кода содержит в себе участки кода такого вида:

Код:
П9~0И6~    *И6~аО7~
code:54D3; =============== S U B R O U T I N E =======================================
code:54D3
code:54D3
code:54D3 code_54D3:                             ; CODE XREF: TF0+1337p
code:54D3
code:54D3; FUNCTION CHUNK AT code:559A SIZE 000000F6 BYTES
code:54D3; FUNCTION CHUNK AT code:5698 SIZE 000000E6 BYTES
code:54D3; FUNCTION CHUNK AT code:579C SIZE 00000330 BYTES
code:54D3
code:54D3                 mov     R0, #0
code:54D5                 movx    A, @R0
code:54D6                 mov     B, A           ; B-Register
code:54D8                 jb      B2, code_54DC  ; B-Register
code:54DB                 ret
code:54DC; ---------------------------------------------------------------------------
code:54DC
code:54DC code_54DC:                             ; CODE XREF: code_54D3+5j
code:54DC                 mov     C, RI          ; Serial Channel Control Register
code:54DE                 mov     F0, C          ; Program Status Word Register
code:54E0                 mov     R0, #4
code:54E2                 mov     R1, #0x3E; '>'
code:54E4                 mov     R5, #8
code:54E6                 lcall   code_5B21
code:54E9                 mov     R0, #0x3F; '?'
code:54EB                 mov     R1, #0x43; 'C'
code:54ED                 mov     A, RAM_41
code:54EF                 jz      code_54F4
code:54F1                 ljmp    code_58C4
code:54F4; ---------------------------------------------------------------------------
code:54F4
code:54F4 code_54F4:                             ; CODE XREF: code_54D3+1Cj
code:54F4                 mov     A, RAM_42
code:54F6                 jnz     code_54FB
code:54F8                 ljmp    code_55EA
code:54FB; ---------------------------------------------------------------------------
code:54FB
code:54FB code_54FB:                             ; CODE XREF: code_54D3+23j
code:54FB                 cjne    A, #1, code_5501
code:54FE                 ljmp    code_559A
code:5501; ---------------------------------------------------------------------------
code:5501
code:5501 code_5501:                             ; CODE XREF: code_54D3:code_54FBj
code:5501                 cjne    A, #2, code_5507
code:5504                 ljmp    code_55FE
code:5507; ---------------------------------------------------------------------------
code:5507
code:5507 code_5507:                             ; CODE XREF: code_54D3:code_5501j
code:5507                 cjne    A, #3, code_550D
code:550A                 ljmp    code_5698
code:550D; ---------------------------------------------------------------------------
code:550D
code:550D code_550D:                             ; CODE XREF: code_54D3:code_5507j
code:550D                 cjne    A, #4, code_5513
code:5510                 ljmp    code_56A2
code:5513; ---------------------------------------------------------------------------
code:5513
code:5513 code_5513:                             ; CODE XREF: code_54D3:code_550Dj
code:5513                 cjne    A, #5, code_5519
code:5516                 ljmp    code_56FB
code:5519; ---------------------------------------------------------------------------
code:5519
code:5519 code_5519:                             ; CODE XREF: code_54D3:code_5513j
code:5519                 cjne    A, #6, code_551F
code:551C                 ljmp    code_5880
code:551F; ---------------------------------------------------------------------------
code:551F
code:551F code_551F:                             ; CODE XREF: code_54D3:code_5519j
code:551F                 cjne    A, #7, code_5525
code:5522                 ljmp    code_56B1
code:5525; ---------------------------------------------------------------------------
code:5525
code:5525 code_5525:                             ; CODE XREF: code_54D3:code_551Fj
code:5525                 cjne    A, #9, code_553A
code:5528                 mov     A, RAM_3F
code:552A                 jz      code_5531
code:552C                 dec     RAM_3F
code:552E                 ljmp    code_555E
code:5531; ---------------------------------------------------------------------------
code:5531
code:5531 code_5531:                             ; CODE XREF: code_54D3+57j
code:5531                 mov     R0, #0x8A; 'К'
code:5533                 mov     A, @R0
code:5534                 setb    ACC5           ; Accumulator
code:5536                 mov     @R0, A
code:5537                 ljmp    code_56BF
code:553A; ---------------------------------------------------------------------------
code:553A
code:553A code_553A:                             ; CODE XREF: code_54D3:code_5525j
code:553A                 cjne    A, #0xA, code_5540
code:553D                 ljmp    code_5739
code:5540; ---------------------------------------------------------------------------
code:5540
code:5540 code_5540:                             ; CODE XREF: code_54D3:code_553Aj
code:5540                 cjne    A, #0xB, code_5546
code:5543                 ljmp    code_57E8
code:5546; ---------------------------------------------------------------------------
code:5546
code:5546 code_5546:                             ; CODE XREF: code_54D3:code_5540j
code:5546                 cjne    A, #0xC, code_554C
code:5549                 ljmp    code_5820
code:554C; ---------------------------------------------------------------------------
code:554C
code:554C code_554C:                             ; CODE XREF: code_54D3:code_5546j
code:554C                 cjne    A, #0xD, code_5552
code:554F                 ljmp    code_579F
code:5552; ---------------------------------------------------------------------------
code:5552
code:5552 code_5552:                             ; CODE XREF: code_54D3:code_554Cj
code:5552                 ljmp    code_585B
code:5555; ---------------------------------------------------------------------------
code:5555
code:5555 code_5555:                             ; CODE XREF: code_54D3+16Ej
code:5555                                        ; code_54D3+1BAj ...
code:5555                 inc     R1
code:5556                 mov     A, #3
code:5558                 movx    @R1, A
code:5559                 inc     RAM_41
code:555B                 mov     RAM_44, #0x13
code:555E
code:555E code_555E:                             ; CODE XREF: code_54D3+5Bj
code:555E                                        ; code_54D3:code_55CAj ...
code:555E                 mov     R1, #0x3E; '>'
code:5560                 mov     R0, #4
code:5562                 mov     R5, #8
code:5564                 lcall   code_5B1A
code:5567                 mov     A, B           ; B-Register
code:5569                 mov     R0, #0
code:556B                 movx    @R0, A
code:556C                 jnb     F0, code_557C  ; Program Status Word Register
code:556F                 mov     A, #0x64; 'd'
code:5571
code:5571 code_5571:                             ; CODE XREF: code_54D3+9Fj
code:5571                 dec     A
code:5572                 jnz     code_5571
code:5574                 mov     SCON, #0x60; '`'; Serial Channel Control Register
code:5577                 mov     SBUF, RAM_45   ; Serial Channel Buffer Register
code:557A                 setb    ES             ; Interrupt Enable Register 0
code:557C
code:557C code_557C:                             ; CODE XREF: code_54D3+99j
code:557C                 ret
code:557C; End of function code_54D3

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

 
Всё оказалось гораздо проще, чем я ожидал :drive:

Код:
code:6FD0 FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
code:6FE0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
code:6FF0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
code:7000  80 80 80 80 81 83 87 8F  99 FF FF FF FF FF FF FF  ААААБГЗПЩ       
code:7010  FF FF 26 66 9A C0 DA ED  F6 FB FF 12 60 9A C0 DA    &fЪL-эЎv `ЪL-
code:7020  ED F6 FB FF 26 66 9A C0  DA ED F6 FB FF 00 72 A4  эЎv &fЪL-эЎv .rд
code:7030  C3 D7 E5 F1 FA FF 1A 80  CD E6 EF F6 FA FD FF 26  ++хё· А=цяЎ·¤ &
code:7040  80 AA C4 D7 E5 F1 FA FF  0D 3D 6C 9E CF EB F8 FF  Ак-+хё· 
=lЮ¦ы° 
code:7050  FF 1A 36 52 6E 8A A0 C4  E1 FF 90 90 90 90 9C A8   6RnКа-с РРРРЬи
code:7060  B4 C0 C0 FF FF FF FF FF  DA B8 9A 80 FF FF FF FF  +LL     -¬ЪА    
code:7070  FF FF FF FF FF 00 7F C0  FF FF FF FF FF FF 00 7F       .L      .
code:7080  AE C8 DC F3 FF FF FF 9C  95 80 80 80 80 80 80 80  оL-є   ЬХААААААА
code:7090  33 43 48 4D 4D 4D 4D 4D  4D FF FF FF FF FF FF FF  3CHMMMMMM       
code:70A0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
code:70B0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
code:70C0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF                  
         

Долго я вглядывался в подобные блоки, пытаясь осознать смысл. Выяснилось что это строки, длиной 16 байт, цифры в них идут по-возрастающей. Вот что получилось при осмотре в виде трехмерного графика:


adaptation.JPG


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