Итак продолжаю предыдущую тему.
www.drive2.ru/l/608974411722151982/
Сегодн я поделюсь информацией по поводу обмена информацией по Lin шине между гейтом и блоками руля.
Впринципе каждый может снять эту информацию подключившись к лин шине. Для этого достаточно Lin-ttl и Ttl-USB адапта и терминальной программы работающей с виртуальными COM портами на ПК.
Итак, стоит заглянуть в стандарт Lin 2.0 или почитать краткую выдержку microtechnics.ru/protokol…or-opisanie-format-kadra/
Я сделаю еще более краткую выдержку.
1. Передачу данных начинает только мастер. Первым пакетом всегда идет Break — 11 байт последовательно со значениями 0. Потом идет 55. Потом идет ID Slave устройства. так все устройства в сети понимают что идет запрос от мастера.
2.Все Slave устройства могут только отвечать на запросы мастера, если увидят в запросе свой ID. Длина ответа зависит от ID и может быть 2,4,8 байт. Последний байт это Check sum, который включает ID и все переданные байты.
3. Мастер также может передавать данные.
Как следствие. Нажатия кнопок на руле не провоцируют передачу данных. Мастер просто запрашивает статус нажатых кнопок и Slave ему отвечает. Просто опрос происходить каждые десятки милисекунд.
По просыпанию гейта (по открытию ЦЗ), или по включению зажигания ACC он начинает шарашить пакетами:
000001 18:32:59.238 80
000002 18:32:59.270 00 55 8E 10 00 00 00 A3 00 00 00 BD
000003 18:32:59.275 00 55 CF
000004 18:32:59.287 00 55 BA 46 FE 00
000005 18:32:59.290 00 55 8B
000006 18:32:59.300 00 55 8E 11 00 00 00 A3 00 00 00 BC
000007 18:32:59.307 00 55 CF
000008 18:32:59.320 00 55 73 64 80 04 6B 00 00 00 00 38 .
000009 18:32:59.330 00 55 8E 12 00 00 00 A3 00 00 00 BB
000010 18:32:59.335 00 55 CF
000011 18:32:59.348 00 55 0D 00 80 64 60 AD
000012 18:32:59.360 00 55 8E 13 00 00 00 A3 00 00 00 BA
000013 18:32:59.365 00 55 CF
000014 18:32:59.380 00 55 11 3D 00 FE FE FE 0E 00 00 A6
000001 18:32:59.238 80 — Это сигнал для того чтобы все LIN устройства проснулись.
стоит заметить что следующая посылка идет с достаточно длительной задержкой 32мили секунды.
000002 18:32:59.270 00 55 8E 10 00 00 00 A3 00 00 00 BD Первые три байта посылает гейт, остальные 8 — ответ блока кнопок.
Назначение байтов по порядку.
00 и 55 объсянил выше.
8E — адрес кнопок,
10 — счетчик,
00 — адрес нажатой 1-ой кнопки,
00 — адрес нажатой 2-ой кнопки,
Вот нажатие этих кнопочек и нужно мониторить, и делать подмену на нужные мне.
00 — длительность нажатия 1-ой кнопки (00 — не нажата, 01 однократное, 04 многократное, 06 длительное)
A3 — тип руля. A — 10е исполнение руля, 3 — Skoda,
00 — длительность нажатия 1-ой кнопки
00 — статус нажатия подрулевых лепестков
00 — не знаю
BD — Check sum
000003 18:32:59.275 00 55 CF — окончание запроса статуса кнопок руля.
000004 18:32:59.287 00 55 BA 46 FE 00 — запрос статуса датчика температуры, и ответ.
BA — адрес датчика температуры.
46 — температура. в десятичной системе это будет 70, т.е. 20С отсчет температуры идет от -50С. Т.е. 00 это -50С.
FE — статус подогрева руля. FE — подогрев не работает, FF — подогрев работает.
00 — контрольная сумма.
000005 18:32:59.290 00 55 8B окончание запроса температуры руля
000006 18:32:59.300 00 55 8E 11 00 00 00 A3 00 00 00 BC — опять опрос кнопок руля. как видно счетчик увеличелся на 1. и стал 11.
000007 18:32:59.307 00 55 CF
000008 18:32:59.320 00 55 73 64 80 04 6B 00 00 00 00 38 — Адрес 73. С этой посылкой не разбирался. ее полностью шлет Гейт.
000009 18:32:59.330 00 55 8E 12 00 00 00 A3 00 00 00 BB — опять кнопки руля.
000010 18:32:59.335 00 55 CF
000011 18:32:59.348 00 55 0D 00 80 64 60 AD -Адрес 0D. посылку шлет гейт. Статус зажигания и включенной подсветки салона.
000012 18:32:59.360 00 55 8E 13 00 00 00 A3 00 00 00 BA — опять кнопки руля.
000013 18:32:59.365 00 55 CF
000014 18:32:59.380 00 55 11 3D 00 FE FE FE 0E 00 00 A6 — опрос сенсорного руля.
11 — адрес
3D 00 — назначение не знаю, меняется в каждой посылке.
FE — Степень прикасания к левой половине руля снаружи.
FE — Степень прикасания к внутренней окружности руля
FE — Степень прикасания к правой половине руля снаружи.
Рассмотрим три вышеуказанных байта подробнее. Если к рулю прикасаться только с наружной стороны, значения отличные от 0 будут только в первом или третьем байте и система считает, что руль охватывается слабо.
Если руль обжать хорошо рукой, то значения отличные от 00 будут в первом и втором или третьем и втором байтах. система будет считать что руль обхватывается хорошо одной рукой. Если держать двумя руками то значения будут в 1 и 2 и 3 байтах.
0E — назначение не знаю в процессе работы принимает значения 00, 07, 0A.
00 — не используется
00 — не используется
A6 — контрольная сумма.
Дальше опросы идут циклично с той же последовательностью:
000015 18:32:59.390 00 55 8E 14 00 00 00 A3 00 00 00 B9
000016 18:32:59.395 00 55 CF
000017 18:32:59.407 00 55 BA 44 FE 02
000018 18:32:59.410 00 55 8B
000019 18:32:59.420 00 55 8E 15 00 00 00 A3 00 00 00 B8
000020 18:32:59.425 00 55 CF .UI
000021 18:32:59.440 00 55 73 64 80 04 6B 00 00 00 00 38
000022 18:32:59.450 00 55 8E 16 00 00 00 A3 00 00 00 B7
000023 18:32:59.455 00 55 CF
000024 18:32:59.468 00 55 0D 00 80 64 60 AD
000025 18:32:59.480 00 55 8E 17 00 00 00 A3 00 00 00 B6
000026 18:32:59.485 00 55 CF
000027 18:32:59.500 00 55 11 48 01 FE FE FE 0E 00 00 9A
А вот так выглядят посылки в момент выключения зажигания
000102 18:33:00.189 00 55 0D 00 80 64 60 AD
000103 18:33:00.201 00 55 8E 1F 00 00 00 A3 00 00 00 AE
000104 18:33:00.206 00 55 CF
000105 18:33:00.221 00 55 11 FE 07 00 00 00 00 00 00 E8
000106 18:33:00.231 00 55 8E 10 00 00 00 A3 00 00 00 BD
000107 18:33:00.236 00 55 CF
000108 18:33:00.248 00 55 BA 3F FE 07
000109 18:33:00.251 00 55 8B
000110 18:33:00.261 00 55 8E 11 00 00 00 A3 00 00 00 BC
000111 18:33:00.266 00 55 CF
000112 18:33:00.281 00 55 73 64 81 04 6D 00 00 00 00 35
000113 18:33:00.291 00 55 8E 02 00 00 00 A3 00 00 00 CB
000114 18:33:00.296 00 55 CF
000115 18:33:00.309 00 55 0D 64 81 64 40 68
А вот так выглядят посылки в момент выключения зажигания
006065 18:33:55.324 00 55 0D 64 81 64 40 68
006066 18:33:55.336 00 55 8E 17 00 00 00 A3 00 00 00 B6
006067 18:33:55.341 00 55 CF
006068 18:33:55.355 00 55 11 77 0D 00 00 00 00 00 00 6A
006069 18:33:55.366 00 55 8E 18 00 00 00 A3 00 00 00 B5
006070 18:33:55.371 00 55 CF
006071 18:33:55.382 00 55 BA 3B FE 0B
006072 18:33:55.386 00 55 8B
006073 18:33:55.396 00 55 8E 19 00 00 00 A3 00 00 00 B4
006074 18:33:55.401 00 55 CF
006075 18:33:55.415 00 55 73 64 81 0C 65 32 00 00 00 03
006076 18:33:55.426 00 55 8E 1A 00 00 00 A3 00 00 00 B3
006077 18:33:55.431 00 55 CF
006078 18:33:55.443 00 55 0D 64 80 64 40 69
006079 18:33:55.456 00 55 8E 3B 00 00 00 A3 00 00 00 92
006080 18:33:55.461 00 55 CF
006081 18:33:55.475 00 55 11 61 0E 00 00 00 00 00 00 7F
006082 18:33:55.486 00 55 8E 3C 00 00 00 A3 00 00 00 91
006083 18:33:55.491 00 55 CF
006084 18:33:55.502 00 55 BA 3B FE 0B
006085 18:33:55.506 00 55 8B
006086 18:33:55.516 00 55 8E 3D 00 00 00 A3 00 00 00 90
006087 18:33:55.521 00 55 CF
006088 18:33:55.536 00 55 73 64 80 0C 65 32 00 00 00 04
006089 18:33:55.546 00 55 8E 3E 00 00 00 A3 00 00 00 8F
006090 18:33:55.551 00 55 CF
006091 18:33:55.564 00 55 0D 00 80 64 40 CD
А вот так выглядят последние посылки перед уходом гейта в сон
006211 18:33:56.675 00 55 11 6D 08 00 00 00 00 00 00 79
006212 18:33:56.686 00 55 8E 34 00 00 00 A3 00 00 00 99
006213 18:33:56.690 00 55 CF
006214 18:33:56.702 00 55 BA 3B FE 0B
006215 18:33:56.705 00 55 8B
006216 18:33:56.716 00 55 8E 35 00 00 00 A3 00 00 00 98
006217 18:33:56.720 00 55 CF
006218 18:33:56.735 00 55 73 64 80 0C 67 00 00 00 00 34
006219 18:33:56.746 00 55 8E 36 00 00 00 A3 00 00 00 97
006220 18:33:56.750 00 55 CF
006221 18:33:56.763 00 55 0D 00 80 64 40 CD
006222 18:33:56.776 00 55 8E 37 00 00 00 A3 00 00 00 96
006223 18:33:56.785 00 55 3C 00 FF FF FF FF FF FF FF 00
А теперь немного сравним посылки
000102 18:33:00.189 00 55 0D 00 80 64 60 AD — включена клема 15 она же ACC
000115 18:33:00.309 00 55 0D 64 81 64 40 68 — двигатель заведен
006065 18:33:55.324 00 55 0D 64 81 64 40 68 — двигатель заведен
006078 18:33:55.443 00 55 0D 64 80 64 40 69 — двигатель глушится
006091 18:33:55.564 00 55 0D 00 80 64 40 CD — Двигатель выключен
006221 18:33:56.763 00 55 0D 00 80 64 40 CD — после выключения зажигания, гейт отослал еще 130 запросов, и прошло еще 1.2 секунды.
В итоге, питание всех Slave постоянное, после выключения зажигания, гейт еще выполняет обмен данными.
Соответственно при разработке Lin Bridge нужно учитывать, что питание постоянное и вводить процессор в сон, чтобы он не потреблял лишний ток.
Ну и последняя команда гейта по адресу 3С, всем спать
006223 18:33:56.785 00 55 3C 00 FF FF FF FF FF FF FF 00
Чем я и займусь, учитывая текущее время.