Адаптер для настройки блоков управления Январь и Микас с интерфейсом WIFI и функцией программирования ЭБУ.

Первая попытка создания такого девайса датируется 2011 годом. Тогда в нем применялись довольно дорогие и редкие компоненты tibbo, кроме того связь была довольно нестабильной - и решение это так и не вышло за пределы макетной платы.. Чуть позже было сделано решение не имеющее никаких недостатков, которое я продолжаю использовать - но оно все еще было довольно дорогим и поэтому увы тоже никак не могло стать массовым. И вот сейчас возникла идея как сделать связь с ЭБУ по WIFI на дешевых компонентах. Причем не просто связь для диагностики (такого добра давно навалом) - а именно связь, пригодную пусть с некоторыми ограничениями, но все же для настройки систем. Для того, чтоб решение получилось дешевым и доступным надо придерживаться простых правил. А точнее единственного правила - "не надо изобретать велосипед!". Поэтому самым простым способом реализации задуманного было собрать конструктор из нескольких готовых (из магазина) или уже освоенных у нас в производстве блоков.

В основе нашего адаптера лежит серийный WIFI роутер TP-link TL-MR3020 с кастомной прошивкой, специально собранной для решения задач проброса последовательного порта по сети, этот роутер производится очень давно и стал популярным в проектировании различного рода подобного железа.. Поскольку роутер - нормальное отлаженное серийное изделие, есть надежда, что он будет работать более устойчиво, чем всякие мелкосерийные ардуиноподобные модули, или дорогие, но редко кем используемые компоненты. Роутер имеет на борту WIFI и USB HOST.  При написании прошивки было решено большое количество проблем с поддержкой в linux нестандартных скоростей последовательного интерфейса (таких как 10400), точнее сказать старые кривые костыли были заменены новыми кривыми костылями, чуть более пригодными для решения практических задач диагностики.

В качестве собственно USB K-line адаптера используется наш старый и проверенный USB K-line адаптер в котором несколько изменено программное обеспечение (появилась возможность работы с KLPROG_V4 протоколом и установкой скорости и параметров интерфейса не только лишь штатными средствами предусмотренными в USB_CDC).

Модулем питания служит импульсный понижающий стабилизатор напряжения на базе микросхемы LM2596S работающей на частоте преобразования 150кГц и обеспечивающий ток до 3А. (в реальности столько конечно не нужно) диапазон входных напряжений 7-40вольт. КПД порядка 80%. Греться не должно - радиатор не требуется.

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

Состав конструктора:

1) Роутер TL-MR3020 прошитый для работы в составе моста.

2) USB K-line адаптер c поддержкой KLPROG V4.

3) Модуль питания 5В 3А.

4) Разъем OBD2 (вилка).

5) Кабельный ввод (опционально).

6) Диск с ПО (на фото не показан).

Сборка конструктора.

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

Получив в руки плату роутера выпаиваем разъем обозначенный как USB2. Для этого нам нужен будет отсос для припоя и паяльник на максимальную температуру (в роутере используется безсвинцовый припой). Нам нужно убрать припой с 4-х контактов USB2 разъема и 2-х его опор крепления.

Отпаяв разъем припаиваем вместо него плату K-line адаптера как показано на фото.

 

Теперь займемся модулем питания.. Если модуль имеет на борту синего цвета переменный резистор - его нужно демонтировать и заменить на резистор 1кОм 1% типоразмера 0805 или 0603 (штатное место под 0603 - если у вас 0805 его припаивают между отверстиями ножек переменного резистора). Такие обычно применяются в канале ДТВ "Января "- если что, можно выпаять из ненужного. На части плат такая замена может быть уже произведена - там ничего делать не надо... После замеры подайте на вход стабилизатора 12в и убедитесь, что на выходе присутствует напряжение 5в +-1%. Если это не так - проверьте пайку. Не оставляйте подстроечный резистор - во первых модуль не влезет, во вторых - это лишний элемент ненадежности.

На электролитические конденсаторы модуля питания наденьте кусочки термоусадки, таким образом, чтоб длина свободной части вверху конденсатора была примерно 1мм. Осадите ее феном - это необходимо, чтоб источник питания не замкнул детали на плате роутера.

Подключите выход стабилизатора к плате роутера согласно картинке ниже.

В корпусе роутера проделайте отверстие для кабельного ввода под резьбу М12x1.5. На кабельном вводе прорежьте резьбу плашкой М12x1.5 Закрутите в резьбу кабельный ввод. 

Установите плату в корпус таким образом, чтоб элементы расположились как на фото ниже. Подключите кабель к разъему OBD2 в соответствии с фото ниже. Длина кабеля должна выбираться из соображений размещения роутера выше контура металла в автомобилях. Например, чтоб при необходимости можно было бы подвесить его за что-нибудь к зеркалу заднего вида.

 

Если необходимо использовать функцию "программирования" - (для инженерных блоков), подключите провод подачи сигнала программирования к 13-му пину микросхемы PIC через любой диод Шотки или любой другой с малым падением на переходе..

Финальный монтаж и расположение элементов в корпусе.

По окончании сборки заклейте крышку любым подходящим клеем.

Готовое изделие выглядит так.:

 

Настройка моста.

Роутер в комплекте конструктора уже прошит и полностью настроен и в принципе не требует никаких действий по настройке! После включения питания (подключения разъема OBD) вам необходимо подождать примерно 40 секунд для загрузки прошивки роутера и инициализации всех необходимых переменных. Вы можете подключатся к роутеру или обычным патчкордом (если вдруг это необходимо) или по WIFI используя следующие данные:

SSID: J5ONLINE_BRIDGE

WPA2 пароль: 12345678 (можете сменить в веб интерфейсе).

IP адрес роутера и его веб интерфейса: 192.168.1.1

Login@Password web interface: root@root

Login@Password SSH: root@root

Включен DHCP, поэтому IP вашего адаптера на PC можно или установить из диапазона подсети  (например 192.168.1.20) или выбрать режим автоматического назначения IP.

Не прошивайте роутер никакими левыми или штатными прошивками - все перестанет работать! В роутере используется последняя версия LEDE 17.01 в виде кастом сборки с русифицированным интерфейсом. Настройка ее не сложна и там все интуитивно понятно - и если что то перестало работать, просто сбросьте все настройки в значения по умолчанию.

Для максимальной дальности связи (не рекомендуется в помещениях) можно выбрать Legacy режим работы адаптера (802.11g) и установить максимальную мощность передатчика (68мВ).

Проверка функционирования USB адаптера.

После первой сборки и установки соединения с роутером зайдите в панель управления набрав в браузере адрес 192.168.1.1 и проверьте в логе ядра имеются строчки как на картинке:

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

 

Настройка ПО на PC.

Тут все гораздо сложнее.. Существует три способа работы с нашим адаптером!

1) Проброс K-line порта в RAW режиме - совместимость максимальная, в теории должны работать любые программы, но можно работать только на одной лишь конкретной скорости порта! (например для диагностики это может быть скорость 10400, для комбилоадера старого - 57600, но в любом случае скорость одна). Этот режим обычно очень удобен, поскольку если блок остается на скорости 10400, то он обычно лояльно относится к различным разрывам связи, а увы - разрывы свойственны самой природе этого метода. Кроме того, обычно во всех программах, что мне попадались KWP2000 реализован очень криво, во всех отношениях. 

2) Проброс порта в telnet режиме. В этом случае скорость может меняться и отслеживаться. Однако появляются проблемы с протоколом, из которого необходимо исключать фигурирующие в telnet управляющие последовательности, что не всегда можно сделать на готовом скомпилированном ПО. Поэтому в этом режиме работают далеко не все программы и не обязательно верно.

3) работа по протоколу KLPROG V4. - фактически это частный случай RAW для скорости 115200 однако управление собственно скоростью и настройками порта идет внутри самого k-line адаптера и таким образом, возможно работать на любых скоростях в любых режимах USART- адаптер даже может формировать напряжение программирования, в случае если все это подключено к инженерному блоку и таким образом инженерный блок можно программировать не снимая с машины и не переставляя разъемы. Кроме того подавляется эхо передатчика, что дает некоторое (незначительное) повышение быстродействия и не забивает канал связи ненужной информацией. Подобный метод реализован в комплексе "Матрица" линейки V1.1xxx, и технически так же может быть реализован в любом ПО.

Первый и второй режимы требуют установки на ПК Драйвера виртуального моста создающего 2 виртуальных ком-порта и соединяющего их в мост. При этом к одному порту могут обращаться различные диагностические программы, а к другому софт обеспечивающий проброс порта по сети. Третий режим требует поддержки в ПО (надо выбрать необходимые параметры в вкладке Setup в "Матрице", поэтому больше мы на нем останавливаться не будем).

Создание виртуального моста из 2-х ком портов.

Это необходимо проделать лишь один раз при первой установке софта для PC. Для этого используются драйвера из пакета com2com. Перейдите в директорию com2com в процессоре команд или файловом менеджере и выполните:

setupc.exe install 0 PortName=COM5,EmuBR=yes -

(или !create_pair.bat)

COM5 - это номер виртуального порта который будет создан и к которому вы потом будете подключатся из диагностических программ. Очевидно он должен удовлетворять некоторым условиям:

1) Он должен не быть занятым на ПК. (В случае если порт уже чему то назначен - программа выведет предупреждение).

2) Он должен быть доступен в диапазоне выбора в диагностических программах, которые вы будете использовать. Например какие то программы могут иметь выбор только в пределах COM1-COM4

После запуска этой программы появятся запросы на установку двух драйверов/ Выберите "нет не в этот раз" и "автоматическая установка" и в конечном счете в диспетчере устройств у вас должно появится:

 

 

Проброс виртуального порта на роутер.

Эту операцию в отличие от создания моста вам необходимо делать при каждом запуске ПК или при каждой смене варианта работы 1 и 2. Для этого используется несколько batch файлов в директории программы com2com.

raw_10400.bat - подключаемся в режиме raw на скорости 10400. (raw_xxxxx.bat - соответственно то же самое на скорости xxxxx).

!telnet.bat - подключаемся в telnet режиме (совместимость ограниченна).

Для корректного выхода используйте CTRL^C в окне терминала (если выйти некорректно возможно подвисание связи). 

Особенности работы ПО в отличие от локальных адаптеров.

Обычно при написании софта для диагностики и настройки существует две стратегии:

1) Задачи приемника и передатчика разделены- передатчик посылает пакеты с заданным (100-300мс) интервалом. А приемник принимает все подряд, при этом "эхо" пакеты и битые пакеты откидываются.

2) Используется общая задача приема-передачи. Соответственно в ней последовательно: передается запрос > принимается эхо > принимается ответ. Если на каком то этапе процесс завершился с ошибкой - процедура повторяется 3-5 раз. Если ошибка так же повторяется 3-5 раз считается, что связь потеряна..

Первый метод нормально работает только с железным K-line адаптером на ком порту, с USB уже хуже, а с портом проброшенным по WIFI - очень плохо! Либо приходится использовать слишком завышенные интервалы. Дело в том ,что у нас шина однопроводная и для того, чтоб что-то в нее передавать - нам надо быть уверенным, что ЭБУ в этот момент тоже что-то не передает. Первый метод для этого использует разделение во времени, и таким образом задержки на любом этапе отправки и приема время между отправкой сообщения и приема нового должны гарантироваться, как операционной системой, так и адаптером с ЭБУ и соответственно всеми их компонентами. Пакеты от приемника которые попали "в фазу передачу" приходят битыми - и их количество, в подобном ПО, может принимать просто какие то астрономические значения (иногда больше половины). Особенности нашего адаптера в том что тайминги прохождения пакетов никто не гарантирует даже если нормально все работает. А уж. если имеется фединг (выпадение сигнала связи WIFI) то пакет может прийти вообще, через несколько секунд. При этом связь никуда естественно не денется и пакеты как правило корректно приходят-уходят но с запаздыванием... Суть в том что если KWP в программе реализован по первому методу - то связь в каких то случаях может, как стабильно длится часами, так и так же стабильно вылетать по 2 раза в минуту, в зависимости от вашего движения с ноутбуком и состояния в эфире.

Второй метод более корректен - но в нем могут быть настроены не верно интервалы ожидания (тайминги). И не смотря на то, что пакет корректно послан и принят в цепочке - задача приема может аварийно завершится из за таймаута приема, и таким образом необходима либо подстройка тайминга (в программах, где таймауты заданы слишком малыми) или там где они не настраиваются - изменение параметров передаваемых функции SetCommTimeouts либо в исходных текстах либо непосредственно в коде скомпилированных программ. В этом случае если все настроено правильно - связь как правило стабильна и разрывов практически не бывает, если нет совсем уж явной потери WIFI линка с ноутбуком.

 

Проверенный и рабочий софт.

1) "Матрица". v1.1.xxx  Билды после 03.2018. В файл afrolt.ini добавляем в раздел [MAIN]

REMOTEADR="192.168.1.1"
REMOTEPORT115200=2003
REMOTEPORT10400=2001

Затем в вкладке Setup выбираем протокол адаптера:

- Local:Native - любые старые адаптеры до 2018 года.

- Local:KLPROG_V4 - проверка поддержки нового режима в адаптере USB-K-line и работа по возможности с ним на локальном ком порту, либо на локальном порту проброшенном через com2com. Если адаптер не будет обнаружен - софт переключится в режим local:native.

- Remote:raw_10400 - TCP/IP связь с WIFI адаптером на скорости K-line только 10400 (только для диагностики). 

- Remote:KLPROG_V4 - TCP/IP связь WIFI адаптером с протоколом KLPROG (для диагностики, настройки и программирования блоков).

2) DiagnozNK1.23b - в режиме raw_10400. Однако KWP реализован по первому методу и из за фединга связь может рваться!  В любом случае при нажатии "cвязь" - мгновенное 100% восстановление! 

3) Combiloader2.1.8 - в режиме raw_57600 (кроме функций "диагностика").

4) OpenDiagFree 1.3.8 - в режиме raw_10400 c настройками с картинки ниже. Интервал запроса при этом плавающий в районе 200-240мс.

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

 

Замеры скорости связи в разных режимах.

Все замеры производились в "Матрице". 1-й вариант когда связь идет по проброшенному ком порту. (примерно подобного следует ожидать в программах диагностики при пробросе компорта). 2-й вариат - с сетевыми протоколами непосредственно в самой Матрице без использования какого либо стороннего ПО.

 

Описание протокола KLPROG V1-V4 для реализации в стороннем программном обеспечении.

Для локального USB-k-line инициализация порта 115200,8N1 скорость в процессе работы никогда не меняется! (для гейта запустить raw_115200.bat)

Команда (код) Ответ версия протокола в которой появилась команда  Описание
"0" нет V1 Отключить напряжение программирования Январь-5
"1" нет V1 Включить напряжение программирования Январь-5
"2" нет V1 Отключить напряжение питания ЭБУ (так же отключает приемник K-line)
"3" нет V1 Включить напряжение питания ЭБУ (так же включает приемник K-line)
"6" нет V1 Отключить напряжение программирования Микас-7, Включить напряжение программирования Bosch М7
"7" нет V1 Включить напряжение программирования Микас-7
"8" нет V1 Отключить напряжение программирования Bosch М7
"9" '$',state[24],'@' V1 Запрос состояния устройства. Ответ содержит 24 байта состояния внешних портов процессора (8 копий по 3 байта).
"B",Hi,xx,xx,Lo нет V4 Установка скорости K-line скорость передается 4-мя байтами численным значением 10400=0x28A0 передается как "B",0x00,0x00,0x28,0xA0
"C" нет V4 Отключить приемник K-line.
"D" нет V4 Включить приемник K-line.
"E" нет V1 Включает режим подавления ЭХА K-line (все отправляемые байты не отображаются в виде эха в приемнике)
"Z" нет V1 Выключает режим подавления ЭХА K-Line (все отправляемые байты возвращаются в виде эха)
"M" нет EMP адаптер  Включить пакет передачи ответа статуса при изменении DTR порта.
"N" нет EMP адаптер Выключить передачу пакета ответа статуса при изменении DTR порта.
0xС0+LEN,datablock[LEN] нет V4 Отправляет пакет данных в последовательный порт (K-line). Длинна пакета LEN от 1 до 63. Если необходимо послать больше - посылка разбивается на несколько пакетов по 63 байта.
0x80+LEN,datablock[LEN] нет V4 Отправляет пакет данных в последовательный порт (K-line) в отличие от прошлой команды перед пакетом формируется Slow init pulse. Длинна пакета LEN от 1 до 63. Если необходимо послать больше - посылка разбивается на несколько пакетов по 63 байта.
"V" '$','vers','@' V2  запрос версии устройства. - версия "2" "3" "4".
"K" '$',Hi,xx,xx,Lo,'@' V4 Запрос текущей скорости интерфейса K-line. Ответ в том же формате, что и установка.
без запроса 0xXX[0xXX] V4 Информация принятая по K-line если приемник K-line включен.

Примеры ответов:

[22/03/2018 19:51:30] - Written data   56         "V"
[22/03/2018 19:51:30] - Read data   24 34 40         "$4@"

[22/03/2018 19:51:31] - Written data  4b 

[22/03/2018 19:51:31] - Read data    24 00 00 04 b0 40 

[22/03/2018 19:51:32] - Written data  39 

[22/03/2018 19:51:32] - Read data   24 08 a0 00 08 a0 00 08 a0 00 08 a0 00 08 a0 00 08 a0 00 08 a0 00 08 a0 00 40

Проверка поддержки KLPROG V4:

1) Инициализировать компорт скоростью 115200,8N1

2) Выдать команду отключения приемника K-line "C" (это необходимо, если на шине нет подтяжки и с порта постоянно идет мусор).

3) Подождать 100мс и очистить буфер приема компорта. Выставить таймауты на прием не менее 100мс для USB адаптера и 1-1.5с для сетевого порта. (оптимально - возможность настройки таймаутов)

4) Выдать команду - запрос версии ("V").

5) Дождаться от адаптера ответа в виде "$","vers","@"

Убедится что Vers принимает значения "4" или больше! Если это не так - протокол не поддерживается!

6) Включить приемник K-line командой "D"

Перед подачей любой команды предполагающей наличие ответа от устройства необходимо отключить приемник K-line и сбросить буфер приема компорта, чтоб убедится что поток по K-line не разрывает ответ от устройства. Кроме того контролировать лидирующий ($)и терминирующий (@) символ и длину между ними. Ответ считается корректным лишь в случае, если длина поля данных между лидирующим и терминирующим символом соответствует ожидаемой для этого ответа. В случае неудачи запрос может быть повторен до 3-х раз. По получении ответа либо перед любым запросом KWP подается  команда на включение приемника K-line.

Суть доработки ПО:

1) Изменении процедуры отправки пакетов - каждый пакет предваряется байтом с длинной этого пакета и флагом slow init:

Например пакет Start communication 0x81,0x10,0xF1,0x81,0x03 предваряется байтом 0x85 (Slow init=0x80 + 0x05 bytes data).Т.е. посылается как 0x85,0x81,0x10,0xF1,0x81,0x03. Если slow init не используется (для января например он не обязателен) - можно посылать префикс 0xC0+LEN всегда. 

Пакет Start Diagnostic Sessionn 0x83,0x10,0xF1,0x10,0x81,0x39,0x4E предваряется байтом 0xC7 (no sow init= 0xC0 + 0x07 bytes data). T.е. посылается как 0xC7,0x83,0x10,0xF1,0x10,0x81,0x39,0x4E

Если необходимо отравить более 63 байт - они разбиваются на несколько пакетов и отправляются последовательно с небольшой задержкой (чтоб они оказались в разных пакетах)... 

2) Изменение установки скорости: Вместо непосредственного изменения скорости ком порта посылается команда "B",0x00,0x00,0x28,0xA0 (для переключения на 10400) и тп.. 

3) При инициализации связи необходимо:

3a) Проверить, что поддержка KLPROG_V4 опционально включена в настройках программы. (если нет - обычный режим).

3b) Проверить версию протокола (не ниже "4") (если ниже - обычный режим).

3c) Снять напряжения программирования (выдав набор команд, характерных для выбранного вами блока).

3d) Выбрать режим работы подавителя эха передатчика (с эхом "Z" или без эха "E") в зависимости от настроек ПО 

3e) Включить приемник K-line. (команда "D")

3f) Выбрать скорость 10400 (команда "B",00h,00h,28h,0a0h)

3g) подать команду Start communication... и далее действовать как обычно.

 

Увеличение дальности связи с адаптером по WIFI. 

В поставляемом виде как правило на открытом воздухе возможно достижение дальности метров 100 +- . Если необходимо получить большую дальность, необходимо проделать следующее:

1) Приобретаем и устанавливаем в ноутбук мощную minPCIe карточку (Например Microtic R11E-2HND) или внешний мощный USB адаптер (из серии alfa AWUS).- это делать обязательно т.к. проблемы дальности сначала именно в адаптере ПК а только потом уже в роутере...

2) Заливаем в роутер ART раздел с возможностью увеличения мощности передачи более 18dBm.

3) К процессору роутера на хорошем термоклее приклеиваем радиатор из меди или алюминия для съема излишек тепла. 

Для заливки ART раздела устанавливаем на компьютер PUTTY и WINSCP. Заходим на роутер по SSH (putty) и выполняем:

dd if=/dev/mtd4 of=/tmp/art_backup

Затем соединяемся с роутером через WINSCP и копируем файл /tmp/art_backup на компьютер. Это файл с заводскими настройками WIFI адаптера роутера для восстановления в случае глюков. На роутер же в директорию /tmp заливаем файл art_24db, после чего в putty: выполняем:

mtd -r write /tmp/art_24db art

Роутер перезагрузится. Заходим в настройки WIFI и выбираем режим Legacy, мощность 24dBm. Обязательно после этого контролировать нагрев процессора  в роутере и если температура процессора выше 70 градусов - снижать мощность или увеличивать эффективность съема тепла.

 

 

(с) 2018 Maxi(РПД). Копирование материалов ресурса без разрешения автора запрещено.