Protokół komunikacji radia/navi z FIS

Gotowe opisy różnych podzespołów aut, także nasze porady.

Moderatorzy: Moderatorzy, VIP

Awatar użytkownika
Królik88
Użytkownik
Użytkownik
Posty: 257
Rejestracja: czw kwie 05, 2007 08:00
Lokalizacja: Warszawa
Kontakt:

Protokół komunikacji radia/navi z FIS

Post autor: Królik88 » czw wrz 22, 2016 07:43

Znaleziony opis 3LB VW/Skody. Stworzony na rosyjskim forum. "Autopilot" z passatword.ru opracowywał go bez jakiegokolwiek opisu, na podstawie własnych doświadczeń i kodów assemblera.

Zatem:

3LB - Opis (praktycznie kompletny)

1. Warstwa fizyczna.

Dane przesyłane są po trzyliniowej magistrali (Data, Clock, Enable). Napięcie referencyjne wynosi 5V.
Zarówno Data jak Clock są jednokierunkowe, linie są sterowane przez mastera (radio lub navi - przyp. tłum.). Domyślnym poziomem jest stan wysoki.
Na liniach Data i Clock obowiązuje logika ujemna, t.j. stan niski reprezentowany jest poziomem 5V natomiast stan wysoki to 0V.
Linia Enable jest dwukierunkowa, master stanem niskim rozpoczyna transmisję, slave informuje o gotowości do przyjęcia następnych danych. Domyślny poziom na linii to stan niski.
Inicjalizacja transmisji oraz potwierdzenie odbierania danych odbywa się przez podniesienie linii do stanu wysokiego.

Przykładowy schemat bufora nadawczego z radioodbiornika Gamma (produkcji Sony):

Obrazek


Przykładowy przebieg transmisji:

Obrazek

Prędkość transmisji to ~ 125-130kHz.
Do magistrali mogą być podpięte jednocześnie jedynie dwa urządzenia. Zegary zawsze są slave.
Transfer danych odbywa się w pakietach. Rozmiar pakietu zależny jest od przesyłanych danych (patrz część 2).

Przed transmisją, master sprawdza czy stan linii Enable jest niski.
Wysoki poziom oznaczałby, że magistrala jest zajęta albo slave nie jest gotowy do odebrania danych.

Master ustawia wysoki poziom linii Enable i rozpoczyna transmisję pierwszego bajtu paczki.
Odczyt danych la na linii Data odbywa się na opadającym zboczu linii Clock (przejście z logicznego zera do jedynki).
Po zakończeniu transmisji pierwszego bajtu master opuszcza Enable i czeka aż slave podniesie linię informując, że jest gotowy na przyjęcie kolejnego bajtu.
Po kolejnym bajcie slave opuszcza Enable i podnosi znowu, gdy będzie gotowy na odebranie danych.
Master kontroluje linię Enable tylko podczas przesyłania pierwszego bajtu, potem jedynie odczytuje jego stan.
Jeśli po kolejnym bajcie slave nie podniesie linii po ok ~150-200us, należy rozpocząć transmisje pakietu po ok. 3-4ms.
Nie podniesienie linii Enable może oznaczać błąd w transmisji lub błędną paczkę i brak gotowości do dalszego odbioru pakietu.


Istnieje możliwość podniesienia przez mastera linii Enable i opuszczenia dopiero po zakończeniu transmisji całej paczki.
Należy wtedy robić przerwy między bajtami po 80-100us. A także pauzy 4-5ms między paczkami, jeśli wysyłane są jedna po drugiej.
Nie ma jednak możliwości kontrolowania co się dzieje podczas przesyłania danych. Slave może odrzucić paczkę, a master nie będzie o tym wiedzieć.



2. Warstwa danych.

3LB posiada dwa tryby pracy:

a) Tryb "Radia". W tym trybie można sterować tylko dwie górne linie wyświetlacza.
Ten tryb można wykorzystywać jeśli zegary nie są zakodowane na obsługę nawigacji.

Format paczki w trybie "Radia":
F0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0F

Gdzie:

F0 ----> stały nagłówek

20 ----> 16 bajtów ASCII (2 linie po 8 znaków każda)

0F ----> suma kontrolna

Suma kontrolna jest odwrotnością sumy wszystkich pozostałych bajtów w paczce.
CRC = 0;
CRC = CRC + BYTE(n);
CRC = NOT CRC;



b) Tryb "Nawigacji". W tym trybie można sterować całym wyświetlaczem.

Format paczki w trybie "Nawigacji":
-> ID
-> Size
-> Data 0
-> ...
-> Data n
-> CRC

Gdzie:
ID ----> Nagłówek paczki
Size ----> Wielkość danych (bez nagłówka)
Data 0 - Data n ----> Dane
CRC ----> Suma kontrolna

Suma kontrolna to XOR wszystkich bajtów w paczce (łącznie z ID) minus 1.
CRC = 0;
CRC = CRC ^ BYTE(n);
CRC = CRC - 1;

Znane są następujące wariantu wysyłania danych:

--------------------------------------------------------------------
| Wyświetlanie dwóch górnych linii (dwa rzędy po 8 znaków) |
--------------------------------------------------------------------

Wyświetlanie danych w tym wariancie nie wymaga żadnej dodatkowej inicjalizacji, jeśli ekran pracuje normalnie.

Format danych:

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

Gdzie:

81 ----> ID

CN ----> Liczba bajtów (0x12)

F0 ----> Stały nagłówek

bb ----> Dane ASCII (16 bajtów)

xx ----> Suma kontrolna


--------------------------
| Inicjalizacja wyświetlacza w trybie graficznym |
--------------------------

Inicjalizacja jest niezbędna by przejść do trybu graficznego i móc pisać po całym ekranie.
Po inicjalizacji należy wysyłać pakiety w trybie ciągłym.
Jeśli interwał między paczkami będzie większy niż ~3-4sekundy, zegary automatycznie przywrócą standardowy tryb pracy.


Format danych:

53 CN CM X1 Y1 X2 Y2 xx

Gdzie:

53 ----> ID

CN ----> Liczba bajtów

CM ----> Komenda inicjalizacji:
0x80,0x81 - inicjalizacja ekranu bez czyszczenia
0x82 - inicjalizacja ekranu z czyszczeniem, wyświetlanie positive
0x83 - inicjalizacja ekranu z czyszczeniem, wyświetlanie negative

X1 ----> Początkowa wartość współrzędnej X (Nie może być większa niż największa współrzędna X)

Y1 ----> Początkowa wartość współrzędnej Y (Nie może być większa niż największa współrzędna Y)

X2 ----> Końcowa wartość współrzędnej X (Nie może być mniejsza niż początkowa współrzędna X i większa jak 64)

Y2 ----> Końcowa wartość współrzędnej Y (Nie może być mniejsza niż początkowa współrzędna Y i większa jak 88)

xx ----> Suma kontrolna

Możliwe warianty inicjalizacji:
Tylko środkowa część wyświetlacza: 0x00, 0x1B, 0x40, 0x30 (64x48)
Cały wyświetlacz: 0x00, 0x00, 0x40, 0x58 (64x88) - wysokość zwiększać jako mnożnik 8

Aby wrócić do standardowego wariantu wyświetlania należy wysłać (0,0) (1,1)

----------------
| Wyświetlanie tekstu |
----------------

Tekst może być wyświetlany tylko po inicjacji trybu graficznego i tylko na zainicjalizowanej części wyświetlacza.

Format danych:

56 CN CC XX YY bb bb bb bb bb bb xx

Gdzie:

56 ----> ID

CN ----> Liczba bajtów

CC ----> parametry czcionki (patrz niżej):

XX ----> Początkowa wartość współrzędnej X

YY ----> Początkowa wartość współrzędnej y

bb ----> Dane ASCII (wartości mogą się różnić, patrz niżej dostępne numery)

xx ----> Suma kontrolna


Ustawienia czcionki:

bit 0 -
0 = negatyw
1 = pozytyw
bit 1 -
0 = wświetlaj jako XOR z obszarem docelowym
1 = wyświetlanie normalne (poprzedni tekst jest zamazywany)
bit 2 -
0 = normalna czcionka
1 = wąska czcionka
bit 3 -
0 = bez znaków specjalnych
1 = znaki specjalne
bit 5 -
0 = wyrównanie do lewej
1 = tekst wyśrodkowany

Przykłady:
0x00 - standardowa czcionka, negatyw, wyrównanie do lewej
0x01 - standardowa czcionka, pozytyw, wyrównanie do lewej
0x04 - wąska czcionka, negatyw, wyrównanie do lewej
0x05 - wąska czcionka, pozytyw, wyrównanie do lewej
0x08 - znaki specjalne, negatyw, wyrównanie do lewej
0x09 - znaki specjalne, pozytyw, wyrównanie do lewej
0x20 - standardowa czcionka, negatyw, wyśrodkowany
0x21 - standardowa czcionka, pozytyw, wyśrodkowany
0x24 - wąska czcionka, negatyw, wyśrodkowany
0x25 - wąska czcionka, pozytyw, wyśrodkowany
0x28 - znaki specjalne, pozytyw, wyśrodkowany
0x29 - znaki specjalne, negatyw, wyśrodkowany


standardowa czcionka ~10,5 znaków na linię, wysokość 7 pikseli
wąska czcionka ~10,5 znaków na linię, wysokość 7 pikseli

Dostępne znaki:

Cyrylica oczywiście nie. (Pewnie polskie znaki też nie. - przyp. tłum.)
Tylko wielkie litery, zamiast małych liter występują znaki specjalne.

Znaki specjalne w standardowej czcionce:

----------------------------------

a - umlaut
b - apostrof
c - duża kropka
d - przecinek
e - pusty
f - podkreślenie
g - strzałka w dół
h - pusty
i - strzałka w prawo
j - stopień
k - pusty
l - pusty
m - gwiazdka
n - strzałka w prawo
o - pusty
p - strzałka w prawo
q - odwrócony wykrzyknik
r - pusty
s - pusty
t - pusty
u - pusty
v - pusty
w - pusty
x - pusty
y - pusty
z - pusty

0x18 - strzałka w górę
0x19 - strzałka w dół
0h1A - strzałka w prawo
0h1V - strzałka w lewo

0h1E - strzałka w górę
0h1F - strzałka w dół

znaki specjalne w wąskiej czcionce:
----------------------------------

a - umlaut
b - mała kropka
c - duża kropka
d - pusty
e - pusty
f - podkreślenie
g - pusty
h - daszek
i - strzałka w prawo
j - strzałka w prawo
k - pusty
l - pusty
m - gwiazdka
n - strzałka w prawo
o - hash
p - duży hash
q - odwrócony wykrzyknik
r - pusty
s - pusty
t - pusty
u - pusty
v - pusty
w - pusty
x - pusty
y - pusty
z - pusty


------------------
| Wyświetlanie grafiki |
------------------

Grafika może być wyświetlana tylko po inicjacji trybu graficznego i tylko na zainicjalizowanej części wyświetlacza.

Format danych:

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

Gdzie:

55 ----> ID

CN ----> liczba bajtów

UU ---->
bit 0 -
1 = wyświetlaj jako XOR z obszarem docelowym
bit 1 -
1 = wyświetlanie normalne

X1 ----> Początkowa wartość współrzędnej X

Y1 ----> Początkowa wartość współrzędnej Y

bb ----> Bajty danych. Ustawienie bitu wypełnia piksel, jeden bit=jeden piksel.
Minimalna ilość danych to 1 bajt, tj. 8 pikseli. Wypełnienie jest horyzontalne.

--------------------------------------------------
W opisie mogą być nieścisłości. Wykorzystanie protokołu z opisu pozwala jednak na wyświetlenie danych na zegarach.
Autor w chwili kończenia opisu nie miał już żadnych zegarów VW/Skody na stanie, więc nie mógł nic uściślić. Zatem jest jak jest. Dlatego każdy, kto ma coś do dodania, jest proszony o to.


--------------------------------------------------------------------------------------------------------------------------------
Ode mnie:
Swego czasu w internecie wiele osób tego szukało. Jedyne, co można znaleźć to gotowe urządzenia za miliony monet. Nikt za to nie chciał podzielić się wiedzą. Przekopałem pół internetu, ale udało się znaleźć sensownie wyglądający opis. Przetłumaczyłem wszystko na własny użytek, ale może komuś się przyda.
Sam planuję zrobić własny sterownik wyświetlacza jak tylko będę miał większe pokłady wolnego czasu i klucze do wyjmowania radia. ;)

Jeśli ktoś udziela się na innych forach, spokojnie może to kopiować by jak najwięcej zainteresowanych osób zajęło się tematem.

P.S.
Rosjanie opublikowali też w domenie publicznej projekt gotowego rozwiązania i wsady do niego. W międzyczasie przetłumaczę to i też wrzucę na forum.


Były: MK3 1.8 AAM, MK3 2.0 16V ABF, Omega B FL 2.2
Jest: Octavia 1 1.8T

Awatar użytkownika
grg474
_
_
Posty: 5945
Rejestracja: ndz lut 27, 2011 10:56
Lokalizacja: Skarżysko

Protokół komunikacji radia/navi z FIS

Post autor: grg474 » sob wrz 24, 2016 14:58

przenoszę do FAQ


Masz pytanie pisz ale nie rób ping-ponga - treściwie pytaj o całość co chcesz się dowiedzieć
regulamin działu technicznego
były mk2 GTD, mk3 1Y, mk4 AKQ, mk4 AXR :(, A3 8P jest EOS , New Beetle cabrio - oznaczone Käfer, Audi A5

ODPOWIEDZ

Wróć do „FAQ”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 65 gości