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

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
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.




Тщательный поиск всё же дал результат: есть даташит по процессору в ЭБУ 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 за идеи и консультации.
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Зато есть прошиваемый ЭБУ ;)
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
К модератору, перенесшему тему сюда: было бы очень приятно получить уведомление о переносе, а не искать свою тему по всему форуму (хорошо бы это в правила добавить, как у других).
Было 2 причины создания в общей теме:
- Один раз там, хоть и безуспешно, вопрос поднимался и не был перенесен.
- Популярность общего раздела гораздо выше = больше людей, имеющих опыт в программировании, будет привлечено.

Спасибо за внимание.
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
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... ;)
 
  • Спасибо!
Реакции: 2 человек

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
Neuss написал(а):
Процессор имеет маркировку Фольксваген Пассат Б58371. В каталогах Siemens было найдено соответствие SAB80C515A.
Не могли бы дать ссылочку на этот каталог?
Здесь https://vwts.ru/forum/index.php?s...t&p=2067809 такого номера не было, а по моим представлениям, в коротком 1.2.3 уже по-идее должен стоять проц. SAB 80С517 :unknw:
 

Igel

Оракул
Сообщения
3 626
Реакции
265
Адрес
Минск
Авто
Renault Kapture 2.0 4WD АT 2019
При этом, не было (ну я так и не увидел) прошивок для двигателя RP иных, нежли чем для моноджетроника и мономотроника 1.2.1.
Михаил, если для вас это представляет не праздный интерес, то я займусь выковыриванием прошивки для RP :LOL:
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
michael_home,
распаивая проводку, я сделал 2 "хвоста" для двух типов ЭБУ. Специально для того, чтобы не оставаться без машины во время экспериментов. 5 минут на замену и машина снова на ходу. Потому продавать пока не буду, извиняюсь.

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

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

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

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

 

ten70

Оракул
Сообщения
16 202
Реакции
2 986
Авто
AD1 R-Line TDI
Я предлагал RP для моноджетроника :LOL:
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
Не праздный, но и не архиважный. Тем более, что таблицы сами по себе, мне не интересны, а в джетронике отсутствует часть алгоритмов (УОЗ).
Сами алгоритмы - заложены в ассемблере в соответствии с рисунками (графиками) "библии", но вот подробности...
Как минимум хотелось бы все же довести ассемблер до полностью отвязанного от адресов текста с подробными комментариями...
Пока выполнена программа минимум - есть текст ассемблера, с некоторыми частично разобранными в отладчике (программном симуляторе) подпрограммами, обратное ассемблирование которого дает 100% исходную прошивку 1.2.1.
Но, если говорить о 1800 меток (и соответствующих им условным переходам) и напрочь отсутствующем соответствии входов АЦП входным контактам ЭБУ, то я нахожусь где-то в самом начале пути... не говоря даже о целевом расписывании констант и переменных...
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
ten70 написал(а):
Я предлагал RP для моноджетроника  :LOL:
Да, ten70, я помню, спасибо. :thankyou2:
Только она у Вас тюненная и в чем именно - неизвестно. Скорее всего именно в таблицах. Мне же джетроник интересен только как сравнение с м1.2.1 (движок тот же и соответственно таблицы те же и может быть по тем же векторам входа) и потому, что ее можно в моделирование загнать. Поэтому и если уж время тратить, то на оригинальную, а не тюненную.
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
Neuss написал(а):
А чем вы дизассемблировали прошивку?
Стареньким (DOS) тоже немецким дизассемблером ADIS51

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

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

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Тогда я вечером залью стандартную прошивку.

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

И ещё, где почитать про протеус? Как отлаживать прошивку в нём?
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
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... При этом нет такой модели ОЗУ и АЦП, но можно аналоги применить...
 

Cyber_RAT

кодю сканеры
Сообщения
1 525
Реакции
268
Адрес
Беларусь, г.Могилев
Авто
VW Polo Sedan 1.6 2015г.
сколько слоев плата в 1.2.3 ? (я насчет того что прозванивать будет сложновато, если там 4 или выше слоев)
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
Cyber_RAT написал(а):
сколько слоев плата в 1.2.3 ?
Да они все - двуслойки.
Вот джетроник:


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

Вот М1.2.1:


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 выходов до вполне конкретных ножек порта проца - тем более..
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Найти даташит на этот бошевский контроллер весьма сложно. Расшифровки его обозначения нигде нет.

Но есть мысль: у процессора 6 портов. Если в прошивке забить чтение с порта 1, например, или посылать туда нули, залить эту прошу в ЭБУ и считать ошибки, то, вероятно, мы получим ошибку отсутствия сиала от ДХ. Так, методом исключения и патча, можно выяснить распиновку процессора.
 

michael_home

Робот не может причинить вреда человеку, если (c)
Команда форума
Сообщения
8 655
Реакции
1 424
Адрес
Москва
Авто
M214122 96г, VW passat variant b3 1,8 RP Mono-Motronic 91г., МКПП, кончается газ - тогда бензин
ДХ и так по идее заводится не на 6 порт (порт АЦП), а на № 1 - порт внешних прерываний (самый первый порт - № 0) :)

Когда попробуете реализовать свою методу прозвонки - может, созреете для продажи мне своего м1.2.1 ? :rolleyes:
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Я как пример привёл ДХ, имея в виду любой из сигналов, получаемых процессором для обработки.

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

Разве на разборах нет ММ1.2.1?
 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Что-то притихла тема...

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

Код:
П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
т.е. есть много вариантов выбора. методом проб, будем определять за что отвечают подобные участки кода. Потому нам нужны тестировщики. Набираем добровольцев.

 

Neuss

Гаражный маньяк
Сообщения
348
Реакции
42
Адрес
Химки, МО
Авто
VW Corrado 2.0 20V Turbo 4motion
Всё оказалось гораздо проще, чем я ожидал :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 байт, цифры в них идут по-возрастающей. Вот что получилось при осмотре в виде трехмерного графика:




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