Всепротокольный obd ii allpro адаптер схема на pic18f2550

Обновлено: 05.07.2024

Эта статья не руководство к действию хакеров, это подсказка, как правильно используя предоставленные MICROCHIP инструменты защитить прошивку внутри чипа.

Не помню уже сколько лет назад это было, натолкнулся я на статью "Heart of darkness - exploring the uncharted backwaters of hid iСlass security by Milosch Meriac". Суть статьи в проблемах безопасности iCLASS card. В общем-то я по быстренькому стал "пробегать" статью, пока не натолкнулся на: "Copy Protection? You’re kidding me!". И меня "скрючило от восторга". а чё так можно было.

Пардон, ничего не понятно, сейчас объясню.

Не помню какой PIC тогда был под рукой, сейчас есть PIC18F26K20.

Суть уязвимости.

Запускаем PICKIT и попутно открываем даташит по программированию PIC18F*K*.


Смотрим, зеленым биты защиты EEPROM, красным - биты защиты BOOT блока, синим - биты защиты кода, блоки 0-3.

CPB/WRTB, CP[3:0]/WRT[3:0] - защита от чтения/записи кода, сперва BOOT затем блоки с 0-3.

CPD/WRTD - Защита от чтения/записи EEP данных.

А вот самые интересные биты защиты: EBTRB/EBTR[3:0] - защита от чтения секторов из других блоков.

Смотрим на конфигурацию "защищенного" чипа (защита установлена):


Смотрим на конфигурацию, - всё защищено!


Ноль по вдоль! Всё защищено!

И вроде проблем нет.

А они есть, читаем в даташите:


Написано, - "Биты защиты можно записать только из 1 в 0, наоборот нельзя, чтобы записать в бит защиты 1 нужно стереть все блоки или блок соотв. биту защиты чтобы установить соотв. бит защиты в 1". И опа, оно!

Стираем BOOT блок, записываем в него свой код, который будет для нас читать прошивку и отдавать её по EUSART.


Да, но МЫ ПОТЕРЯЛИ ТО ЧТО БЫЛО В BOOT блоке, и тут появляется тема "ДАЙТЕ ДВЕ", берем второй чип с такой же прошивкой и проделываем то же самое только например с блоком 0, причем код помещаем в самый конец блока, всё остальное заполняем NOP'ами, чтобы с определенной вероятностью наш код начался не "с середины". Вот так:


Затем склеиваем блоки в любом HEX редакторе, и вуаля! Прошивка на руках.


Код есть, вытаскиваем EEP. Точно так же:


Выглядит довольно просто. Однако проверим так ли это на самом деле.

Первая задача, как затереть сектор. Читаем даташит:


Стереть весь чип: 0x3F8F, BOOT: 0x0084, Block0: 0x0180.

Только вот вопрос чем тереть то?

Берем PICKIT3 (а он "из коробки" трет весь чип, нам не подходит):


Ни для кого не секрет что исходный код этого программатора открыт. Идем на Microchip и качаем исходники прошивки (PICkit3 Programmer Application v3.10).

Изучаем исходники. понимаем что это провал, внутри программатора интерпретатор команд, ага, значит сами команды в исходном коде приложения PIC KIT Programmer.

Изучаем исходники (они в том же архиве). понимаем что и тут интерпретатор. Да чтож такое. А команды то где?

А они заботливо сложены в базе данных PK2DeviceFile.dat

Запускаем PicKit2 Editor и находим имя скрипта стирания нашего чипа:


Переходим в скрипты, находим наш, и правим соотв (0x3F8F -> 0x0084).


Правим 0x3F на 0x00, а 0x8F на 0x84. Теперь при нажатии на кнопку ERASE, PicKit Programmer будет стирать не весь чип, а только BOOT блок.

Так, как стереть поняли.

Теперь код ридера, предлагается использовать стандартный интерфейс EUSART установленный в чипе, будем читать код из памяти и отдавать его по EUASRT, подключим его к любому конвертеру интерфейсов RS232->USB (убедившись что конвертер соотв. напряжению питания чипа). Смотрим опять в даташит:



Всё мы готовы. Напишем код ридера:

Компилируем и получаем:

:020000040000FA :10000000926A936A946A300ED36E9B6AA06AA16A60 :10001000FF0EA26EF29EAB8E190EAF6E240EAC6E6A :10002000006A016A026A00C0F6FF01C0F7FF02C061 :10003000F8FF0900F5CFADFF002A02E3014A022ACA :10004000ACA2FED70400005005E1015003E10250CC :0C005000010A01E0E8D70400FED712000E :020000040030CA :03000100081D0FC8 :02000500018177 :0600080000C00FE00F40F4 :00000001FF

Записываем в чип и видим что байтики поехали:


Далее если действовать по описанному выше алгоритму получаем всю прошивку целиком.

В общем то и всё. Время для резюме.

Применимость уязвимости:

EBTRB/EBTR[3:0] - защита от чтения секторов из других блоков не установлена.

У вас есть два идентичных многостраничных PIC18 чипа с идентичными прошивками.

Как защититься от уязвимости:

EBTRB/EBTR[3:0] - устанавливать защиту от чтения секторов или хотя бы одного сектора, таким образом получить доступ к "чистой прошивке" будет затруднительно.

Однако необходимо помнить, - если вы устанавливаете защиту чтения из других блоков, Вам необходимо убедиться что данные для одного блока компилятор не будет собирать в другом! А он так может.


2 года

В данной теме рассматривается диагностический адаптер на базе микросхемы ELM327 (а также ELM327-совместимые адаптеры на микросхемах STN11xx и др.), подключаемый к диагностическому разъему OBD-II, и программное обеспечение для диагностики, конфигурирования и прошивки модулей Ford Focus 2.
Настоятельно рекомендуется прочитать шапку темы и мини-FAQ перед тем как задать очередной вопрос. Возможно на него уже дан ответ ранее. Просьба не засорять тему.
На данный момент существует несколько версий адаптера. Самая распространенная - в пластиковом корпусе с интерфейсом USB:


Как видно, практически все версии адаптера в основном выглядят одинаково. Но возможны и другие варианты исполнения.

Версии прошивки микросхемы ELM327 также существуют различные. На данный момент последняя официальная версия - 1.4. У китайских копий, так называемая 1.5, но она основана на более ранних, каких именно неизвестно. Известно лишь, что функционал примерно соответствует оригиналу.
Ещё (кстати, даже Яндексом и Гуглом не нашёл) остаётся открытым вопрос о том, будет ли работать чип версии 1.2 (до сих пор встречаются в продаже динозавры-адаптеры, где в описании указана эта версия, хотя реально скорее просто устаревшее описание).

Возможности адаптера:
Адаптер ELM327 является современным и удобным инструментом для проведения диагностики автомобиля при помощи персонального компьютера. Поддерживаются все протоколы OBD-II и огромное количество специализированных диагностических программ.
Более подробную информацию можно найти тут
От себя хотелось бы добавить, что возможности ELM несколько больше, чем описано в разных источниках. С его помощью можно конфигурировать/прошивать модули автомобиля при наличии соответствующих программ.


На втором фокусе есть две CAN-шины: высокоскоростная и среднескоростная. По умолчанию ELM327 работает только с высокоскоростной. Без переделки можно получить доступ только к некоторым модулям. От выбора шины не зависят функции, которые вы планируете делать (прошивать, конфигурировать, диагностировать).

1. Модуль ABS/ESP (BCM),
2. Модуль управления двигателем (PCM),
3. Модуль автоматической коробки передач (TCM),
4. Приборная панель (HEC)
5. Модуль ЭГУР (EHPAS),
6. Модуль адаптива/автокорректора (HCM).

1. Модуль GEM
2. Модуль подушек безопасности (RCM)
3. Климат-контроль (EATC)
4. Передние дверные модули (DDM, PDM) на дорестайлах также задние дверные модули (RDDM, RPDM)
5. Предпусковой подогреватель (AHCM)
6. Парктроник (PAM)
7. Магнитола (ACM)
8. Модуль Bluetooth (SRM)

Для подключения к среднескоростной CAN-шине необходимо модернизировать адаптер.
Доработка адаптера ELM327

Совет от BlackGoga: "покупая адаптер - не бегите сломя голову его перепаивать. Сначала проверьте как работает с авто в исходном варианте, чтобы потом не думать "Кто виноват и что делать""

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

Для диагностики существует огромное множество программ, работающих с нашим адаптером.

Для ОС Windows:
1. FORScan
2. ScanMasterELM
3. Digimoto
4. obd1260
5. PCMScan
6. proscan
7. VitalScan

Для ОС Android:
1. Torque Pro
2. Torque Lite
3. OBD Авто Доктор
4. Forscan Lite
5. FFConfigLite

Для iOS:
1. Связка Jailbreak + RoqyBT4 + Dashcommand + Elm327 bluetooth
2. Forscan Lite


Все версии программ ELMConfig и ELM-FF2 ниже под катом

Тема по программам и адаптерам для Ford Focus III: Программы и приборы для диагностики и прошивки

Тема с дружественного форума по программке ELM-FFN , для работы с Ford Fusion тут


Архив (2014)

ELM, ELM327, диагностика, диагностический адаптер, диагностический разъем, конфигурация


16 июня 2019

по многочисленным просьбам.
программа для ELM327 версий 1.2-1.4, в том числе китайских клонов.
Работает только на высокой шине фокус/смах, взамен не требует доработок адаптера. Вычитывает количество ошибок, коды дтс, их статус. умеет запускать самотестирование модуля, и стирать ошибки. проверялось на хр,win7
генерирует вот такой лог

Начало сеанса:15.02.2011 19.40.11
Идентификационный номер автомобиля FORD (VIN): WF0HXXWPDH9L***
Пробег автомобиля (km): 39151,6
Защита иммобилайзера от изменения ключей активна.
количество ключей к автомобилю:02
Напряжение на диагностическом разъеме: 11.5V

-- Удаление ошибок модулей на CAN-HI(500 Kbaud) --

Модуль управления двигателем
Номер сборочного элемента: 7M52-12A750-SE(2404)
Серийный номер элемента: YLKZ-WTAN-P9VY
Состояние модуля после самопроверки:
Количество ошибок модуля: 0
Ошибки модуля:
отсутствуют
Удаление ошибок модуля.
Количество повторно прочитанных ошибок: 0
Текущие ошибки модуля:
отсутствуют

Электронный щиток приборов
номер сборочного элемента: 8V4T-10549-EF(0805)
серийный номер элемента: KTV7-0QPS-5100
Номер модуля по каталогу: 8V4T-14C236-AB
Имя файла программы модуля: 8V4T-14C035-AA
Состояние модуля после самопроверки:
Количество ошибок модуля: 0
Ошибки модуля:
отсутствуют
Удаление ошибок модуля.
Количество повторно прочитанных ошибок: 0
Текущие ошибки модуля:
отсутствуют

Модуль АБС/ модуль ЕСП
Номер сборочного элемента: 8M51-2C325-AA(0000)
Серийный номер элемента: --
Состояние модуля после самопроверки:
Количество ошибок модуля: 0
Ошибки модуля:
отсутствуют
Удаление ошибок модуля.
Количество повторно прочитанных ошибок: 0
Текущие ошибки модуля:
отсутствуют

Модуль управления автоматической коробкой передач
Ответ не получен.

Модуль LCM газорязрядных фар/динамического переднего освещения
Ответ не получен.

-- диагностика на шине CAN-HI(500 Kbaud) завершена --

🖐️

Ссылка не активна, у кого есть рабочий файл, сообщите модераторам


16 июня 2019


Раз уж пошла такая пьянка -- выложу и я свою софтинку, что-ли.

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

Можно также делать дамп данных из всех известных программе модулей, можно перезагружать модули. Дамп данных должен быть совместим с программой коллеги vitasku, по идее.

В принципе, всё, что она умеет -- описано в XML-файле, соответственно, при нахождении новых опций их можно тупо прописывать в конфиге и работать с ними.

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


Обновил ELM-FF2

Основное изменение - появилась Диагностика
Расшифровку прикручивать не стал, т.к. уже есть например бесплатная программка наших клубней ТУТ (ближе к концу страницы), да и часто google рулит.

Также исправил ЭТОТ недочет и еще один нашел сам - если КС получалась меньше 0х10, например "0F", то в конец строки добавлялась "F", а не "0F".

Пользуйтесь на здоровье, как всегда жду предложений/замечаний.

З.Ы. Постараюсь в ближайшее время хэлп дописать


12 янв аря 2019


Roman_199
Хоть вопрос и не мне, но выскажусь. или по крайней мере постараюсь ответить на некоторые вопросы.

Список функций изменения конфигурации модуля GEM.
1.Авто включение подогревов на рестайле
2.Дистанционное управление
3.Охранная сигнализация
4.Фонари приближения к автомобилю
5.Внутреннее сканирование
6.Отопитель PTC
7.Дополнительный обогреватель на топливе
8.Круизконтроль
9.С люком крыши с электроприводом или таксометром
10.Обогрев лобового стекла
11.Функция автономного включения стеклоочистителя
12.Задний стеклоочиститель
13.Центральный замок
14.Функция работы стеклоподъемника в одно касание
15.Автозапирание
16.Противоугонная сирена с автономным АКБ
17.Электрический стояночный тормоз EPB
18.Дистанционный вход без помощи ключа
19.Мигание поворотников 1-е нажатие
20.2-е нажатие
21.Двойная блокировка
22.Омыватель фары
23.Отмена функции сканирования салона, выполняемая клиентом
24.Фары HID
25.Автоматическое включение света фар
26.Датчик окружающей температуры
27.0=3двери; 1=5дверей
28.Отпирание в 2 этапа

Список функций изменения конфигурации модуля IC (Instrument Cluster)
1.ABS
2.Электрический гидроусилитель руля. Используется на двигателях 1,8 и 2,0
3.Электрический стояночный тормоз.
4.Система электронной курсовой стабилизации ESP.
5.Мгновенный расход топлива.
6.Голосовое управление.
7.Система контроля давления в шинах.
8.Круизконтроль.
9.Система тягового усилия.
10.Датчик омывающей жидкости.
11.Реальные показания температуры.
12.Время отображаемое на дисплее щитка приборов.
13.Отображение информации о радиостанциях и новостей системы цифрового оповещения. RDS
14.Отображение информации на дисплее щитка приборов о включении системы HANDS FREE. При наличии модуля Bluetooth.
15.Мгновенный расход на литр.
16. Предпусковой подогреватель.

Остальное можно менять по мере до установки, например если Вы захотите себе что-то поставить.

CAN (Controlled Area Network) протокол разработан Robert Bosch в 1983 году и окончательно стандартизирован в ISO 11898. Использование CAN шины данных в автомобиле позволяет различным устройствам общаться друг с другом, минуя центральный процессор, так называемый multi-master режим. Плюсами является также повышенная скорость передачи, до 1 Мбит/с и лучшая помехоустойчивость. Изначально протокол предназначался для использования в автомобилях, но теперь применяется и в других областях. Чтобы повысить надежность передачи данных, в шинах CAN применяется способ дифференциальной передачи сигналов по двум проводам. Образующие эту пару провода называются CAN_High и CAN_Low. В исходном состоянии шины на обоих проводах поддерживается постоянное напряжение на определенном базовом уровне, приблизительно 2.5 В, называемым рецессивным состоянием. При переходе в активное (доминантное) состояние напряжение на проводе CAN_High повышается, а на проводе CAN_Low снижается, рис.1.

Всепротокольный OBD-2 AIIpro адаптер своими руками

Поддерживает ли ваш автомобиль OBD-II?
OBD является обязательным только в Северной Америке и Европе. Если в Америке это правило действует с 1996 года, то Евросоюз принял EOBD вариант автодиагностики, основанный на OBD-II, сравнительно недавно. В Европе OBD стал обязательным, начиная с 2001 года, а для дизельных двигателей даже с 2004. Если ваш автомобиль выпущен до 2001 года, то он может вообще не поддерживать OBD даже при наличии соответствующего разъема. Например, Renault Kangoo 99 года не поддерживает EOBD (хотя редакционная Kangoo dcI60 2004 года с CAN протоколом прошла успешную стыковку с описанным адаптером, а Renault Twingo поддерживает! Те же самые автомобили, сделанные для других рынков, например Турции, могут тоже не быть совместимыми с OBD протоколом. Как определить, какой протокол поддерживается электронным блоком управления автомобиля?

Первое — можно поискать информацию в интернете, хотя там много неточной и непроверенной информации. К тому же, многие автомобили выпускаются для разных рынков с различными протоколами диагностики. Второй более надежный способ — найти разъем и посмотреть, какие контакты в нем присутствуют. Разъем обычно находится под приборной панелью со стороны водителя. Протокол ISO 914-2 или ISO 14230-4 определяется наличием контакта 7, как показано в таблице 1.



AllPro адаптер на PIC18F2455
Схема моего всепротокольного OBD-II адаптера показана на рис.2. Основой является микроконтроллер Microchip PIC18F2455, имеющий модуль USB интерфейса. Устройство использует напряжение питания 5 В от шины USB. Конденсатор C6 служит фильтром внутреннего стабилизатора 3.3 В для обеспечения работы USB шины. Светодиоды D2 и D3 являются индикаторами приема/передачи, а светодиод D1 использован для контроля статуса USB шины. Выход ISO 9141/14230 интерфейса управляется половинкой драйвера IC2-2, а входной сигнал подается через делитель R12/R13 на вход RX (вывод 18), который является триггером Шмидта, как и большинство входов PIC18F2455, что обеспечивает достаточно надежное срабатывание. Для контроля L-линии используется IC3-1 и R10. Шина J1850 VPW требует напряжения питания 8 В, получаемого от стабилизатора L78L08 IC4. Сигнал на выход VPW подается через инвертор IC3-2 и буферный полевой транзистор Q1. Делитель R7/R8 и внутренний триггер Шмидта на входе RA1 составляют входной интерфейс J1850 PWM протокола. Внутренний компаратор (входы RA0 и RA3) PIC18F2455 вместе с резисторами R4, R5 выделяет дифференциальный сигнал PWM. Для контроля выхода PWM шины используются IC2-1 и полевой транзистор Q2.

Отдельно хочется сказать по поводу поддержки CAN. Microchip не выпускает контроллеры, содержащие и CAN, и USB. Можно использовать контроллер с CAN модулем и внешний USB чип типа FT232R. Или наоборот, подключить внешний CAN контроллер, как сделано в этом адаптере. CAN интерфейс здесь образуют контроллер MCP2515 (IC5) и трансивер MPC2551 (IC6). MCP2515 подключен через SPI шину к PIC18F2455 и программируется каждый раз при подаче питания адаптера. Согласующие (bus termination) RC цепочки R14/ C10 и R15/C11 предназначены для уменьшения отражений на CAN шине согласно стандарту ISO 15765-4. Использование их не обязательно, при относительно коротком кабеле отражениями можно пренебречь. Вместо PIC18F2455 можно использовать PIC18F2550 с той же самой прошивкой, см. варианты замены в таблице 2.


Внешний вид устройства показан на рис.3 и обложке, а печатная плата на рис.4.



Для программирования PIC18 можно использовать несложный JDM программатор [3], схема показана на рис.5.


Он очень прост и может бы собран за час на макетной плате. Недостатком является то, что программатор требует наличия последовательного (Com) интерфейса в компьютере и не работает с виртуальными USB/Com адаптерами. Использование ноутбуков также не рекомендуется, так как они не обеспечивают необходимого напряжения на выходе Com порта.




Подключение и тестирование устройства. Правильно собранный адаптер в налаживании не нуждается и распознается Windows как USB устройство. Микропроцессор PIC18F2455 не имеет собственного драйвера и использует Windows 2000/XP/Vista CDC (Communication Device Class ) драйвер usbser.sys виртуального Com порта.



Прохождение проверяется по следующим цепям:

• IC2-1, R4 для отрицательной шины PWM
• Q2, D6, R5 для положительной шины PWM
• IC3-2, IC4, R11, Q1, D5, R7, R8 для VPW
• IC2-2, R9, R12, R13 для ISO 9141/14230
• Ответ контроллера MCP2515 по шине SPI

Например, отсутствие IC2 приведет сразу к двум ошибкам, рис.9.


Процедура самодиагностики не включает проверку CAN трансивера MCP2551, здесь можно просто замерить напряжение на выводах 6 и 7. Оно должно быть в пределах 2.5 В.

USB HID осциллограф на PIC18F2550

Гуляя по просторам интернета, наткнулся на одном англоязычном ресурсе на интересную разработку - USB HID осциллограф на PIC18F2550.

В связи с исчезновением COM и LPT портов из современных компьютеров радиолюбители приспосабливаются к работе с USB, который активно используется разработчиками аппаратного обеспечения для PC. При разработке USB устройства существует трудность – написание драйвера разрабатываемого USB устройства для операционной системы компьютера. Это требует специальных знаний, времени и программного обеспечения. Выходом из данной ситуации может быть создание USB-устройств класса HID (Human Interface Device — устройство взаимодействия человека с компьютером), драйверы для которых имеются в операционной системе. При этом достаточно просто сконфигурировать разрабатываемое устройство так, что бы оно воспринималось компьютером как HID устройство.
Рассматриваемый в данной статье осциллограф воспринимается системой как USB HID устройство и не требует установки дополнительных драйверов.

Принципиальная схема осциллографа показана ниже:

Аналоговый вход подключен к выводу RA0 микроконтроллера, который сконфигурирован на аналоговый ввод. Через резистор R1 напряжение питания попадает на сброс микроконтроллера. Конденсатор C1 – необходим для внутреннего стабилизатора напряжение для USB порта.

Микроконтроллер работает на частоте 48МГц от внутреннего PLL. Автор использует модернизированный загрузчик Tiny PIC Bootloader, который позволяет загружать прошивку в микроконтроллер на скорости 115,200 бод применяя в схеме кварцевый резонатор на 20МГц.

Для загрузки или обновления прошивки микроконтроллера через предлагаемый автором загрузчик, USART выводы микроконтроллера должны быть подключены к преобразователю уровней RS-232.

Программирование микроконтроллера

Программирование контроллера проходит в два этапа:

1. При изготовлении устройства, с помощью программатора необходимо загрузить в микроконтроллер загрузчик SAC_tinybld18F2550usb _20MHz_115200_48MHz.hex, который позволит потом перепрошивать микроконтроллер прямо в схеме, при подключенном питании.

2. Собранное устройство подключить к USB и используя Tiny PIC Bootloader загрузить в микроконтроллер прошивку USB осциллографа - 18F2550 USB HID CRC Oscilloscope.hex.
После загрузки прошивки загрузчик должен автоматически перезагрузить микроконтроллер. Осциллограф готов к работе.

Читайте также: