В данной заметке предоставлена информация о трудностях с которыми я столкнулся при перепрошивке дорестайловой приборки от Freelander2. Здесь не будет пошагового руководства по перепрошивке, а будут приоткрыты некоторые скрытые процессы, которые происходят при прошивке электронных блоков автомобиля(ЭБУ). Надеюсь мой опыт будет кому-то полезен, и сэкономит время, которое я потратил разбираясь с прошивками и программой SDD. Заметка получилась объемной, а время сейчас такое, что все куда-то спешат, поэтому самая ценная информация по перепрошивке с помощью SDD находится в конце заметки.
После тестирования ягуаровской TFT приборки, я задался целью с помощью замены прошивки превратить TFT приборку от Jaguar в приборку от Range Rover, в следствии этого мне пришлось разбираться с прошивками в формате vbf и даже написать vbf редактор. А так как до недавнего времени мой опыт взаимодействия с программой SDD был ограничен всего лишь парой случаев, то перед тем как перепрошивать приборку от ягуара, я решил потренироваться на дорестайловой приборке от Freelander2, которая была приобретена специально для опытов. Такое решение я принял, исходя из не совсем удачного опыта работы с SDD. В первом случае, я менял конфигурацию автомобиля, для включения опции "скандинавский свет" и смена конфигурации прошла без проблем, а во втором случае, при перепрошивке приборной панели в своем Freelander2 процесс прошивки прошел не без проблем. Процесс прошивки постоянно прерывался ошибками, и когда процедура записи прошивки в приборку прервалась с ошибкой в очередной, уже наверное в десятый раз подряд, а заряд батареи ноутбука упал до критического минимума, то я уже был готов на вариант вызова эвакуатора и транспортировки автомобиля в сервис, когда ноутбук полностью разрядится. К счастью, еще через пару попыток закончившихся с ошибками, процесс прошивки приборки наконец-то завершился успешно, но после этого случая к программе SDD я решил больше не прикасаться и даже удалил виртуальную машину(ВМ) с SDD с ноутбука.
Уже много лет в качестве операционной системы(ОС) на своих компьютерах я использую linux, по этой причине SDD я запускаю внутри виртуальной машины с ОС windows. В своих опытах я использовал готовые ВМ с SDD v131.3 и SDD v139.17, которые скачал из сети. Поэтому в первую очередь огромное спасибо всем тем людям, кто выкладывает готовые для использования ВМ с SDD, т.к. эти люди один раз потратив свое время на установку SDD, позволяют использовать SDD сразу же после скачивания ВМ из сети. В использовании ВМ с жирным диагностическим ПО типа SDD есть несколько преимуществ:
— возможность использовать SDD с альтернативными ОС на компьютере(linux, macos)
— на одном компьютере можно одновременно использовать несколько SDD разных версий
— с ВМ всегда можно вернуться в "исходное" состояние как после установки
— временные затраты на установку и материальные затраты на активацию различных дополнений(калькуляторы, генераторы) к SDD разовые
Все свои опыты с приборной панелью я производил в домашних условиях, приборная панель была подключена напрямую к адаптеру jlr mongoose с помощью OBD2-разветвителя заказанного на aliexpress. И как я теперь понимаю, что причиной всех проблем которые у меня возникли при перепрошивке приборной панели, было то что приборная панель не была подключена к автомобилю.

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

Далее при запуске процедуры "Идентифицировать автомобиль" и сканировании блоков автомобиля появлялись ошибки о занятии процесса SDD или о не соответсвии данных. Ошибки не критичные, но раздражающие, когда появляется такая ошибка надо подождать пару минут, пока фоновый процесс опроса блоков в SDD не завершит свою работу и "Попробовать еще раз".

В конечном итоге, SDD завершив процедуру сканирования отображал состояние блоков автомобиля. В моем случае был активен только один блок автомобиля — это приборная панель(IPC).

По нажатию на кнопку "#" можно было увидеть характеристики блоков автомобиля, в моем случае в приборной панели была видимо заводская прошивка 6H52-14C026-AC, для которой я даже не смог найти соответствующий vbf файл в каталоге прошивок SDD.

Далее я действовал в соответствии с руководствами по перепрошивке приборки для Freelander2, которые можно найти и на drive2.ru, из которых следовало, что есть три варианта перепрошивки приборки:
— через меню "Диагностирование"->"Выбранные признаки неисправностей" выбрать неисправности связанные с приборной панелью("Электрический" -> "Приборы" -> "Информационная панель"), и затем запуск процедуры "Настроить имеющийся блок — блок управления блоком приборов"
— через меню "Сервисные функции" запуск процедуры "Установка нового блока панель приборов"
— с помощью файла SoftwareDownload.htm
Первый вариант отпал, т.к. пункт "Настроить имеющийся блок — блок управления блоком приборов" был не доступен, какие бы я манипуляции не совершал при выборе неисправностей. Но при этом появлялся вариант обновления ПО в блоке кузова, которого даже не было в моих опытах, ох уж эта чудесная программа SDD )

Второй вариант "Установка нового блока панель приборов" был доступен, но завершался после неудачного чтения данных с блока двери водителя(DDM) и блока двери пассажира(PDM). Так же, как я выяснил в последствии, при этом методе обновления прошивки в приборной панели дополнительно происходит перезапись данных CCF в самой приборке и в блоке кузова. Запись данных в другие блоки автомобиля не совсем явное поведение, поэтому считаю этот метод наиболее опасным для обновления прошивки в приборной панели.

Наконец третий метод прошивки приборки, который кстати использовал и сам автор альтернативных прошивок для приборки Freelander2 — alex_pescaru — это использование файла SoftwareDownload.htm. После запуска этого файла и прохождения серии вопросов/ответов, которые предваряют саму процедуру перепрошивки, появлялся заветный экран с перечнем vbf-файлов, доступных для прошивки.

Но при запуске процедуры прошивки возникала ошибка о некорректном VIN номере.

Анализ CAN запросов которые посылала SDD перед возникновением ошибок, показал, что это были запросы к блокам кузова(BCM), двери водителя(DDM) и двери пассажира(PDM) по протоколу UDS. Таких блоков на моем домашнем стенде конечно же не было и видимо поэтому процедура перепрошивки заканчивалась с ошибкой.
UDS — это диагностический протокол между ЭБУ и диагностической программой, этот протокол обладает большим числом возможностей, чем протоколы используемые в Torque/ELM327. По протоколу UDS возможно не только считать/удалить ошибки и получать текущие данные, но и обновить прошивку в ЭБУ и сделать многое другое. Для ознакомления с протоколом можно прочитать статью о UDS на русском, а для более глубокого погружения в UDS необходимо чтение стандарта ISO 14229-1. К сожалению открытых реализаций протокола UDS для c++ я не нашел, есть отличный проект python-udsoncan, но он для python-а, так что пришлось изучать ISO 14229-1 и создавать свой велосипед.
Так как в моем случае у меня не было никаких других устройств кроме приборки(IPC), а программе SDD для прошивки приборки нужны были другие блоки автомобиля, то я решил сделать программный эмулятор автомобиля. Эмулятор не в полном смысле этого слова, а эмулятор электронных блоков автомобиля с которыми общается программа SDD по протоколу UDS. И эмулятор получился не чисто программный, а программно-аппаратный, так как для приема/отправки пакетов я использовал плату usb2most подключив ее к obd2 разветвителю, дополнительно к приборной панели и jlr moongose.
На первоначальном этапе я реализовал в эмуляторе функционал достаточный для того, чтобы в SDD успешно проходила процедура сканирования всех блоков. Для этого достаточно реализовать следующие команды протокола UDS: Diagnostic Session Control(0x10), ECU Reset(0x11), Read DTC Information(0x19), Read Data By Identifier(0x22), Tester Present(0x3e).
Из файла с CAN данными, записанными ранее в момент сканирования SDD моего реального автомобиля, я извлек запросы SDD и ответы реальных блоков. Далее сделал так, чтобы эмулятор при сканировании блоков, отвечал на запросы SDD ответами как от реальных блоков. С таким эмулятором уже можно было управлять количеством блоков автомобиля и например легко можно сделать так, чтобы SDD обнаружил все возможные блоки автомобиля, которых в реальном автомобиле никогда не было.

При сканировании блоков автомобиля SDD в основном запрашивает из ЭБУ текстовые идентификаторы(названия прошивок, калибровок и т.п.) В получившемся эмуляторе можно было достаточно легко изменять VIN номер в виртуальных блоках и другие идентификаторы блоков. На следующей картинке продемонстрирована эта возможность, и это не результат фотошопа, просто в какой-то момент времени немного наболело при очередной ситуации, когда я не понимал, что творит SDD.

И уже на этом этапе, только эмулируя блоки, без которых SDD не хочет прошивать приборную панель, можно было перепрошить с помощью SDD приборную панель, что я в последствии проверил неоднократно. Но я решил не останавливаться на достигнутом и добавил в эмулятор возможность перепрошивки виртуальных блоков в эмуляторе. Для этого реализовал в эмуляторе следующие команды протокола UDS: Security Access(0x27), Routine Control(0x31), Request Download(0x34), Request Upload(0x35), Transfer Data(0x36), Transfer Exit(0x37).
В итоге SDD прошивал виртуальные блоки, даже не подозревая, что это не реальные устройства, а эмулируемые. Данные прошивки, которую SDD загружал в виртуальные блоки, можно посмотреть в эмуляторе или сохранить в файл для последующего анализа.
На следующем скриншоте запечатлен внешний вид эмулятора в момент сканирования блоков в SDD.

По скриншоту эмулятора можно понять и его основные возможности.
— в панели меню программы выбирается модель автомобиля, который будет эмулироваться и его VIN номер
— слева отображается дерево эмулируемых блоков, с данными этих блоков доступными для чтения и записи
— справа отображается содержимое выбранного блока данных
— снизу находится журнал работы эмулятора, в котором отображается происходящий процесс
В журнале видны записи "read block" — это SDD запрашивает при сканировании блоков из ЭБУ блок данных по определенному идентификатору, есть ряд стандартизированных идентификаторов, например 0xf190 — VIN номер автомобиля, но большая часть специфичны для конкретной марки автомобиля.
Ниже приведен скриншот эмулятора после перепрошивки виртуальной приборной панели. По сообщениям из журнала работы можно более подробно изучить, что происходит при перепрошивке ЭБУ автомобиля в терминах протокола UDS, на конкретном примере приборной панели.

— Переключение в сессию программирования ЭБУ. SID=0x10, session=0x02
— Считывание идентификаторов из ЭБУ
— Аутентификация диагностического ПО. Только после прохождения аутентификации в ЭБУ возможно выполнение команд по изменению данных и прошивки в ЭБУ. Аутентификация работает следующим образом: Первоначально диагностическое ПО запрашивает у ЭБУ 3 байта данных, которые ЭБУ создает случайно с помощью генератора случайных чисел, в данном случае SEED=0x123456. Затем диагностическое ПО используя полученный SEED и 5 байтовый секретный ключ с помощью секретного алгоритма вычисляет 3-х байтовый ключ и отправляет его в ЭБУ, в данном случае KEY=0x83ed71. ЭБУ при приеме ключа, также вычисляет свой ключ с помощью идентичного секретного алгоритма, SEED и идентичного 5 байтного секретного ключа и сравнивает результат вычисления. Только если ключи рассчитанные в диагностическом ПО и в ЭБУ совпадают, диагностической программе предоставляется возможность производить дальнейшие процедуры по модификации данных в ЭБУ, иначе процедура перепрошивки заканчивается. В каждом типе ЭБУ хранится свой секретный ключ и SDD должен знать какой секретный ключ применять для каждого типа ЭБУ.
Такая схема защиты хоть и была придумана много лет назад, но и до сих пор обладает хорошей защищенностью. Я прикинул, что даже зная какой алгоритм расчета используется, чтобы рассчитать все возможные варианты от одного значения SEED, которое посылает ЭБУ и всех вариантов 5 байтовых ключей потребуется несколько дней работы современного компьютера и накопитель объемом в 4ТБ.
Для автомобилей, в которых есть ЭБУ концерна FoMoCo, секретные ключи уже давно не секретные, т.к. этот секрет раскрыли Chris Valasek и Charlie Miller в документе Adventures in Automotive Networks and Control Units. Для тех кому лень читать читать весь документ, можете найти по тексту один из секретных ключей — DRIFT, и прочитать лишь одну страницу документа — ее достаточно для понимания, как найти секретные ключи.
Для дальнейшего понимания происходящего ниже приведена упрощенная структура ЭБУ, который как минимум состоит из пары микросхем: микроконтроллер(MCU) и EEPROM-памяти.
В MCU есть постоянная FLASH-память это аналог жесткого диска для хранения программы(EXE) и постоянных данных(DATA) и есть оперативная RAM-память для изменяемых данных(DATA). В микросхеме EEPROM сохраняются изменяемые данные, которые должны сохраняться между перезагрузками ЭБУ, в случае приборной панели в ней хранится пробег автомобиля.

— Запись SBL в RAM-память ЭБУ. Специфика микроконтроллеров используемых в ЭБУ такова, что штатная программа в ЭБУ работает из flash-памяти, и штатная программа находящаяся в flash-памяти, не может перезаписать сама себя. Для перезаписи содержимого flash-памяти используют отдельную программу, специально созданную для перезаписи flash-памяти, такую программу называют Second Boot Loader(SBL). SBL предварительно загружается в RAM-память микроконтроллера и затем вытесняет из процессора штатную программу, далее с помощью SBL диагностическое ПО может делать с flash-памятью что угодно.
Примерным аналогом SBL для персонального компьютера является загрузка windows или linux с Live-CD/Live-USB носителя, в результате загруженная ОС получает полный доступ с содержимому всего жесткого диска. В данном примере в MCU загружается SBL из файла 6H52-14C025-AA.VBF.
— Очистка FLASH-памяти ЭБУ. Опять же специфика flash-памяти, используемой в микроконтроллерах ЭБУ такова, что перед записью новых данных такая память должна быть очищена. Информация какие части flash памяти необходимо очищать перед записью данных находится в vbf файле. SBL загруженный ранее в ОЗУ получает инструкции для очистки flash-памяти от программы SDD и очищает ее.
— Запись новых данных в FLASH-память ЭБУ Производится запись данных из файла AH52-14C026-AD.VBF по адресам 0x00080000 — 0x000f7fff, для микроконтроллера MB91F013, установленного в панели приборов, эти адреса соответствуют первым 464КБ flash-памяти.
— Запись новых данных в EEPROM память ЭБУ Производится запись данных из файла AH52-14C088-FD.VBF по адресам 0x020 — 0x3ff, для MB91F013 по этим адресам нет физического соответствия в адресном пространстве, но опытным путем установлено, что это производится запись во внешнюю микросхему eeprom памяти ST35080VP.
—Сброс ЭБУ После перепрошивки ЭБУ происходит его перезагрузка
После того как у меня появилось понимание, что происходит при процедуре прошивки приборной панели, и что сама перепрошивка занимает всего лишь несколько минут, а все остальное время в этом процессе это некие просьбы и уговоры SDD, чтобы она сделала необходимое, я решил попробовать сделать свой минимальный аналог SDD по загрузке vbf файлов в ЭБУ. Для этого потребовалось реализовать те же самые команды протокола UDS, что были сделаны для эмулятора, но только уже с точки зрения запросов, а не ответов. В итоге получилась программа внешний вид которой представлен на следующем скриншоте, с запечатленным моментом перепрошивки реальной приборной панели Freelander2.
А если владельцам автомобилей Ford эта программа чем-то покажется знакомой, то вам не показалось, расположение элементов взято из vbf загрузчика программы UCDS. Интерфейс программы прост — заполняем список vbf-файлов которые надо загрузить в ЭБУ и далее нажимаем кнопку "Start Programming", после этого ждем окончания процедуры программирования. Основное отличие своего vbf-загрузчика от SDD это необходимость точно знать, какие vbf-файлы нужны для прошивки, но не надо уговаривать SDD прошить определенный ЭБУ автомобиля.

Но перед тем как перепрошивать приборную панель, с помощью своего vbf — загрузчика, я решил попытаться прочитать содержимое всей flash-памяти и epprom памяти с помощью SBL. Как я ранее уже озвучивал, SBL загруженный в ЭБУ дает возможность не только записывать новые данные в flash-память, так и считать текущие данные из памяти. В ходе опытов выяснилось, что SBL из файла 6H52-14C025-AA.VBF дает возможность прочитать не всю flash-память и eeprom-память.
Для flash-памяти доступен для чтения/записи диапазон 0x00080000 — 0x000f3fff, а диапазон 0x000f4000 — 0x000fffff, где расположен PBL и серийный номер ЭБУ недоступны. Для eeprom-памяти доступен для чтения/записи диапазон 0x020 — 0x3ff, а диапазон 0x000 — 0x01f, где находятся инкрементные регистры микросхемы ST35080VP не доступен. PBL — это аналог SBL, но находится он в flash-памяти ЭБУ, при некорректной прошивке есть шанс восстановить ЭБУ через PBL. На скриншоте ниже в приборку загружен только SBL и происходит неудачная попытка считать данные из EEPROM-памяти 0x000 — 0x3ff, а данные из диапазона 0x020 — 0x3ff считываются успешно.

подумав, что такое ограничение явно искусственное, я решил взглянуть на ассемблерный код SBL. Ассемблерный код SBL я получил с помощью дизассемлера из файла 6H52-14C025-AA.VBF.0.bin следующей командой:
fr30-elf-objdump -b binary --adjust-vma=0x0(0x3c800) -D -EB -mfr80 6H52-14C025-AA.VBF.0.bin > 6H52-14C025-AA.VBF.0.asm
Файл 6H52-14C025-AA.VBF.0.bin, содержащий SBL был извлечен с помощью vbf редактора
Дизассемблер собирал по инструкции по сборке binutils с дополнительной поддержкой архитектуры mfr80.
Быстрый поиск по ассемблерному коду граничных величин разрешенных диапазонов памяти показал два места, где происходит проверка на диапазоны 0x80000-0xf8000 и 0x20-0x400.
Инструкции отвечающие за проверку на адреса 0xf8000 и 0x20 я заменил на пустые операции NOP. На картинке ниже приведены правки которые необходимо сделать, чтобы получить полный доступ к flash-памяти и eeprom-памяти.

В свою программу я добавил возможность правки SBL на лету, с помощью переключателя "Patch SBL", после этого при загрузке файла 6H52-14C025-AA.VBF и активированном переключателе "Patch SBL" можно скачать полный образ flash-памяти и eeprom-памяти из приборной панели. Полный образ flash-памяти мне в последствии пригодился при восстановлении неработоспособной приборной панели. На скриншоте ниже в приборку загружен исправленный SBL и все данные из EEPROM-памяти в диапазоне 0x000 — 0x3ff считываются успешно.

Как и обещал, в конце заметки размещаю самую ценную, по моему мнению, информацию о обновлении прошивок в блоках автомобиля с помощью SDD, эту информацию мне предоставил Oldjaguar уже после того как я написал и эмулятор блоков и vbf-загрузчик, но все равно спасибо ему большое.
Для возможности обновления прошивки с помощью SoftwareDownload.htm любого блока автомобиля надо в файле JLR/IDS/Xml/platform_xxx_modelyear.exml заменить в строках <ccf_vin_check enable="true"/> и <vin_checking enable="true"/> слово true на слово false.
Для Freelander2 этот файл будет иметь название platform_l359.exml. После этой правки в SDD отключается проверка на соответсвие VIN номера автомобиля и загружаемой прошивки, и даже отдельно подключенная приборка прошивается без проблем. Дешифратор exml файлов можно взять у меня с github-а, исходники его находятся там же. Уже как год в черновиках у меня лежит заметка о CCF, в ней я планировал рассказать также и о интересном методе, который я применял для реверса дешифрации exml файлов, надеюсь время найдется и я опубликую об этом заметку.
Следующая информация будет не менее ценна, если возникнет неприятная ситуация, когда приборная панель не включается после перепрошивки. В ходе своих экспериментов, после очередной перепрошивки приборной панели, моя реальная приборка перестала подавать признаки жизни. Восстановить неработоспособную панель мне помог полный образ flash-памяти, который я выкачал из приборной панели ранее. Для восстановления прошивки в приборной панели из оборудования нужен только последовательный порт с 5В уровнями напряжения, я использовал простейший usb2uart преобразователь с алиэкспресс. Необходимо подпаяться к контактам разъемов CN2 и CN3 на печатной плате приборной панели по следующей схеме(MD2
надо подключить к 5В, P10 и P11 к GND, SOT0 к RX, SIN0 к TX)

При таком подключении после включения питания микроконтроллер MB91F013 переходит в режим программирования через последовательный порт. Для загрузки прошивки в MB91F013 надо установить программу из архива pcwfr-v01l28.zip, эта официальная программа для перепрограммирования процессоров серии FR от производителя этих процессоров FUJITSU поможет оживить не работающую приборную панель. Предварительно перед запуском программы надо добавить в файле Program Files/FUJITSU/FUJITSU FLASH MCU Programmer/FR/chipdef.ini недостающее описание для микроконтроллера MB91F013.
[MB91F013]
DownloadFile=m_flash.013
LoadAddress=0x3C000
StartAddress=0x80000
EndAddress=0xFFFFF
FlashSize=0x80000
Clock=4MHz
Baud=9600
Baud2=38400
Подытоживая, хочу призвать делиться информацией, знай я ранее о возможности прошивки блоков через SoftwareDownload.htm с отключением проверки VIN номера, то мне не пришлось бы тратить время на создание своего vbf-загрузчика, а уделить время на что-то другое, например допиливание TFT приборки. Я конечно понимаю, что вся автомобильная тема держится на секретиках, но жаль тратить время на исследования, которые уже кто-то сделал, по этой причине не стал углубляться в изучение структур данных в EEPROM-памяти, поэтому у кого есть иформация по алгоритмам сохранения пробега в EEPROM-памяти, пожалуйста напишите в комментарии.
PS TFT приборку от Jaguar я все же превратил в приборку от Range Rover, как смогу сделаю заметку о ее работе в Freelander2.
PSPS В процессе написания заметки попалась хорошая статья о модификации приборных панелей без физического вмешательства с помощью протокола UDS: habr.com/ru/post/526734/


Комментарии 48
Я смотрю и офигиваю)))
А нету файликов у когонибудь
9h22-14d394-aa.vbf
5h22-14d396-aa.vbf
6h22-14d362-aa.vbf
Приветствую, в sdd скорее всего можно найти vbf файлы
я посмотрел везде где только можно не только в сдд а еще во всём интернете. всё уже нашли. всё сделали.
Пока есть такие драйвовчане, ковыряться с тачкой увлекательно и не страшно)
Как всегда захватывающе!
Очень круто и полноценно расписано!
По поводу библиотеки для python udsocan.
На сегодняшний день она достаточно высокоуровневая.
Однако поддержки ID29 нет по сей день для J2534.
В скором времени я думаю будет с моей помощью))
Спасибо
Здравствуйте, помогите пожалуйста, после обновления блоков ( в роцесе обновления) недоустановило, и теперь авто не запускается, блоки не могу заново прошить, куда копать? Jaguar F-pace
Приветствую, у меня опыта нет с ягуарами.
Попробуйте здесь свой вопрос задать, только добавьте хотя бы скриншоты из sdd
t.me/+8bxRfJZ9c-tiYTUy
Просто фантастика. Спасибо, что поделились своим исследованием. Вы бесконечная база данных.
Спасибо
Скажите пожалуйста а сами программы можно где то одни архивом скачать, я скачал exml, exe пытаюсь запустить его но он не запускается.
exml.exe консольная программа, запускайте в командной строке
Было бы здорово если бы вы сделали видео или создали канал где можно посмотреть ваши работы.
на youtube есть канал: www.youtube.com/channel/U…-RaTPqf7qYvPb9yTDA/videos
Респект за статью. Залип, перечитал. Хочу в свой дискоспорт 2017 прикрутить tft панель. Чутка разбогатею прикуплю и начну.
Спасибо большое очень интересная и полезная статья
Спасибо
Как всегда, восхищен. Исследования — огонь, все четко и понятно. Спасибо огромное за Ваши Знания и Труд!
Спасибо
ASMчик…прям студенческие годы вспомнились, когда писал BL-over-UART под AVR мегу на спор с преподом) Ностальжи))
Респект! Твой блог — просто клондайк ценнейшей инфы!
Спасибо
Статья превосходная! респект!
>> К сожалению открытых реализаций протокола UDS для c++ я не нашел, есть отличный проект python-udsoncan, но он для python-а, так что пришлось изучать ISO 14229-1 и создавать свой велосипед.
В рамках предложения делиться находками:
github.com/iDoka/awesome-…reverse-engineering-tools
тут как минимум 2 симулятора UDS (Cи и С++)
да и вообще подборка интересная :)
Спасибо, отличная подборка и вам респект за вашу работу.
Сейчас заканчиваю проект с реализацией прошивок для китайских canbus адаптеров и надеюсь он тоже сможет попасть в этот список.
Пока поддерживаются адаптеры OD-VOLVO-OD2(HW1) и VW-RZ-08(HW-NC03) и автомобили xc90(2007my) и freelander2(2007my, 2013my).
Спасибо тебе что ты это выливаешь в свет
Кошкин кот, статья огонь 🔥, хоть и для меня это темный лес
Спасибо
Преклоняюсь. Заодно вспомнил, как забивал нопами разные процедуры проверки серийных номеров лет так 20 назад в #rpg2000 :))
Спасибо, не часто таким занимаюсь )
Как всегда, не статья а готовая диссертация. Столько нового всегда узнаю.
А можно подробней об эмуляторе блоков? Его можно отдельным устройством организовать? Безценная штука для тех у кого свап. Потому что sdd хоть и видит читает всю систему, но при попытке править конфигурацию, в ccf получаеться белиберда из за того что он не видит некоторых блоков и обрывает запись ccf по ошибке блока эбу.
Ccf можно и без эмулятора лить. Главное чтоб бодик и приборка в сети были :)
А подскажите каким образом на д3, буду очень благодарен.
Proximaf
Как всегда, не статья а готовая диссертация. Столько нового всегда узнаю.
А можно подробней об эмуляторе блоков? Его можно отдельным устройством организовать? Безценная штука для тех у кого свап. Потому что sdd хоть и видит читает всю систему, но при попытке править конфигурацию, в ccf получаеться белиберда из за того что он не видит некоторых блоков и обрывает запись ccf по ошибке блока эбу.
Пока в железе его нет, но если приборку все же заменю, то придется сделать эмулятор родной приборки, с функцией сохранения CCF. А в Диско3 CCF хранится блоке двигателя?
Насколько я понял он там в нескольких блоках, в том числе и в блоке двигателя
SmartGauges
Пока в железе его нет, но если приборку все же заменю, то придется сделать эмулятор родной приборки, с функцией сохранения CCF. А в Диско3 CCF хранится блоке двигателя?
В pcm хранится резервная копия.
Надо из файла платформы убрать pcm как источник ccf
Очень понравилась статья, много полезной инфы, все доходчиво, по полочкам. Эх, была бы она написана лет этак семь-восемь назад, сколько времени удалось бы сэкономить :))
Насчет PBL — это не совсем аналог SBL. первичный бут — это именно загрузчик контроллера, он занимается тем, что проверяет записанную во флеш основную прошивку (EXE/DATA или стратегию/калибровку по номенклатуре форда) и, если все хорошо, передает ей управление для дальнейшей загрузки. если же что-то не так (кс или подписи не сошлись), то контроллер остается в первичном бутлоадере. он умеет также работать с кан, как раз для возможности прошивки. когда активен основной софт и прилетает команда активации сессии программирования (10 02 или 10 82 по удс), то контроллер как раз таки прыгает обратно в первичный бут. но он не умеет писать во флеш. пбл может принять по кану вторичный бут и запустить его для дальнейших операций прошивки.
т.е. возможно два сценария
1) нормальная работа модуля. мы запрашиваем сессию программировоания, контроллер прыгает в пбл, мы грузим сбл и далее по процессу
2) основной софт поврежден или стерт. контроллер находится в пбл и ждет загрузки сбл. мы грузим сбл и далее по процессу.
Бывает еще
3) Кс, подписи и ваще все сошлось, но софт из флеша вешает блок и даже вочдоги не спасают.
Но и тут есть вариант — пбл при подаче питания активен некоторое короткое время (от 1 до 3 секунд) и если в этот момент успеть инициировать сессию… Сам так блоки реанимировал не раз) Но это если пбл жив.
Есть, кстати, некоторые блоки у которых SBL нет вообще, есть только PBL
все верно))
да, есть блоки, у которых пбл сам все умеет (блоки двигателя и коробки на фокус2, например), но среди iso14229 модулей мне такие не встречались (на фордах, по крайней мере. возможно, у ЛР/ягуара все интереснее)
6hp28 с бошевским tcm например). IPMA (стереокамера). А самое веселое на флексе вообще)))
civil-zz
Очень понравилась статья, много полезной инфы, все доходчиво, по полочкам. Эх, была бы она написана лет этак семь-восемь назад, сколько времени удалось бы сэкономить :))
Насчет PBL — это не совсем аналог SBL. первичный бут — это именно загрузчик контроллера, он занимается тем, что проверяет записанную во флеш основную прошивку (EXE/DATA или стратегию/калибровку по номенклатуре форда) и, если все хорошо, передает ей управление для дальнейшей загрузки. если же что-то не так (кс или подписи не сошлись), то контроллер остается в первичном бутлоадере. он умеет также работать с кан, как раз для возможности прошивки. когда активен основной софт и прилетает команда активации сессии программирования (10 02 или 10 82 по удс), то контроллер как раз таки прыгает обратно в первичный бут. но он не умеет писать во флеш. пбл может принять по кану вторичный бут и запустить его для дальнейших операций прошивки.
т.е. возможно два сценария
1) нормальная работа модуля. мы запрашиваем сессию программировоания, контроллер прыгает в пбл, мы грузим сбл и далее по процессу
2) основной софт поврежден или стерт. контроллер находится в пбл и ждет загрузки сбл. мы грузим сбл и далее по процессу.
Спасибо, это ценная информация, дополню заметку про PBL, я если честно думал, что SBL загружается из штатной прошивки. С PBL взаимодействовал, когда стер штатную прошивку и снял питание, то через PBL загружал SBL, а когда испортил PBL, то смог восстановить прошивку только через uart
Отличная работа! А с приборкой от 2 реста фрилендера не работал ещё?
Изредка, сейчас потеплело буду пробовать подключать не родную приборку, вместо родной, а не как ранее, как дополнительную
Жду с нетерпением!
много букв! вечерком гляну, спасибо!
огонь! ты наверное один из немногих кто делится информацией! буду стараться на тебя ровняться))))
Спасибо, считаю, что знания полученные и не переданные протухают и пропадают
Многие просто делают на этом деньги )) поэтому и не делятся инфой(((
На самом деле деньги на этом делают очень немногие, вопрос в другом — а нафига?
Время на "поделиться" потрачено, профита нет (фиг бы с ним), зато очень много вопросов и претензий "я сделал вот так, все умерло, это ты виноват, помогай теперь вернутьвзад"