MultiMFA - Дневники - Passat WORLD - Volkswagen Passat-CLUB
RSS лента

maksstranger

MultiMFA

Оценить эту запись
Цитата Сообщение от autopilot Посмотреть сообщение
Нашел описалово своё по 3LB. Исходников нет под рукой, да они и не нужны, т.к. все на ассемблере пика и разобраться с ними будет не так просто.

Итак:

3LB - описание (почти по взрослому )

1. Physical layer.

Передача данных осуществляется по 3-м линиям (Data, Clock, Enable).Рабочее напряжение на линиях 5В.
Линии Data и Clock однонаправленные, управление линиями осуществляет мастер устройство. Линии по умолчанию имеют высокий уровень.
На линиях Data и Clock используется отрицательная логика, т.е. логической единице соответствует низкий уровень на линии, логическому нулю соответствует высокий уровень на линии.
Линия Enable двунаправленная, мастер устройство инициирует передачу, слэйв устройство подтверждает прием и готовность получения следующей порции данных. Линия по умолчанию имеет низкий уровень.
Инициация передачи и подтверждение осуществляется высоким уровнем на линии.

Пример подключения из схемы магнитолы Gamma (производитель Sony):

Название: _3lb_schematic.jpg
Просмотров: 158

Размер: 77.8 Кб


Пример передачи данных на шине:

Название: _3lb_diag.jpg
Просмотров: 122

Размер: 18.9 Кб

Скорость передачи до ~125-130кГц.
На шине есть мастер и слэйв устройства. Приборная панель всегда выступает в качестве слэйв.
Передача осуществляется пакетами. Размер пакета зависит от передаваемых данных (см.часть 2).

Мастер устройство перед началом передачи смотрит наличие на линии Enable низкого уровня сигнала.
Наличие высокого уровня говорит о том, что линия занята или слэйв устройство не может в настоящий момент принять данные.

Мастер устройство устанавливает линию Enable в высокий уровень и начинает передачу первого байта посылки.
Очередной бит данных с линии считывается при переходе сигнала Clock из высокого уровня в низкий (из логического нуля в единицу).
После передачи первого байта мастер устанавливает на линии Enable низкий уровень и ждет когда слэйв устройство "поднимет" линию Enable сообщая тем самым о готовности принять следующий байт.
Приняв очередной байт слэйв устройство "опускает" линию Enable, а мастер устройство ждет когда линия Enable "поднимется" снова для передачи следующего байта.
Таким образом Мастер управляет линией Enable только при передаче первого байта каждого пакета, а далее только контроллирует наличие на ней высокого уровня говорящего о готовности приема слэйвом.
В случае если слэйв не поднял линию Enable для приема следующего байта в течении ~150-200us, необходимо начинать передачу пакета заново выждав не менее 3-4ms.
Не поднятие слэйвом линии Enable может так же означать, что слэйв обнаружил ошибку в передаваемых данных и не готов продолжить прием.

Есть еще один вариант передачи данных при котором мастер поднимает линию Enable перед началом передачи и опускает только после завершения передачи всего пакета.
При этом необходимо делать паузы между байтами примерно 80-100us. А так же делать паузу не менее 4-5ms между пакетами, особенно если пакеты идут непрерывно.
К сожалению при таком режиме нет возможности контроллировать переданные данные. Слэйв может просто не принять пакет, а мастер об этом не узнает.



2. Data Link layer.

На линии 3LB возможно два режима работы:

а) линия работает в режиме "Радио". В этом режиме есть возможность передавать данные только в верхнюю часть экрана.
Этот режим приминительно к Пассату установлен если в приборной панели в кодировке отсутствует кодирование режима навигации (+16 к первым двум цифрам кодировки).

Формат посылки в режиме "Радио":
F0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0F

где:

F0 ----> фиксированный заголовок посылки

20 ----> 16 байт ASCII данных (2 строки по 8 символов в каждой)

0F ----> контрольная сумма

Контрольная сумма это инверсия суммы всех байт в посылке.
CRC = 0;
CRC = CRC + BYTE(n);
CRC = NOT CRC;


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

Формат посылки в режиме "Навигация":
-> ID
-> Size
-> Data 0
-> ...
-> Data n
-> CRC

где:
ID ----> Заголовок посылки
Size ----> Размер посылки (не включая заголовок и сам байт с размером)
Data 0 - Data n ----> Данные
CRC ----> Контрольная сумма

Контрольная сумма это XOR всех байт в посылке (начиная с ID) минус 1.
CRC = 0;
CRC = CRC ^ BYTE(n);
CRC = CRC - 1;


Возможны следующие посылки:

--------------------------------------------------------------------
| Вывод в верхнюю часть экрана (две строки по восемь символов) |
--------------------------------------------------------------------

Вывод данных в верхнюю часть экрана доступен без дополнительных инициализаций, если экран работает в обычном режиме.

Формат посылки:

81 CN F0 bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb xx

где:

81 ----> ID

CN ----> Количество байт (0x12)

F0 ----> фиксированный идентификатор

bb ----> ASCII данные (16 байт)

xx ----> контрольная сумма


--------------------------
| Инициализация экрана |
--------------------------

Инициализация необходима для перехода в графический режим работы и для возможности вывода данных в любую точку экрана.
После инициализации необходимо постоянно отправлять данные.
Если перерыв между пакетами данных будет больше ~3-4секунд, приборная панель автоматически перейдет в стандартный режим.


Формат посылки:

53 CN CM X1 Y1 X2 Y2 xx

где:

53 ----> ID

CN ----> Количество байт

CM ----> команда инициализации
0x80,0x81 - инициализация экрана без очистки
0x82 - инициализация экрана с очисткой, позитивный экран
0x83 - инициализация экрана с очисткой, негативный экран

X1 ----> стартовая Х координата (не может быть больше конечной Х координаты)

Y1 ----> стартовая Y координата (не может быть больше конечной Y координаты)

X2 ----> конечная X координата (не может быть меньше начальной Х координаты и больше 64)

Y2 ----> конечная Y координата (не может быть меньше начальной Y координаты)

xx ----> контрольная сумма

Инициализация возможна частями:
Для инициализации только средней части экрана: 0х00, 0x1B, 0x40, 0x30 (64х48)
Для инициализации всего экрана: 0х00, 0x00, 0x40, 0x58 (64х88) - размер по высоте указывать кратный восьми

Для перехода из графического режима в стандартный необходимо отправить посылку инициализации с координатами (0,0) (1,1)


----------------
| Вывод текста |
----------------

Текст выводится только после инициализации и только в инициализированную область экрана.

Формат посылки:

56 CN СС ХХ YY bb bb bb bb bb bb xx

где:

56 ----> ID

CN ----> Количество байт

CC ----> параметры шрифта (см. ниже):

XX ----> стартовая Х координата вывода

YY ----> стартовая Y координата вывода

bb ----> ASCII данные (кол-во может быть разным, допустимые символы см.ниже)

xx ----> контрольная сумма


Параметры шрифта:

bit 0 -
0 = негатив
1 = позитив
bit 1 -
0 = выводить как XOR с областью вывода
1 = нормальный вывод (область вывода полностью затирается текстом)
bit 2 -
0 = обычный шрифт
1 = сжатый шрифт
bit 3 -
0 = без спецсимволов
1 = спецсимволы
bit 5 -
0 = выравнивание по левому краю
1 = выравнивание по центру

например:
0x00 - стандартный шрифт, негатив, выровнен по левому краю
0x01 - стандартный шрифт, позитив, выровнен по левому краю
0x04 - сжатый шрифт, негатив, выровнен по левому краю
0x05 - сжатый шрифт, позитив, выровнен по левому краю
0x08 - спецсимволы, негатив, выровнен по левому краю
0x09 - спецсимволы, позитив, выровнен по левому краю
0x20 - стандартный шрифт, негатив, выровнен по центру
0x21 - стандартный шрифт, позитив, выровнен по центру
0x24 - сжатый шрифт, негатив, выровнен по центру
0x25 - сжатый шрифт, позитив, выровнен по центру
0x28 - спецсимволы, позитив, выровнен по центру
0x29 - спецсимволы, негатив, выровнен по центру


стандартный шрифт - вмещается ~10,5 символов, высота 7 пикселей
сжатый шрифт - вмещается ~14,5 символов, высота 7 пикселей



Допустимые символы:

Русского естественно нет.
буквы только в верхнем регистре, в нижнем регистре символы вместо букв

символы в стандартном шрифте:
----------------------------------

a - умляут
b - верхняя кавычка одинарная
c - точка жирная
d - нижняя кавычка одинарная
e - пусто
f - нижнее подчеркивание
g - стрелка вниз
h - пусто
i - стрелка вправо (закрашенная)
j - градус
k - пусто
l - пусто
m - звездочка
n - стрелка вправо
o - пусто
p - стрелка вправо (закрашенная)
q - перевернутый восклицательный знак
r - пусто
s - пусто
t - пусто
u - пусто
v - пусто
w - пусто
x - пусто
y - пусто
z - пусто

0x18 - стрелка вверх (с хвостиком)
0х19 - стрелка вниз (с хвостиком)
0х1А - стрелка вправо (с хвостиком)
0х1В - стрелка влево (с хвостиком)

0х1E - стрелка вверх (закрашенная)
0х1F - стрелка вниз (закрашенная)

символы в сжатом шрифте:
----------------------------------

a - умляут
b - маленькая точка
c - точка жирная
d - пусто
e - пусто
f - нижнее подчеркивание
g - пусто
h - тире
i - стрелка вправо (закрашенная)
j - тупая стрелка вправо
k - пусто
l - пусто
m - звездочка
n - стрелка вправо
o - решетка (пиксель через пиксель)
p - крупная решетка
q - перевернутый восклицательный знак
r - пусто
s - пусто
t - пусто
u - пусто
v - пусто
w - пусто
x - пусто
y - пусто
z - пусто


------------------
| Вывод графики |
------------------

Вывод доступен только после инициализации экрана и только в инициализированную область.

Формат посылки:

55 CN UU X1 Y1 bb bb bb bb bb bb bb bb xx

где:

55 ----> ID

CN ----> Количество байт

UU ---->
bit 0 -
1 = выводить как XOR с областью вывода
bit 1 -
1 = выводить стандартно

X1 ----> стартовая Х координата вывода

Y1 ----> стартовая Y координата вывода

bb ----> байты данных. При установленном бите пиксель загорается, один бит=один пиксель.
Минимальный размер данных 1 байт, т.е. 8 пикселей. Заполнение идет по горизонтали.

xx ----> контрольная сумма



----------------------------------------------------------------------------------------------
Возможны неточности в описании. Описан тот вариант при котором мне удалось выводить данные на приборную панель.
При этом у меня к сожалению не было возможности отмониторить реальные данные с родных устройств VW, т.к. этих самых устройств в наличии у меня нет.
Так что as is.
Если у кого есть что добавить/поправить буду только рад.
Категории
Без категории

Комментарии