Реверс инжиниринг приборной панели Nissan Murano Z50 +31


AliExpress RU&CIS

Имеем Nissan Murano 2005 года выпуска. Американец. Ни блютуза ни, уж тем более, цифровой приборной панели, а хочется. Если с блютузом проблема решается прикручиванием устройств подобных этому:


…то оцифровать приборную панель уже будет посложнее. Однако, глаза боятся, а руки делают.

Для экспериментов я приобрел приборку от европейца, но принципиально она ничем от американца не отличается, кроме как расположением кнопок одометра и стоп-сигнала, и настройками тока для стрелочки спидометра (а еще она не такая жирная и не пытается найти у меня нефть). Дело в том, что у европейца и американца отличается максимальная скорость на спидометре, соответственно при 240км/ч на американце, европеец покажет приблизительно 210. Таким образом, графическая накладка не взаимозаменяемая:


Далее, согласно документации на приборную панель (файл Приборка.pdf, все архивы оставлю в конце) подключаем питание к приборке.  Контакты 22, 23, 24 черные провода, на схеме обозначены буквой «B» подключаем к минусу (один или все вместе неважно), и контакты 21«Y/R» — желтый с красной полосой и 20«O» — оранжевый (оба сразу) к + 12 вольтам. Контакт 15«R/W» красный с белой полосой это освещение приборки, то же 12 вольт, но подключать не обязательно. Важное замечание: фактический номер контакта может отличатся от указанного в схеме, ибо инженеры нисан – японцы на всю голову и именуют номер контакта по японскому! То есть на плате три штекера — один основной для подключения к тачке и два для подключения кнопок стоп-сигнала и сброса одометра. Так вот вместо того, чтобы обозначить в каждом штекере контакты от 1 и до максимального, они объединили номера всех трех штекеров в одну группу, таким образом первый по номеру контакт находится на первом штекере, а последний на третьем. Короче ориентируйтесь по цветам и моим картинкам. Вот фото задней части:


Вот схема из файла Приборка.pdf (страница 10) с номерами контактов и куда чего идет:


А теперь опишу как работает панель согласно документации Приборка.pdf.

  • Лампа ремня безопасности контакт 3
  • Лампа омывайки — контакт 6
  • Лампа аккумулятора контакт 4
  • Лампа сигнализации контакт 5
  • Работа спидометра:

Контакт 14 «V/W» Фиолетовый с белой полосой. Приборная панель выдает на него +5 вольт. Сигнал с датчика скорости замыкает контакт на землю формируя на нем логическую единицу. На один оборот колеса приходится 8 импульсов на землю.

И тут начинается самое вкусное. Все остальные данные которые выводит приборная панель, приходят по шине UART, а именно: тахометр, уровень топлива, температура охлаждайки, ошибка двигателя, CVT, ABS, низкое давление в шинах, AWD, AWD Lock, сигнал поворота, дальний свет, VDC OFF, SLIP, индикаторы круиз-контроля — CRUISE и SET, CVT, индикатор открытой двери, уровень масла, габариты, сигнал пищалки и режим коробки (P, D, R, S и так далее включая ручной режим и номер передачи). Пробег одометра рассчитывается согласно показаниям сигнала спидометра и пишется в память приборной панели (в том числе). Когда я подключаю чужую приборку к своему авто, показания одометра не родной приборки не сбрасываются. 

Далее приведу показания приборки при подключении питания, но отсутствии управляющих сигналов (согласно файлу Приборка.pdf страница 32). UART не подключен и линии контактов 3, 4, 5 и 6 висят в воздухе:

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

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

Дальний свет, не закрыта дверь, низкое давление в шинах, CRUISE, SET, AWD, AWD LOCK, масло, поворотники, ошибка двигателя, CVT — эти лампы будут выключены.

Теперь нам необходимо подключиться к контактам UART и вывести данные в компьютер при помощи USB-UART моста. Я использовал вот такой:


Вы можете использовать любой другой по запросу USB to UART bridge. Упоротые могут достать из arduino UNO проц или закоротить его на ресет и использовать встроенный UART. Короче TX приборки (контакт 18«R/L» красный с синей полосой) подключаем к RX нашего UART преобразователя и любой из черных проводов (контакты 22, 23, 24) к контакту GND UART. Далее запускаем любой монитор COM порта, выбираем свой UART в списке, подключаемся и наблюдаем поток сознания. Это краткая версия. Теперь подробнее. Качаем, например, это и втыкаем UART в USB. В списке COM Port должен появится новый COM к нему и подключаемся. Вот теперь и наблюдаем поток сознания от приборной панели в главном окне программы. Если не наблюдаем значит вы все сделали правильно, поскольку еще необходимо подобрать скорость приема данных — Baud Rate. Выбирая разные режимы, я отмел все, что выше 115200, ибо при таких настройках терминал выдавал сплошные нули. В настройках между 9600 и 19200 стала появляться хоть какая-то структура. Но дальше понятнее не становилось. Приуныв, я подпер подбородок рукой и, внезапно, обнаружил на столе осциллограф! Ого — подумал я. — У меня есть такая штука! Короче решил я посмотреть, что покажет эта шайтан-машинка. Кое-как подобрав настройки, я наблюдал непонятное нечто, с которым, ума не приложу, что делать. Ладно поищем что же вообще обозначает Baud Rate. Ага, википедия говорит, что это количество бит данных в секунду. Ну, думаю, дай гляну по осциллографу длину самого короткого импульса. Оказалось, что-то около 70 наносекунд. Почесав репу, решил это дело разделить на 1000000 наносекунд, а почему нет? Результат оказался близок к 14400. Есть такая скорость — снова подумал я, и выставил на всякий случай такие настройки: Baud Rate 14400, Data bits — 8, Parity — odd, Stop bits — 1, Handshaking XON/XOFF. И, черт возьми, все внезапно заработало! Ну то есть ничего не изменилось, окно выдавало все такой же странный набор символов, но чуйка подсказывала, что я двигаюсь в правильном направлении. Короче снял я со спидометра такую штуку: 

Это после декодирования

A0 0F 00 0F 00 14 00 00 00 00 14 A1 0B 00 0B 00 6E 00 00 00 00 6E A2 0F 00 02 00 14 10 00 00 00 09 A3 07 00 00 00 6E 05 00 00 00 6C A4 0F 00 0C 40 34 3F 00 00 00 48 A5 02 00 0E 00 6E 01 08 00 00 6B A6 0C 00 01 00 14 1F 00 00 00 06 A7 00 00 0F 00 6E 00 00 00 00 61A8 00 00 00 00 14 00 00 00 00 14 A9 00 00 00 00 6E 00 00 00 00 6E 

Потыкался с нулями, не нашел ничего интересного, но, снова внезапно, обнаружил, что байт со знаком «А...» повторяется каждые 10 раз. Привел я к такой структуре:

(Повторяющийся кусок)

A0 0F 00 0F 00 14 00 00 00 00 14 

A1 0B 00 0B 00 6E 00 00 00 00 6E 

A2 0F 00 02 00 14 10 00 00 00 09 

A3 07 00 00 00 6E 05 00 00 00 6C 

A4 0F 00 0C 40 34 3F 00 00 00 48 

A5 02 00 0E 00 6E 01 08 00 00 6B 

A6 0C 00 01 00 14 1F 00 00 00 06 

A7 00 00 0F 00 6E 00 00 00 00 61

A8 00 00 00 00 14 00 00 00 00 14 

A9 00 00 00 00 6E 00 00 00 00 6E

Предпоследние два байта всегда по нулям первые, если перевести HEX в DECIMAL растут с 160 по 169. HEX — набор символов о котором речь шла выше, это не что иное, как десятичные числа в шестнадцатеричном (чуть пальцы не сломал пока писал) формате. 

Стало жарко. Дай думаю скормлю эти же данные приборке через Terminal. Втыкаю TX USB-UART преобразователя в RX приборки, и она начинает пищать всеми цветами радуги. Тут я догадываюсь, что не все так просто. Видимо UART физического уровня несколько отличается от того, что используется в тех же ардуинах. Снимаю накладку с приборки, туплю на плату, перерисовываю схему и ага! Действительно это дифференциальная пара. Не вдаваясь в подробности скажу лишь, что я подпаялся непосредственно к площадкам, идущим прямо к контроллеру и тогда все заработало нормально. Вот фото куда чего паять:


А теперь, самое вкусное. Несем всю эту нанотехнологию в машину, подрубаем свою модифицированную приборку, UART к буку и приборке. Причем к приборке теперь подрубаем не выход, а наоборот ВХОД (Контакт 19«R/B» красный с черной полосой) что бы снять данные которые шлет машина на приборную панель. Затем врубаем зажигание, запускаем на буке Terminal и он начинает записывать все, что приходит на приборку. А теперь начинаем тыкать во все кнопочки подряд в своей машине. Открываем-закрываем двери, включаем дворники, жмем газ-тормоз-реверс-с-м у кого что, свет дальний ближний, поворотники. Желательно убить мотор и вариатор, чтобы мы могли снять коды ошибки мотора и вариатора. Причем мотор надо убить в разных вариантах и позах и каждый датчик по отдельности.  В общем снял я данные с машины, и вот что вышло:

(Небольшой кусок от A0 до A9)

A0 40 00 00 78 3F 00 00 00 00 07 

A1 00 00 00 10 00 00 00 00 00 10 

A2 40 00 00 78 3F 00 00 00 00 07 

A3 00 00 00 10 00 00 00 00 00 10 

A4 40 00 00 78 3F 00 00 00 00 07 

A5 00 00 00 10 00 00 00 00 00 10 

A6 40 00 00 78 3F 00 00 00 00 07 

A7 00 00 00 10 00 00 00 00 00 10 

A8 40 00 00 78 3F 00 00 00 00 07 

A9 00 00 00 10 00 00 00 00 00 10 

Ого — подумал я. — Это же почти как у спидометра! Дай, думаю, скормлю приборке логи, что я записал с машины. Скормил. Приборка повторила все то, что я вытворял в авто с авто на авто. Эка я умен — не скромничал я про себя! Решил изменить некоторые знаки и снова скормить приборке измененный файл. Ничего не произошло. Хм — подумал я. Чего же делать то? И приуныл, снова подперев рукой подбородок.

….Странные цифры в конце каждой секции…
…Четыре пары нулей и потом какие-то цифры…
Открыл я виндокалькулятор. Зачем-то переключил в режим HEX. Почему-то решил взять все числа в формате HEX исключая номер секции и последнее число и перемножить их между собой методом XOR. Внезапно! Сумма XOR чисел оказалась равна последнему числу в секции. Интересно — подумал я. Видимо, байт контрольной суммы — осенило мою голову. Изменил несколько чисел, заXORил их между собой, сумму вписал в конце секции и скормил приборке. Приборка изменила показания тахометра. Все понятно. Структура стала ясна:

A0 40 00 00 78 3F 00 00 00 00 07 

Номер секции        — A0

Данные              — 40 00 00 78 3F 00 

Байты конца строки   — 00 00 00 

Байт контрольной суммы        — 07

Короче, чтобы расшифровать чего куда какой бит изменяет на@овнокодил я такую софтину:


Управление крайне примитивное — жмякаем «Выбрать порт». Ждем… Еще ждем… Опять ждем… Во всяком случае так у меня. Вылезет окошко со списком портов. По клику по имени порта, подключается к порту. Л — Логика! Что бы начать передачу тыкаем кнопку «Начать передачу». Л — Логика! Левая часть содержит 10 секций от A0 до A9. Во время передачи эти секции последовательно грузятся в выбранный порт. Подводим указатель мыши к любой ячейке и крутим колесо. Значения меняются и на лету меняются показания на приборке. В правой части должен был выводиться ответ от приборки, но я @овнокодер, у меня все тупило, потому сейчас там просто форматированный вывод. Можно сохранить текущие настройки HEX в файл и потом его загрузить. Для этого жмякаем одноименные кнопки. Софт автоматом подсчитывает сумму и пересчитывает байт честности. Так что его не трогаем, да и нифига у вас не выйдет. Байт в синем квадратике менять можно, но, скорее всего, это — разделитель. Он вроде как никак не влияет на данные. Для полнофункциональной работы достаточно скармливать первые две секции A0 и A1. В первой секции содержатся данные тахометра и еще что-то, во второй все лампочки-ошибки и положение ручки АКПП. Короче разберетесь. Посредине синие точки — это включатели отправки секции. Если синяя, значит эта секция отправляется в COM port. При запуске открывается дефолтная оснастка, которая 100% работает. Софтина кривая, вылетает с завидной регулярностью, да и пофигу. В архивчике лежит все, что надо для самостоятельных танцев с бубнов, включая мануалы к авто, и моя кривая софтина.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!




Комментарии (33):

  1. Exeland
    /#23144616 / +3

    Биты конца строки - скорее всего это тоже данные просто данные имеют выравнивание по 32 бита.

  2. prilichny
    /#23144718

    чтобы

    • raven19
      /#23144738

      А ctrl+Enter не работает? Там ещё штук двадцать таких пунктов.

      • prilichny
        /#23144748

        работает наверное, я просто не знал (или забыл)
        да вообще, прочитал дважды — так и не понял, о чем это. а каким многообещающим был заголовок!

  3. sav13
    /#23144724

    А что, диагностического разъема, куда подключить можно копеечный ELM237 нету у данного авто?

    • 200sx_Pilot
      /#23145026

      Зато так мурановскую приборку можно приладить на ИЖ Планета Спорт.
      Или вставить в Мурано приборку от распоследней Инфинити.

    • ntfs1984
      /#23145064

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

  4. JPEGEC
    /#23144746

    До конца не уловил суть работы? Чего именно планировалось добиться?

    • Mulin
      /#23145504

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

      • JPEGEC
        /#23146122 / -1

        Только поймите меня правильно, но зачем? Какая цель этого?
        Я, к примеру, могу понять заведение диагностического разьема со сливом всей возможной инфы в комп и информативным отображением для удобной диагностики. Да, по факту это мало кому кроме профессиональных ремонтников нужно, но пусть.
        Но в чем смысл замены удобных информативных указателей стрелочного типа на невнятные цифровые дисплеи? Какая цель этим достигается?

        • Mulin
          /#23146128 / +2

          Это вопрос вкусовщины. Достаточно того, что мне так больше нравиться. Кто-то выбирает цвет, кто-то мощность, кому-то важна надёжность, а мне вот, помимо прочего, хотелось цифровой панели. Но уже неактуально, в той, которую планирую брать, уже все это имеется

          • JPEGEC
            /#23146282 / -1

            Просто «мне так больше нравится»? Все ради этого?
            Уважаю, есть в этом какое-то благородное безумство.

            • Mulin
              /#23147210

              Приблизительно через пол года после покупки, пришла такая идея в голову. Да и просто интересно было

            • PositiveAlex
              /#23148400

              Тут суть не в результате, а в процессе. Интересны именно технические подробности, детали.

  5. hw_store
    /#23145104

    А что, данная приборная панель общается с другими ЭБУ центральным ЭБУ не через CAN, а посредством обычного UART с ТТЛ-уровнями? Как-то странно.
    Шесть лет назад я починял приборную панель Renault Scenic 2 (это было первое залезание электронику этой машины) (но там была другая беда — неисправность схемы вторичного питания, по причине плохого пропая из-за, предположительно, неотработанной на тот момент технологии бессвинцовой пайки — частая беда этой модели) — но у рено меган/сценик с 2003 года уже весь обмен данными между блоками был построен на CAN. Возможно, вооружившись каким-нибудь CANhacker'ом, можно было бы залезть в протокол и посмотреть, что там за что отвечает. К примеру, сбросить одометр ;) В те времена мне не пришло бы в голову сличить распиновку микроконтроллера приборки без логотипа с даташитами на ST или NXP, чтобы понять, что там за контроллер и с чем его едят, а схемы/прошивок/методик в открытом доступе не было

    • vvzvlad
      /#23145276

      А что, данная приборная панель общается с другими ЭБУ центральным ЭБУ не через CAN, а посредством обычного UART с ТТЛ-уровнями? Как-то странно.

      Судя по «Снимаю накладку с приборки, туплю на плату, перерисовываю схему и ага! Действительно это дифференциальная пара», это RS-485.

      • Mulin
        /#23145512

        И все равно это остается дифференциальной парой :)

        • vvzvlad
          /#23148786

          Ну, да. Но не «обычный TTL-UART»

          • Mulin
            /#23148788

            Так я же и написал, что это не обычный UART а дифф пара. А это и есть 485 :)

          • Mulin
            /#23148800

            Извиняюсь, чукча не читатель. Я подумал что вы решили, что это я назвал обычным UART TTL

      • MK1301
        /#23148718

        Я всё таки думаю обычная CAN шина, она тоже дифференциальная.

        • vvzvlad
          /#23148782

          Тогда бы там более сложный обмен был, «проигрыванием» пакетов автор бы не отделался.

    • NickyX3
      /#23155476

      не через CAN, а посредством обычного UART с ТТЛ-уровнями? Как-то странно.

      У моей японской Хонды 2004 года вообще даже UART не пахнет. Про CAN я вообще молчу.
      Лампа M режима — отдельный провод от мозгов, лампы PRNDS отдельные провода от мозгов. Индикация псевдоскоростей 1-7 вариатора — три провода (ну тут обычный 3-wire to 7-segment, за исключением того, что 7 это 000), спидометр и тахометр — импульсные. Ну и так далее, все лампы практически каждая по своему проводу, ага

  6. Zhenek
    /#23145136

    В заголовке букву пропустили «Nissan Muran».

  7. skymal4ik
    /#23145240

    Классно, спасибо. Единственное, что не хватает фото приборки до и после, интересно посмотреть ради чего всё затевалось.

    • Alex_333
      /#23145358

      Ради наполнения блога компании Маклауд, очевидно.

      • Mulin
        /#23145508

        Не совсем. Это делалоcь полтора года назад

        • Alex_333
          /#23145710

          оффтоп: интересно, а зачем ваши статьи для этого блога прячут под разными никами? S_ILya, owlofmacloud? Так сейчас принято?

          • Mulin
            /#23145730

            Они не прячут. Насколько я понимаю, это те, кто конкретно запостил статью.

        • bugdesigner
          /#23146294

          Тогда, простите за занудство, почему статью написали только сейчас?

  8. 200sx_Pilot
    /#23145814 / +3

    Чего именно планировалось добиться?


    «Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!»

    • PositiveAlex
      /#23148408

      Не поверю, что человек ради рекламы разгребал все это дело.

      • Mulin
        /#23148790

        Ради подключения LCD, но дальше не хватило времени