82

Помогите разобрать протокол

Возникла необходимость прочитать и имитировать данные, посылаемые датчиком в ЭБУ. Датчик измеряет 4 параметра и шлёт их по шине LIN с нестандартной скоростью в ЭБУ. ЭБУ, в свою очередь, отображает полученные данные в ПО на компе.

Вопрос как считать поток и как вычленить нужные данные я решил. Промерял осциллом единичный бит, посчитал частоту.

Помогите разобрать протокол Электроника, Нужна помощь в ремонте, Arduino

Выяснил, скорость 8000 бод. Считал поток в терминал, вычленил ID отключая разные исполнительные девайсы, висящие на шине. Нашёл нужный мне ID, который давал данные при подключенном датчике, и не давал при отключенном.

Далее написал прошивку, которая отвечает на запрос ЭБУ вместо датчика. В ПО присутствие эмулятора видно (начинают появляться данные), корректность получаемых данных тоже подтверждена. Формат пакета стандартный LIN: синхра(0х55), ID (в моём случае 47), 4 байта данных, контрольная сумма один байт. Если просчитатся с контролькой и отправить некорректную, то датчик в ПО отваливается. Отсюда-данные передаются и воспринимаются ЭБУ и ПО корректно.

И вот тут затык. Из 4 байтов данных два средних байта не влияют на данные, отображаемые ПО. А малейшее изменение первого и последнего меняют три параметра, отображаемые ПО, один параметр постоянно болтается в ноле. На него 1 и 4 байт не влияют.

Как такое может быть? Как четырьмя тетрадами можно закодировать минимум три трёхзначных параметра, два с дробной частью до десятых и два до сотых? Четвёртый параметр тоже шевелится посредством реального датчика, но этот снимок я не сделал.

Провёл несколько экспериментов, полученные данные свёл в таблицу. Жёлтый столбик данные датчика, зелёный отображаемые в ПО.

Помогите разобрать протокол Электроника, Нужна помощь в ремонте, Arduino

TECHNO BROTHER

2K пост13.5K подписчика

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

А что за датчик, если не секрет? И что он, собственно, измеряет? А то по представленной табличке, лично я пока что могу только предположить, что датчик тупо шлет показания четырех каналов 8-битного АЦП. А все формулы и/или таблицы пересчета в параметры забиты в ЭБУ.

раскрыть ветку (14)
1
Автор поста оценил этот комментарий
Две температуры и два давления. Изменение ОДНОГО числа в ответе меняет ТРИ ПАРАМЕТРА в ПО
раскрыть ветку (13)
3
Автор поста оценил этот комментарий

Это потому, что "одно число в ответе" вовсе не число, а набор бит.

Маркировки на датчике нету ?  В даташите будет проще посмотреть.

Скорее всего их таких датчиков всего несколько штук доступно разных. И лучше бы их даташиты в любом случае глянуть. Там обычно все друг у друга передирают по возможности

раскрыть ветку (12)
1
Автор поста оценил этот комментарий

Собственно датчик это набор сенсоров, два давления и два термистора, всё это сходится в какую-то затёртую микруху, скорее всего МК, и она уже по LIN отдаёт данные в ЭБУ. На термисторы даташит ясен, давление тоже, выдают 0-5 вольт в зависимости от давления. МК может оказаться любым, но это и не суть важно, потому что в МК главное не железо, а прошивка.

раскрыть ветку (11)
1
Автор поста оценил этот комментарий

Зачем все это ?  Хотите импортозаместить сборку датчики-мк ?   Погуглите, это может оказаться не МК, а прям готовый ic для температуры-давления итп, который можно купить...

Что-нибудь по типу мах18855 или как там его, который в состоянии с термопары давать наружу уже оцифрованную температуру, имеет на борту усилитель, АЦП, градусник для холодного конца, таблицы для расчёта итд итп.

Как-то сомнительно, что люди аж свой МК ставили и сами все это делали. Очень это чревато, дорого и геморно.

Протокол штука такая. Чтобы импортозаместить надёжно вам боюсь понадобится все варианты проверить.

Иначе потом окажется, что в случае обрыва оно выдает температуру -128 как ds18b20...

раскрыть ветку (10)
3
Автор поста оценил этот комментарий

в общем не секрет, зачем. С датчиком всё отлично, его импортозамещать не требуется. Проблема в неисправном ЭБУ. Чтоб его починить, надо его запустить, а чтоб его запустить на столе, надо собрать всё, что ему нужно в реале. Можно, конечно, тупо дуть в датчик двумя давлениями, и ЭБУ запустится, но тащить домой компрессор и вакуумный насос желания нет. Ресивера, опять же можно, да. Была идея, что проще сколбасить имитацию датчика.

раскрыть ветку (9)
3
Автор поста оценил этот комментарий

Так а с имитацией в чем проблема ?

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

Но яб "надул" давлением, это быстро, просто и надёжно. Вместо двух компрессоров скорее всего два шприца можно использовать, хотя, конечно от давления зависит.

Но вообще, скорее всего ещё проще будет мимо датчика подать нужное на вход контроллера, датчик поди напряжение даёт....

2
Автор поста оценил этот комментарий
У вас датчик от разницы давления даёт разное напряжение ведь. Так дайте ему то самое напряжение, вся имитация. Или вы именно битами дать в шину хотите? Читаю и впитываю ответы в вашей ветке) очень интересно, правда нифига не понятно) с Lin шинами не сталкивался, только кан пока)
раскрыть ветку (7)
1
Автор поста оценил этот комментарий

именно так, изначальная идея состояла в том, чтоб имитировать голыми данными по шине. Тут в камментах уже предложили ваше решение, подменить сенсоры в датчике на делитель напряжения и тем самым заместить давление. Отличная идея, только для этого надо расковырять физически датчик, а это стоит нормально денег и не масштабируется, ограничено количеством "донорских" датчиков. Если не смогу разобрать протокол, то так и сделаю, под это дело надыбал уже два неисправных датчика.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

уже два неисправных датчика.

расковыряйте и узнайте какая микросхема map там находится, потому что судя по поиску в интернете map сенсоров с lin интерфейсом нет. по маркировке можно будет узнать положение бит которые выбирают какой параметр передается. например https://www.infineon.com/dgdl/Infineon-KP253-DS-v01_01-EN.pd... стр12 Command Definition (как видно у него spi, в датчике еще находится мост spi lin)
другой пример https://www.nxp.com/docs/en/data-sheet/FXPS7115D4.pdf

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Да, расковырял. UJA1023T/2R04/C
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

UJA1023T/2R04/C

это lin трансивер, он пустой - конфигурация задается при включении, со стороны ecu,
он подключается либо к микросхеме цифрового map сенсора либо к отдельным аналоговым сенсорам
https://www.nxp.com/docs/en/data-sheet/UJA1023.pdf

1
Автор поста оценил этот комментарий
Сорямба, а датчики что, не разъёмом крепятся что ли? У меня в башке все просто. Берём разъём, находим ноги дата шины и фигачим туда напругу. Как ещё то датчики заменить? Или у вас датчик со своим хвостом проводов что ли? Как тогда соединение с цбу происходит?
раскрыть ветку (2)
1
Автор поста оценил этот комментарий

датчик на 4 пина, три сенсора внутри(два давления один температура), один сенсор внешний. Пин питалова, пин земля, пин LIN и пин на внешний сенсор (термистор). 4 сенсора в одном корпусе, наружу торчит только LIN

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Ясно. Этот гад аналоговые сигналы в дискретные перерабатывает на борту. Вот собака) тогда да, либо разбирать датчик либо писать программу самостоятельно. Тут я уже не ноль, а минус один. Удачи)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку