Forum: Mikrocontroller und Digitale Elektronik Protokoll entschlüsseln


von Borislav B. (boris_b)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte die Kommunikation zwischen zwei Geräten untersuchen. Das Ziel 
ist es zunächst, diese nur zu verstehen. Später würde ich dann gerne 
eines der beiden Geräte durch einen eigenen µC ersetzen.

Bei den Geräten handelt es sich um einen Handschalter mit LCD-Display 
und eine Motor-Steuerung von einem höhenverstellbaren Schreibtisch. 
Beide Einheiten sind mit einem 8-poligen Kabel verbunden.


Als ersten Schritt habe ich mir einen Logic-Analyzer besorgt, und damit 
alle 8 Leitungen "angezapft". Auf den ersten Blick passiert eigentlich 
nur auf dem ersten Kanal etwas, auf den anderen Leitungen ist nur 
sporadisch etwas los.

Eine Übersicht dessen, was auf Kanal 1 passiert, ist im ersten Bild zu 
sehen. Bild 2 zeigt vier dieser Peaks im Detail. Ich vermute, dass es 
sich hier um den Höhenwert handelt, der vom Motor-Controller zur Anzeige 
an den Handschalter gesendet wird.

Doch wie geht es nun weiter?
Leider bin ich absoluter Neuling, was solche Protokolle angeht. Hat 
jemand eine Idee, worum es sich hier handelt? Ist das etwas Bekanntes? 
Oder etwas Proprietäres? Wie könnte ich herausfinden, was hier wie 
gesendet wird?

von Joe F. (easylife)


Lesenswert?

Mit welcher Abtastrate hast du denn die Signale mitgeschnitten?
Bei deinem 20s Ausschnitt kann man nicht viel sagen.
Das was du da als Nadeln auf den anderen Kanälen siehst, kann schon eine 
komplette Kommunikation sein.
Zoome da mal mehr rein.
Oder poste mal das Salea File (über irgend ne Dropbox). Dann können wir 
selbst zoomen und suchen... ;-)

: Bearbeitet durch User
von Borislav B. (boris_b)


Angehängte Dateien:

Lesenswert?

Joe F. schrieb:
> Oder poste mal das Salea File (über irgend ne Dropbox). Dann können wir
> selbst zoomen und suchen... ;-)

Hier ist es :-)
(ist ja recht klein)

von Thomas Z. (thomas_z41)


Lesenswert?

Was hast du denn in diesen 20s getan?

Ich würde gucken dass ich mehrmals den gleichen Wert einstelle und dann 
vergleichen ob jedes mal die Gleiche Kommunikation stattfindet.
Und dann würde ich gezielt einzelne Werte einstellen und diese 
verschiedenen Werte dann miteinander vergleichen.

Wenn man weiß was übertragen wurde ist es wesentlich einfach so etwas zu 
entschlüsseln...

von U. M. (oeletronika)


Lesenswert?

Hallo,
bei den 8 Leitungen sollte man erstmal sehen, wie die auf beiden Seiten 
beschaltet sind. Sehr wahrscheinlich ist da mind. eine Masseleitung und 
evtl. auch eine Betriebsspannung dabei.

Ist da ein Prozessor? Welcher Typ?
Bei den Signalen kann man zumindest schauen, an welche Pins die gehen.

Bei dem Impulsmustern kann es sich um eine asynchrone Übertagung 
handeln.
Eine UART ist wahrscheinlich.  Es sind wohl TTL-Pegel, oder?

Messe mal die Breite der schmalsten Takte. Damit kann man die Baudrate 
ermitteln.
Falls es das ist, was ich vermute, kannst du den Inhalt der 
Datentelegramme mit einem Terminalprog. mitlesen. Brauchst dazu evtl. 
mur einen Pegelwandler von TTL zu RS232.
Gruß Öletronika

von Joe F. (easylife)


Lesenswert?

U. M. schrieb:
> Eine UART ist wahrscheinlich.

Das hatte ich auch vermutet.
Die Salea-Software hat sogar einen Decoder mit Baudratenerkennung an 
Board, das schmeisst aber Fehler.
Die Datenworte sehen auch nicht alle gleich breit aus.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Die einzige Einstellung, die vielleicht irgend etwas Sinnvolles zeigt 
ist folgende:

ASYNC Serial, 500 Baud, 15 Bits/Transfer, 1 Stop-Bit, No Parity, Most 
Significant Bit Sent First, Inverted

Da käme dann das raus:

0x0837
0x082E
0x083F
0x002F
0x083E

0x0822
0x0833
0x0823
0x0032
0x002B

0x087E
0x002B
0x0A7D

0x083A
0x002A
0x083B
0x0023
0x0832

0x0822
0x0033
0x082A
0x003B
0x002B

Ich weiss ja nicht, was du genau gemacht hast, aber evtl. ist die 0x08 
0x00 die Richtung, und das untere Byte die Position?

0x0A im oberen Byte könnte heissen: Richtung 0x08 und am Anschlag...?

: Bearbeitet durch User
von Borislav B. (boris_b)


Lesenswert?

Thomas Z. schrieb:
> Was hast du denn in diesen 20s getan?

Ich habe den Tisch von einer angezeigten Höhe von 90 cm nach oben fahren 
lassen. Am Ende stand er bei 110cm.
Dazu habe ich den entsprechenden Schalter 4x betätigt, und bin jeweils 
5cm gefahren.

U. M. schrieb:
> bei den 8 Leitungen sollte man erstmal sehen, wie die auf beiden Seiten
> beschaltet sind. Sehr wahrscheinlich ist da mind. eine Masseleitung und
> evtl. auch eine Betriebsspannung dabei.

Genau, es sind Masse, VCC und ein paar N.C.s dabei.
Letzten Endes scheinen nur vier Leitungen Daten zu übertragen. Ich werde 
das Logic-Analyzer-Projekt nachher mal entsprechend aufräumen.

U. M. schrieb:
> Ist da ein Prozessor? Welcher Typ?
> Bei den Signalen kann man zumindest schauen, an welche Pins die gehen.

Bisher habe ich die Gehäuse nicht geöffnet, sondern bin "minimalinvasiv" 
vorgegangen ;-)

Joe F. schrieb:
> Das hatte ich auch vermutet.
> Die Salea-Software hat sogar einen Decoder mit Baudratenerkennung an
> Board, das schmeisst aber Fehler.

Das hatte ich auch anfangs versucht, bekomme aber auch nur Fehler 
angezeigt. Wäre wohl zu einfach gewesen ;-)

von Borislav B. (boris_b)


Lesenswert?

Hallo,
nun bin ich schon ein ganzes Stück weiter :-)
Alles was mir jetzt noch fehlt, ist herauszufinden, wie die aktuelle 
Höhe codiert ist.

Folgendes weiß ich:
 - Das Steuergerät sendet die Höhe in einem 32-Bit Paket an die Anzeige
 - Die ersten 23 Bit sind immer gleich (spielen also keine Rolle)
 - Die letzten 9 Bit ändern sich, je nach Höhe

Ich habe mehrere Messungen durchgeführt, und immer die folgenden Werte 
bekommen. Diese müssten also zuverlässig sein:

Höhe    Konstante 23-Bit        Höhe in 9 Bit
---------------------------------------------
109cm: 10111111100111111111101 010010010
108cm: 10111111100111111111101 110010011
107cm: 10111111100111111111101 001010010
106cm: 10111111100111111111101 101010011
105cm: 10111111100111111111101 011010011
104cm: 10111111100111111111101 111010010
103cm: 10111111100111111111101 000110010
102cm: 10111111100111111111101 100110011
101cm: 10111111100111111111101 010110011

Doch wie ist die Höhe genau in diesen 9 Bit codiert?
Ich erkenne da leider auf Anhieb kein Muster :-(
(vorwärts? rückwärts? invertiert?)

von Klaus (Gast)


Lesenswert?

Zunächst fällt mir auf, das das äusserste rechte Bit immer dann 1 ist, 
wenn die Anzahl der anderen 1-Bits gerade ist, wobei ich die Bits der 
"23-Bit-Konstante" nicht betrachtet habe. Wenn das rechte Bit aber eine 
Parität sein sollte, dann würde die Einbeziehung der 23-Bit höchstens 
die Parität noch einmal ändern.

Weiter sehe ich, dass der Zahlenwert der restlichen 8 Bit proportional 
zu der Höhe ist, wenn man die Bit-Reihenfolge umdreht .

Ich deute das hier einmal an:

101cm: 10111111100111111111101 01011001 1

                               10011010

von Klaus (Gast)


Lesenswert?

Die Aussage, dass der Zusammenhang proportional ist, suggeriert evtl. 
dass der Zusammenhang linear ist. Aber das ist er offensichtlich nicht. 
Falls es nötig ist das zu erwähnen.

Findet sich denn das Bitmuster einer integer 101 in der entsprechenden 
Zeile? Ich bin zu faul nachzusehen.

Soweit ich das sehe, verändern sich (abgesehen von der "Parität") 
überhaupt nur die 4 linken Bits, was 16 mögliche Stufen ergibt. Die 
reichen ja für den Bereich von 101 bis 109cm. Ist das der gesamte 
Fahrbereich?

Man muss einfach mal einige "triviale" Umstellungen ausprobieren und 
sich das Ergebnis mit gnuplot oder einem ähnlichen Programm ansehen.

von Klaus (Gast)


Lesenswert?

"proportional" muss heissen "umgekehrt proportional". Sorry.

von Borislav B. (boris_b)


Lesenswert?

Hi Klaus,
danke für deine Überlegungen.

Klaus schrieb:
> Die reichen ja für den Bereich von 101 bis 109cm. Ist das der gesamte
> Fahrbereich?

Der ist noch ein bisschen größer. Er reicht ca. von 60cm bis 120cm.

Hier noch ein paar kleinere Werte, die ich gerade gemessen habe:

Höhe    Konstante 23-Bit        Höhe in 9 Bit
---------------------------------------------
65cm 10111111100111111111101 011111011
64cm 10111111100111111111101 111111010
63cm 10111111100111111111101 000000111
62cm 10111111100111111111101 100000110

Gerade der Sprung zwischen 63 und 64 cm sieht doch recht wirr aus...

von Joe F. (easylife)


Lesenswert?

Ich glaube es ist so:
das letzte Bit ist ein Prüfbit

Wenn du die letzten 9 Bit umdrehst, und nur die unteren 8 Bit davon 
anguckst, dann kommt etwas sinnvolles raus:
1
Höhe   Konstante 23-Bit        Höhe in 9 Bit   Höhe bit-reverted
2
----------------------------------------------------------------------
3
109cm: 10111111100111111111101 010010010       0_10010010 = 0x92 = 146
4
108cm: 10111111100111111111101 110010011       1_10010011 = 0x93 = 147
5
107cm: 10111111100111111111101 001010010       0_10010100 = 0x94 = 148
6
106cm: 10111111100111111111101 101010011       1_10010101 = 0x95 = 149
7
105cm: 10111111100111111111101 011010011       1_10010110 = 0x96 = 150
8
104cm: 10111111100111111111101 111010010       0_10010111 = 0x97 = 151
9
103cm: 10111111100111111111101 000110010       0_10011000 = 0x98 = 152
10
102cm: 10111111100111111111101 100110011       1_10011001 = 0x99 = 153
11
101cm: 10111111100111111111101 010110011       1_10011010 = 0x9A = 154

So, und jetzt machst du folgendes, du ziehst diesen Wert von 255 ab, und 
hast die Höhe in cm.
Bingo.
Das was bei dir eine 0 ist scheint für das Gerät eine logische 1.
Deswegen kannst du auch den Wert XOR 0xff nehmen, da kommt das gleiche 
raus, wie von 255 abziehen.

: Bearbeitet durch User
von Borislav B. (boris_b)


Lesenswert?

Bingo, das ist es!
Hier sind echt erfahrene Zahlenjongleure unterwegs ;-)

Danke!

von Klaus (Gast)


Lesenswert?

Boris P. schrieb:
> Hier noch ein paar kleinere Werte, die ich gerade gemessen habe:
>
> Höhe    Konstante 23-Bit        Höhe in 9 Bit
> ---------------------------------------------
> 65cm 10111111100111111111101 011111011
> 64cm 10111111100111111111101 111111010
> 63cm 10111111100111111111101 000000111
> 62cm 10111111100111111111101 100000110
>
> Gerade der Sprung zwischen 63 und 64 cm sieht doch recht wirr aus...

Nicht wirklich, wenn Du beachtest, das 0100 0000 = 64dez und 0011 1111 = 
63dez. Die Vermutung das die Bits im wesentlichen umgedreht und 
invertiert werden scheint mir um so zutreffender.

von Joe F. (easylife)


Lesenswert?

Dipl. Reverse-Ing.

von Bernd K. (prof7bit)


Lesenswert?

Da werden 3 Byte übertragen.

Invertiere alle Bits.  Dann steht da:
1
Start
2
8 daten
3
Parität
4
Stop 
5
6
Start
7
8 Daten
8
Parität 
9
Stop
10
11
Start
12
8 Daten (Höhe) 
13
Parität 
14
Stop

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Bernd K. schrieb:
> Da werden 3 Byte übertragen.

Ich würde sogar sagen, da werden Daten übertragen.

von Moppelchen (Gast)


Lesenswert?

Auch wenn dieser Thread schon uralt ist:

Die ersten 23 Bit sind nicht immer gleich. Das sind nur die ersten 12 
Bit. In dem Protokoll werden 2 Nutzbytes übertragen. Abhängig vom 1. 
Byte steht die Information im 2. Byte. Wenn 1. Byte = 0 dann 2. Byte = 
Höhe.

Ansonsten Negierung usw. wie schon beschrieben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.