Neulich Nacht fiel es mir wie Schuppen von den Augen: das Problem mit der Kommunikation zwischen PC und LPE liegt am Bluetooth-Adapter bzw. dessen Ausgangspegel von nur 3,3V. Damit kommt der USB-UART-Wandler zwar klar, ein durchschnittlicher Microcontroller wie er in dem Steuergerät verbaut ist, braucht aber meist 0,7…0,8* Vcc, also gut 3,5V, um „High“ zu erkennen. Das konnte ja nicht funktionieren.
Die Sache ist etwas peinlich, weil ich vor nicht mal einem Jahr in die gleiche Falle getappt bin, als ich das GPS-Modul meines FY 31-AP Autopiloten im Teksumo an einen 5V Arduino koppeln wollte, um damit die GPS-Daten in die Fernsteuer-Telemetrie zu füttern. Ups!
Nun ja, die Lösung wird hier funktionieren wie damals auch, 2 NPN-Transistoren und 2-3 Widerstände aus der Bastelkiste ergeben einen prima Pegelwandler….
Davon ab: Reverse-Engineering macht Spaß 🙂
Ich habe die Basis des Protokolls jetzt einigermaßen verstanden, unklar sind mir noch die Inhalte der einzelnen Datenbytes.
Ein Daten Frame ist folgendermaßen aufgebaut:
Frame: 00 nn dd dd dd dd cc
Das Frame beginnt immer mit 00, das zweite Byte erhält die Anzahl der noch folgenden Bytes einschließlich des letzten Bytes, welches eine Checksumme enthält. Diese wird recht einfach berechnet: cc = 0xFF – Summe aller vorherigen Bytes des Frames. Da dieses Byte nicht negativ werden kann, läuft es bei Erreichen von 0 über und beginnt wieder bei 0xFF bzw. dezimal 255.
Ein Beispiel:
PC: 00 05 01 B6 06 02 3B -> Aufforderung etwas zu tun
LPE: 00 02 F0 0D -> vermutlich ein Acknowledge, da es regelmäßig die erste Antwort ist
LPE: 00 06 01 B6 06 21 30 EB ->die eigentliche Antwort auf die angefragte Aufgabe
das Timing scheint nicht besonders relevant zu sein, denn ich bekomme auch plausibel erscheinende Antworten, wenn ich die Botschaften, die eigentlich das LDT sendet, per Hand über ein Terminalprogramm absetze.
Was ich bislang aber noch nicht weiß, ist was die einzelnen Datenbytes bedeuten. Um das herauszufinden, werde ich ein Software-in-the-loop-Scenario aufsetzen, bei dem ich manuell die Anfragen des LDT beantworte, basierend auf den bislang gewonnen Erkenntnissen.
Wäre doch gelacht, wenn sich damit nicht einiges identifizieren lassen könnte 🙂