Перейти к публикации
Lada-forum.ru
IronTony

Вопрос по K-Line (ЭБУ VS 5.1 R83)

Рекомендованные сообщения

Уважаемые знатоки-диагносты! Заностальгировал и прикупил 21099i 2004г.в., полностью заводская, ЭБУ не тронут в плане прошивок. Ковыряюсь в машине периодически в свободное время и на этот раз заинтересовала меня тема самостоятельной диагностики через K-Line адаптер, подключаемый к ЭБУ. Набросал схемку на оптронах, чтобы ни ноут не попалить ни ЭБУ, собрал, скачал программку OpenDiagFree для теста, все хорошо, заработало с первого раза. И подумал я пойти дальше и поглубже разобраться с системой команд ЭБУ, какие вообще параметры можно прочитать, как ошибки опрашивать/сбрасывать и все такое.. Возможно дело кончится самодельным БК, который будет в человекочитаемом формате предоставлять данные, и большой дорогущий VFD-дисплей futaba классный под это дело у меня есть и валяется без дела уже не помню какой год :) Так вот, обрадовавшись работоспособности своего адаптера я решил накидать программку, которая сама на компе будет мне показывать все данные. Но дело заступорилось уже вторые сутки на самом начале - не получается у меня выдать правильную инициализацию для ЭБУ по линии K-Line, причем перепробовал по моему мнению все возможные варианты, большую часть из которых можно было сразу отмести, если бы я сразу не поленился подключить осциллограф и глянуть посылки, которые шлет OpenDiagFree. Так вот, по стандарту мой адаптер должен перед началом обмена данными разбудить ЭБУ и выдать ему пакет StartCommunication Service. Будить ЭБУ нужно по следующему алгоритму: выдерживаем паузу на линии (лог. "1") не менее 100 мс, затем притягиваем линию к 0 строго на 25 мс, затем отпускаем линию (лог. "1") снова строго на 25 мс и сразу же отправляем пакет StartCommunication Service. После пробуждения и получения пакета ЭБУ должен ответить определенным пакетом, что он готов к сеансу связи (перешел в диагностический режим типа). Я все это сделал программно, причем по рекомендациям из сети поставил задержку Tidle не 100 мс, а целых 300 мс (да и больше пробовал). Импульс WakeUp делаю на скорости 200 бод отправкой байта 0xF0, по осциллографу ловлю этот импульс триггером, всё четко. Далее сразу без задержки шлю пакет StartCommunication Service 0x81 0x10 0xF1 0x81 0x03 на скорости 10400 бод. Молчит ЭБУ, как партизан. Осциллографом перепроверял все несметное количесво раз, подстраивал задержки +/- 1...5мс, в общем перепробовал все варианты, даже написал алгоритм, который сканирует K-линию на разных скоростях и ждет ответные пакеты от ЭБУ. Мой сканнер в итоге выдает мне, что на скоростях 9900 бод и 11000 бод есть ответы от ЭБУ, но битые, т.е. есть в начале пакетов заветные 0x83 0xF1 0x10 ..., а дальше полная чушь явно из-за неверной скорости. Лирическое отступление - я почему-то сразу решил сложить эти две сокрости, на которых есть хоть какие-то ответы и поделить на 2, в итоге среднее арифметическое получается (9900 + 11000) / 2 = 10450 - это прям те самые 10400 бод, только я пока не понял как это может быть связано с неправильностью моего софта... В общем дальше запускаю OpenDiagFree и без ЭБУ, но с подключенным к настольному блоку питания 12В адаптером запускаю диагностику и одновременно смотрю, что выдает OpenDiagFree в линию. Единственное отличие от сигналов моего софта, которое я сразу подметил - это то, что OpenDiagFree явно не соблюдает жесткость в плане формирования лог. "1" на 25 мс в импульсе WakeUp. OpenDiagFree также делает паузу Tidle 350 мс перед импульсом, далее ровно на 25 мс выдает лог. "0", а следом выдает лог. "1" но всего на 13 мс, которые еще и плавают плюс минус 2 мс, затем идет ровно такой же пакет StartCommunication Service, как и у меня! Думаю, ладно, OpenDiagFree работает через мой адаптер с ЭБУ без каких-либо проблем, поэтому буду верить не стандарту, а именно создателям OpenDiagFree. Я сделал ровно такой же импульс WakeUp (25 мс "0", 13 мс "1" - пробовал не только 0xF0 на скорости 200 бод слать с обрывом передачи раньше времени, но и 0xE0 на сокрости 240 бод - в обоих случаях удается достичь нужный результат), затем сохранил снимок с экрана осциллографа сигналов и OpenDiagFree и моего софта - снимки как идеальные близнецы, ни одного отличия я не нашел, все совпадает с большой точностью чуть ли не до микросекунды. Радостно снова побежал в гараж, благо он прям под боком. Молчит ЭБУ в ответ на посылку моего софта, при этом с OpenDiagFree работает без каких либо проблем! Мозг начал искрить (мой, не ЭБУ) и пошел тупо подключать осциллограф и гонять сигналы от OpenDiagFree пока не увижу хоть какое-то отличие. И я таки его нашел. У меня осциилограф был настроен на отлавливание лог. "0" длительностью более 20 мс, ну чтоб красиво видеть начало инициализации и поэтому триггер осциллографа не всегда давал возможность увидеть ДОПОЛНИТЕЛЬНЫЙ пакет пакет StartCommunication Service, который OpenDiagFree зачем-то шлет до того, как начать эту самую "быструю" инициализацию с WakeUp'ом. Я обрадовался, потому как я сразу был уверен в том, что русские инженеры АвтоВАЗа могли не соблюсти требования стандартного протокола и "забили" на WakeUp-импульс. Т.е. я предположил, что ЭБУ и без этого начального импульса может принять пакет StartCommunication Service и ответить взаимностью. Я сделал ровно также, как сделано в OpenDiagFree - выжидаю паузу около 500 мс, затем шлю пакет StartCommunication Service, затем снова жду 500 мс, а уж потом делаю 10 попыток инициализации с WakeUp-импульсом в начале. Данный алгоритм судя оп осциллографу в точности повторяет алгоритм начальной инициализации OpenDiagFree с блоком VS 5.1 R83 Итэлма. Побежал снова в гараж и снова молчит сволочь. Я четко вижу совпадение своей последовательности импульсов и последовательности OpenDiagFree. Они одинаковые 100%, но раз OpenDiagFree работает с моим адаптером, то в моем софте что-то упущено. Помогите увидеть путь, который я не вижу! :) Заранее благодарен

Изменено пользователем IronTony

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может кому пригодится в ЭБУ Итэлма VS 5.1 инженеры автоваза/итэлмы откровенно забили на WakeUp импульс перед посылкой StartCommunication Service, при этом вероятно, что формирование данного импульса наоборот препятствует восприятию ЭБУ пакета StartCommunication Service. Эта посылка отправляется без всякой задержки после импульса пробуждения (так и должно быть по стандарту протокола), получается указанный ЭБУ воспринимает импульс пробуждения как некую ошибочную посылку, после которой должен пройти Tidle. В общем указанный ЭБУ отвечает на пакет StartCommunication Service сразу без всяких пробуждений. Тема закрыта.

Изменено пользователем IronTony

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот еще вопрос, чтобы новую тему не создавать. Я так понимаю, что нет смысла периодически направлять моему старенькому ЭБУ Итэлма VS 5.1 пакет testerPresent (81 10 F1 3E C0), чтобы поддерживать связь во время длительных пауз в работе? Я попробовал - мой ЭБУ не отвечает на такие запросы, хотя вроде должен присылать в ответ 81 F1 10 7E 00

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

×
×
  • Создать...