1. Odtwarzanie protokołu
Ponieważ nie chciałem ani rozkręcać nadajnika, ani tym bardziej wlutowywać się w niego postanowiłem odtworzyć protokół transmisyjny bezinwazyjnie. W tym celu na płytce stykowej złożyłem bardzo prosty układ z fototranzystorem NPN i rezystorem i podłączyłem do analizatora logicznego (
OpenLogicSniffer ).
Chciałbym jeszcze wspomnieć, że już po zakończeniu fazy analizy znalazłem w internecie udokumentowany protokół. Więc następnym razem pewnie najpierw poszukam,a dopiero później sam będę się bawił w odkodowywanie... Tak czy siak, straconego czasu nie żałuję bo zawsze to ciekawa łamigłówka:)
Rezystor został dobrany tak, aby fototranzystor nie nadążał za nośną 38kHz, a na wyjściu pojawiały się tylko dane zamiast dziesiątek tysięcy impulsów.

Następnie przeprowadziłem szereg "nagrań" zawierających wszystkie możliwe manipulacje wykonywane na oryginalnym pilocie, oraz różne kanały. Format ramki dość łatwo udało się ustalić i przyszedł czas na zrozumienie sensu przesyłanych danych.


Przykładowa ramka przechwycona podczas wstępnej analizy. Ramka zaczyna się od preambuły stan wysoki przez 3,6ms, następnie stan niski 1ms. Dalej mamy 32 bity, gdzie każdy zajmuje 1ms i jest kodowany długością impulsu ( "1" - 0,3ms wysoki i 0,7ms niski, a "0" - 0,7ms wysoki i 0,3ms niski). Jako 33 przesyłany jest bit stopu "1".
W celu analizy danych przyjąłem, jak się później okazało słuszne

, założenia iż ramka zawiera cztery 8-bitowe słowa. Stworzyłem skrypt który przechwycone dane zamieniał na postać zrozumiałą dla arkuszy kalkulacyjnych i zaimportowałem szereg sesji nagraniowych do arkusza Google Docs.

Na powyższym rysunku widać już zidentyfikowany bajt przepustnicy, oraz częściowo obliczoną sumę kontrolną, której ostateczna postać została poznana dopiero później. Sam proces rozszyfrowywania polegał w głównej mierze na obserwacji zależności na wykresach od wykonywanych ruchów na aparaturze oraz oczywiście zgadywaniu

Ostatecznie udało się odszyfrować 32 bity danych oraz ich znaczenia:
Kod:
31 bit przesyłany jako pierwszy, 0 jako ostatni
--|--B3--------------
31| 0
30| MSB przepustnicy
29| ...
28| ...
27| ...
26| ...
25| ...
24| LSB przepustnicy
--|--B2--------------
23| MSB obrotu w okół własnej osi
22| ...
21| ...
20| LSB obrotu w okół własnej osi
19| MSB przód/tył
18| ...
17| ...
16| LSB przód/tył
--|--B1--------------
15| FLAGA 1 - obrót w lewo, 0 - obrót w prawo
14| FLAGA 1 - lot do tyłu, 0 - lot do przodu
13| FLAGA 1 - trymowanie w lewo, 0 - trymowanie w prawo
12| MSB trymera
11| ...
10| ...
09| ...
08| LSB trymera
--|--B0--------------
07| MSB KANAŁ, A - 11
06| LSB KANAŁ
05| MSB Sumy kontrolnej
04| ...
03| ... CRC = (0x0F + B3 + B2 + B1) & 0x3F
02| ...
01| ...
00| LSB Sumy kontrolnej
--|------------------
Kolejna część niebawem ( o ile będzie zainteresowanie

), a w niej projekt układu, wybór kontrolera i założenia na potrzeby programu.