Forum: Mikrocontroller und Digitale Elektronik Serielle Verbindung.Checksummenberechnung unklar.


von Heiko S. (heikoxxxx)


Lesenswert?

Hallo zusammen,

ich habe mal wieder ein kleines Anliegen und komme hier seit 2 Tagen 
auch mit recherchieren nicht weiter. Ich habe hier eine China 
Funkfernbedienung für RC Drohnen und das entsprechende Empfängermodul 
rumliegen und wollte hier etwas daraus bauen. Leider ist der Hersteller 
unklar und zu den Modulen gibt es keinerlei Beschreibung. 
Modulbezeichnung (RF297RX-1)
In mühseliger Testarbeit konnte ich folgendes Herausfinden:

DI - Pin Unklar
TX - Daten an Fernbedienung senden (115200 Baud)
RX - Daten von Fernbedienung empfangen (115200 Baud. Hier erhalte ich 
immer 42,54,3C,01,04,01,04,)
IN2 - Pin Unklar
IN1 - PPM Signal der Steuerungen und Taster
+   - +3,3V
-   - GND


Mittlerweile habe ich es jedoch hinbekommen das PPM Signal über einen 
Arduino auszuwerten und so 2 Motoren anzusteuern. Falle es jemand 
weiterhilft .. das PPM Signal liegt an IN1 an.

Das Modul bietet  zudem die Möglichkeit an über eine serielle Verbindung 
Daten zurück zur Fernbedienung zu senden (Spannung/Daten vom GPS 
Modul/Geschwindigkeit und Höhe). Diese Daten konnte ich bereits mal 
mitsniffen und auch mitgesniffte Daten wieder an die Fernbedienung 
zurück senden.

Was mir nun fehlt ist, wie sich die Checksumme zusammensetzt, damit ich 
eigene Werte übertragen kann. Hier habe ich schon sämtliche CRC 
Kalkulatoren getestet, sämtliche Berechnungen angestellt aber bin 
hierbei nie zu einem Ergebnis gekommen. Ich hoffe einer von euch hat 
hierzu die passende Idee wie sich die Checksumme bilden lässt.

Bei der letzten Stelle handelt es sich vermutlich um die Checksumme, die 
vorletzte Stelle steht vermutlich für die Spannung, da 79 in HEX die 121 
-> 12,1V widerspiegeln die angelegt waren.



Das Sniffing hat folgende Ergebnisse geliefert:

15:53:30.184 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FD,FF,00,00,00,79,66,
15:53:30.685 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,4B,
15:53:31.185 -> 
42,54,3E,0F,04,CB,06,40,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,34,
15:53:31.687 -> 
42,54,3E,0F,04,CB,06,40,00,CC,0B,00,F6,FF,FF,FF,00,00,00,79,30,
15:53:32.436 -> 
42,54,3E,0F,04,CB,06,40,00,CC,0B,00,F6,FF,FE,FF,00,00,00,79,30,
15:53:32.937 -> 
42,54,3E,0F,04,CB,06,40,00,CB,0B,00,F6,FF,FE,FF,00,00,00,F9,37,
15:53:33.439 -> 
42,54,3E,0F,04,CB,06,40,00,C3,0B,00,F6,FF,FE,FF,00,00,00,79,3F,
15:53:33.940 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FE,FF,00,00,00,79,48,
15:53:34.441 -> 
42,54,3E,0F,04,CB,06,40,00,C6,0B,00,F6,FF,FE,FF,00,00,00,79,3A,
15:53:34.742 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FE,FF,00,00,00,79,48,
15:53:35.698 -> 
42,A4,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,79,4F,
15:53:36.198 -> 
42,54,3E,0F,04,CB,06,40,00,C4,0B,00,F6,FF,FE,FF,00,00,00,79,38,
15:53:36.698 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FE,FF,00,00,00,79,48,
15:53:37.200 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,5E,FA,
15:53:37.701 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,79,4F,
15:53:37.748 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,79,4F,
15:53:38.952 -> 
42,54,3E,0F,04,CB,06,7F,00,C5,0B,00,F7,FF,FE,FF,00,00,00,F9,47,
15:53:39.453 -> 
42,54,3E,0F,04,CB,06,3F,00,C1,0B,00,F7,FF,FE,FF,00,00,00,79,43,
15:53:39.955 -> 
42,54,3E,0F,04,CB,06,80,00,C2,0B,00,F7,FF,FE,FF,00,00,00,79,3F,
15:53:40.455 -> 
42,54,3E,0F,04,CB,06,80,00,C1,0B,00,F7,FF,FE,FF,00,00,00,79,3C,
15:53:40.810 -> 
42,54,3E,0F,04,CB,06,40,00,C2,0B,00,F7,FF,FE,FF,00,00,00,79,3F,
15:53:41.659 -> 
42,54,3E,0F,04,CB,06,40,00,CB,0B,00,F7,FF,FE,FF,00,00,00,79,36,
15:53:42.160 -> 
42,54,3E,0F,04,CB,06,40,00,CA,0B,00,F7,FF,FE,FF,00,00,00,79,37,
15:53:43.663 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FF,FF,00,00,00,79,46,
15:53:44.917 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:45.418 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FF,FF,00,00,00,79,D0,
15:53:45.920 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FE,FF,00,00,00,79,41,
15:53:46.422 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FE,FF,00,00,00,79,D0,
15:53:46.871 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:47.673 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:48.174 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FE,FF,00,00,00,79,41,
15:53:48.676 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:49.176 -> 
42,54,3E,0F,04,CB,06,3F,00,C3,0B,00,F8,FF,FE,FF,00,00,00,79,4E,
15:53:49.678 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,5E,F4,
15:53:49.878 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FF,FF,00,00,00,79,43,
15:53:50.932 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:51.433 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FE,FF,00,00,00,79,41,
15:53:51.935 -> 
42,54,3E,0F,04,CB,06,3F,00,C7,0B,00,F8,FF,FE,FF,00,00,00,79,4A,
15:53:52.467 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:52.915 -> 
42,54,3E,0F,04,CB,06,3F,00,C3,0B,00,F8,FF,FE,FF,00,00,00,79,4E,
15:53:53.670 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:54.171 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:54.673 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FF,FF,00,00,00,79,D0,
15:53:55.175 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FE,FF,00,00,00,79,D0,
15:53:55.676 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FF,FF,00,00,00,79,43,
15:53:55.977 -> 
42,54,3E,0F,04,9B,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:56.926 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F8,FF,FE,FF,00,00,00,79,46,
15:53:58.930 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F8,FF,FD,FF,00,00,00,79,41,
15:53:59.030 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F7,FF,FD,FF,00,00,00,79,4A,
15:54:00.186 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F7,FF,FD,FF,00,00,00,5E,D3,
15:54:00.687 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,4B,
15:54:01.189 -> 
42,54,3E,1F,04,CB,06,3F,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,4B,
15:54:01.690 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,4B,
15:54:02.038 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FD,FF,00,00,00,79,4B,
15:54:02.940 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,5E,FA,
15:54:03.441 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FE,FF,00,00,00,79,48,
15:54:03.943 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F6,FF,FE,FF,00,00,00,79,48,
15:54:04.444 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F6,FF,FE,FF,00,00,00,79,4F,
15:54:04.946 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F7,FF,FE,FF,00,00,00,F9,4E,
15:54:05.099 -> 
42,54,3E,0F,04,CB,06,3F,00,CB,0B,00,F7,FF,FE,FF,00,00,00,79,49,
15:54:06.201 -> 
42,54,3E,0F,04,CB,06,3F,00,CC,0B,00,F7,FF,FE,FF,00,00,00,5E,FA,

von N. M. (mani)


Lesenswert?

Ich hab gerade mal eine Zeile ausprobiert mit den üblichen Polynomen und 
bin auf die schnelle auch nicht auf ein Ergebnis gekommen.

Allerdings ist mir ein Artikel vom CCC eingefallen, vielleicht hilft dir 
das weiter:
https://media.ccc.de/v/eh16-27-how_to_reverese_crcs

von Stefan (Gast)


Lesenswert?

Hallo,

deine CHK hat irgendwas mit der einfachen XOR-Summe zu tun. Lässt man 
die ersten 3 Zeichen einer Meldung weg dann ist die XOR Summe über die 
restlichen Zeichen (inclusive der vermuteten CHK) in 90% der Fälle 
gleich 0x00.
In den wenigen Fällen in denen es nicht stimmt liegt vielleicht ein 
"sniffing"-Fehler vor ???
1
/*
2
4. 5. 6. .........................................CHK, XOR-Summe
3
0f,04,9b,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=50
4
0f,04,cb,06,3f,00,c1,0b,00,f7,ff,fe,ff,00,00,00,79,43,=00
5
0f,04,cb,06,3f,00,c3,0b,00,f8,ff,fe,ff,00,00,00,79,4e,=00
6
0f,04,cb,06,3f,00,c3,0b,00,f8,ff,fe,ff,00,00,00,79,4e,=00
7
0f,04,cb,06,3f,00,c7,0b,00,f8,ff,fe,ff,00,00,00,79,4a,=00
8
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,4b,=00
9
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,4b,=00
10
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,4b,=00
11
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,4b,=00
12
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fe,ff,00,00,00,79,48,=00
13
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fe,ff,00,00,00,79,48,=00
14
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fe,ff,00,00,00,79,48,=00
15
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fe,ff,00,00,00,79,48,=00
16
0f,04,cb,06,3f,00,cb,0b,00,f6,ff,fe,ff,00,00,00,79,48,=00
17
0f,04,cb,06,3f,00,cb,0b,00,f7,ff,fd,ff,00,00,00,79,4a,=00
18
0f,04,cb,06,3f,00,cb,0b,00,f7,ff,fe,ff,00,00,00,79,49,=00
19
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,5e,f4,=95
20
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
21
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
22
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
23
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
24
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
25
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
26
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
27
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
28
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,fe,ff,00,00,00,79,46,=00
29
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,ff,ff,00,00,00,79,43,=04
30
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,ff,ff,00,00,00,79,43,=04
31
0f,04,cb,06,3f,00,cb,0b,00,f8,ff,ff,ff,00,00,00,79,46,=01
32
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fd,ff,00,00,00,79,66,=2a
33
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fe,ff,00,00,00,5e,fa,=92
34
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fe,ff,00,00,00,5e,fa,=92
35
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fe,ff,00,00,00,79,4f,=00
36
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fe,ff,00,00,00,79,4f,=00
37
0f,04,cb,06,3f,00,cc,0b,00,f6,ff,fe,ff,00,00,00,79,4f,=00
38
0f,04,cb,06,3f,00,cc,0b,00,f7,ff,fd,ff,00,00,00,5e,d3,=b9
39
0f,04,cb,06,3f,00,cc,0b,00,f7,ff,fe,ff,00,00,00,5e,fa,=93
40
0f,04,cb,06,3f,00,cc,0b,00,f7,ff,fe,ff,00,00,00,f9,4e,=80
41
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fd,ff,00,00,00,79,41,=03
42
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fe,ff,00,00,00,79,41,=00
43
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fe,ff,00,00,00,79,41,=00
44
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fe,ff,00,00,00,79,41,=00
45
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fe,ff,00,00,00,79,d0,=91
46
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,fe,ff,00,00,00,79,d0,=91
47
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,ff,ff,00,00,00,79,d0,=90
48
0f,04,cb,06,3f,00,cc,0b,00,f8,ff,ff,ff,00,00,00,79,d0,=90
49
0f,04,cb,06,40,00,c2,0b,00,f7,ff,fe,ff,00,00,00,79,3f,=00
50
0f,04,cb,06,40,00,c3,0b,00,f6,ff,fe,ff,00,00,00,79,3f,=00
51
0f,04,cb,06,40,00,c4,0b,00,f6,ff,fe,ff,00,00,00,79,38,=00
52
0f,04,cb,06,40,00,c6,0b,00,f6,ff,fe,ff,00,00,00,79,3a,=00
53
0f,04,cb,06,40,00,ca,0b,00,f7,ff,fe,ff,00,00,00,79,37,=00
54
0f,04,cb,06,40,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,34,=00
55
0f,04,cb,06,40,00,cb,0b,00,f6,ff,fe,ff,00,00,00,f9,37,=80
56
0f,04,cb,06,40,00,cb,0b,00,f7,ff,fe,ff,00,00,00,79,36,=00
57
0f,04,cb,06,40,00,cc,0b,00,f6,ff,fe,ff,00,00,00,79,30,=00
58
0f,04,cb,06,40,00,cc,0b,00,f6,ff,ff,ff,00,00,00,79,30,=01
59
0f,04,cb,06,7f,00,c5,0b,00,f7,ff,fe,ff,00,00,00,f9,47,=c0
60
0f,04,cb,06,80,00,c1,0b,00,f7,ff,fe,ff,00,00,00,79,3c,=c0
61
0f,04,cb,06,80,00,c2,0b,00,f7,ff,fe,ff,00,00,00,79,3f,=c0
62
1f,04,cb,06,3f,00,cb,0b,00,f6,ff,fd,ff,00,00,00,79,4b,=10 */
Deine Meldungen sind hier sortiert und ohne die ersten 3 Zeichen

Gruss

von Heiko S. (heikoxxxx)


Angehängte Dateien:

Lesenswert?

Tatsache da hast du recht. Die Fernbedienung lässt sich nun korrekt 
steuern. Vielen Dank dafür. Ich frage mich immer wie Ihr auf solche 
Ideen kommt :-)

Hier noch ein paar Daten die ich herausgefunden habe.
Ich gehe davon aus, dass stelle 4-10 die Seriennummer oder so 
widerspiegelt.


  // Stelle 1:   unbekannt, immer 42
  // Stelle 2:   unbekannt, immer 54
  // Stelle 3:   unbekannt, immer 3E
  // Stelle 4:   unbekannt
  // Stelle 5:   unbekannt
  // Stelle 6:   unbekannt
  // Stelle 7:   unbekannt
  // Stelle 8:   unbekannt
  // Stelle 9:   unbekannt
  // Stelle 10:  unbekannt
  // Stelle 11:   Richtung 01 - 0F
  // Stelle 12:   Anzahl Sateliten
  // Stelle 13:   unbekannt
  // Stelle 14:   Höhe (grob)
  // Stelle 15:   unbekannt
  // Stelle 16:   unbekannt
  // Stelle 17:   Distance unten Rechts (fein)
  // Stelle 18:   Distance unten Rechts (grob)
  // Stelle 19:   Geschwindigkeit m/s unten links
  // Stelle 20:   Spannung
  // Stelle 21:   Checksumme



  byte message[21] = {0x42, 0x54, 0x3E, 0x0F, 0x04, 0xcb, 0x06, 0x40, 
0x00, 0x00, 0x07, 0x08, 0x00, 0x05, 0xFE, 0xFF, 0xFF, 0x10, 0x50, 0x79, 
0x00};

  message[20] = message[3] ^ message[4] ^ message[5] ^ message[6] ^ 
message[7] ^ message[8] ^ message[9] ^ message[10] ^ message[11] ^ 
message[12] ^ message[13] ^ message[14] ^ message[15] ^ message[16] ^ 
message[17] ^ message[18] ^ message[19];

  for (int i = 0; i < sizeof(message); i++)
  {
    Serial.print(message[i], HEX);
    Serial.print(" ");
  }

  mySerial.write(message, sizeof(message));

  Serial.println(" ");

von Matthias L. (Gast)


Lesenswert?

1
  const int SIZE = 21;
2
3
  ...
4
  byte message[SIZE] = {0x42, 0x54, 0x3E, 0x0F, 0x04, 0xcb, 0x06, 0x40, 
5
0x00, 0x00, 0x07, 0x08, 0x00, 0x05, 0xFE, 0xFF, 0xFF, 0x10, 0x50, 0x79, 
6
0x00};
7
8
  ...
9
10
  message[SIZE-1] = 0x00;
11
  for (int i = 0; i < SIZE; i++)
12
  {
13
    if (i >= 3) message[SIZE-1] ^= message[i]; 
14
15
    Serial.print(message[i], HEX);
16
    Serial.print(" ");
17
  }
18
19
  mySerial.write(message, SIZE);
20
  Serial.println(" ");

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.