Yongnuo RF-603 Funkprotokoll – Teil 1

Die Yongnuo Funk Fernsteuerung vom Typ RF-603 bieten eine sehr preiswerte Möglichkeit, Blitzgeräte und Kamera drahtlos über weite Entfernungen auszulösen. Ebenso gibt es Yongnuo Blitzgeräte mit eingebautem Funk-Interface, wie der YN-560-III. Eigentlich sind diese Funkauslöser so billig, (RF-603-II Paar €30, YN-560-III 60€) dass es kaum lohnt, deren Funktionalität nachbauen zu wollen. Aber es interessiert mich halt, welches Protokoll gefahren wird und ob es gelingt, das Protokoll mit einem anderen Funk Transceiver, wie z.B. dem NRF24L01, zu belauschen und evtl. eigene Hardware wie den Foto Controller damit fernzusteuern, bzw. vom Foto Controller drahtlos Blitze und die Kamera auszulösen.

RF-603 vs RF-603-II

Für den RF-603 Funkauslöser gibt es seit einiger Zeit einen Nachfolger, den RF-603-II. Dieser beseitigt etliche Nachteile des Vorgängers. Besonders die Fernauslösefunktion, sprich man nimmt einen RF-603 in die Hand und möchte dann mit dem Taster die Kamera oder den Blitz auslösen, funktioniert jetzt. Das ging mit dem alten Modell ohne Umbau gar nicht, weil dieser nur funktionierte, wenn er auf einer kompatiblen Kamera mit Ready-Pin aufgesteckt war. Dieser Umbau ist beim neueren Modell nicht mehr notwendig.

IMG_3943.JPG

YN-560-III Blitz

Der Yongnuo YN-560-III ist ein manueller Aufsteckblitz mit integriertem Funkauslöser, kompatibel zum RF-603 Funkauslöser. Es ist zwar nur ein manueller Blitz ohne TTL-Funktion aber für Hochgeschwindigkeitsfotografie bestens geeignet. Wer TTL benötigt, für den ist vielleicht der YN-568EX besser geeignet. Dazu braucht man dann aber auch einen anderen Blitzfernauslöser, den YN-622.

  • Leitzahl: 58 (ISO 100 / 105 mm)
  • Blitzmodus: M, Multi, S1, S2, RX
  • Zoombereich: 28 – 105mm
  • Manuelle Blitzleistung regelbar von 1/1 bis 1/128 in 1/3 Belichtungsstufen
IMG_9451.JPG

RF-603 intern

Öffnen wir zunächst einen RF-603 Funkauslöser um herauszufinden, welcher Funk Chip verwendet wird. Das Gehäuse lässt sich problemlos mit einen Uhrmacher Kreuzschlitz Schraubendreher öffnen. Die Bauteile befinden sich auf der Rückseite der Platine. Also muss auch die Platine losgeschraubt werden.

IMG_9023.JPG

Der Prozessor Chip (rechts oben im Bild) ist unkenntlich gemacht. Das interessiert uns aber auch nicht. Links davon ist der Funk Chip mit der Bezeichnung A7105 zu sehen. Ein kurze Google Recherche bringt das Datenblatt zum Vorschein. Wir haben es mit einem AMICCOM A7105 2.4G FSK/GFSK Transceiver Chip zu tun.

RF Protokoll

Wie sieht es nun mit dem verwendeten Funk-Protokoll aus? Ok, 2.4GHz FSK (Frequency Shift Key) steht bereits auf dem Typenschild. Im Datenblatt zum A7105 findet sich das selbe Protokoll wie beim NRF24L01 bestehend aus Synchron-, Adress- Payload- und CRC-Bytes. Das könnte also klappen mit dem Nordic NRF24L01 Modul. Das MiniFotoControl Board enthält bereits einen 8-polige Buchsenleiste für das NRF24L01 Funkmodul.

IMG_0445.JPG

Für ein Arduino UNO Board ist hier die Verkabelung für das NRF24L01 Modul dargestellt. Achtung: bei einem Arduino Mega liegen die SPI Pins auf anderen IOs.

FunkModul_Steckplatine.jpg

Zunächst gilt es festzustellen, auf welcher Frequenz der Funkauslöser sendet. Dazu lassen wir die DIP Schalter auf der Standard Einstellung (alle DIP-Schalter auf OFF).

IMG_9021.JPG

Das ‚Scanner‘ Sketch aus der RF24 Bibliothek von maniacbug leistet gute Dienste, um die Sendefrequenz herauszufinden. Das ‚Scanner‘ Sketch prüft alle Kanäle im 2.4GHz Bereich durch, ob eine Trägerfrequenz vorhandenen ist. Das Sketch wird geladen und mit dem Terminal kann man die Ausgaben beobachten, um das Grundrauschen im 2.4GHz Band herauszufinden. Hier tummeln sich auch WLAN, Bluetooth und andere Geräte. Bei mir gibt es heftiges Grundrauschen in den unteren Kanälen (0..0×18). Dann hält man den Taster auf dem Funkauslöser für mehrere Messungen gedrückt und vergleicht die Terminal Ausgabe, auf welchem Kanal sich Änderungen ergeben. In diesem Fall ergab sich Kanal 0x39 als der Sendekanal. Warum auch Nachbarkanäle Aktivität anzeigen, liegt evtl. daran, dass mit dem NRF24L01 nicht die exakte Frequenz eingestellt werden konnte.


RF24/examples/scanner/
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xe7e7 0xc2c2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe7e7
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x07
CONFIG = 0x06
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = Disabled
PA Power = PA_MAX
0000000000000000111111111111111122222222222222223333333333333333
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
0000000544476555343000000000000000000000000000000000000000000000
0000000424377764540000000000000000000000000000000000000110100000
0000000225464652110000000000000000000000000000000000000111100000
0000000233350643210000000000000000000000000000000000000001000000
0000022355545545545100000000000000000000000000000000000000000000

Durch Umschalten der DIP Schalter lassen sich mit dem ‚Scanner‘ Sketch auch die anderen Sendefrequenzen herausfinden.

Zur Anzeige der empfangenen Pakete dient das ‚NRF_sniff‘ Sketch von Yveaux. Achtung diese Bibliothek heißt ebenfalls RF24, d.h. sie beißt sich mit der maniacbug RF24 Bibliothek. ‚Sniffen‘ von unbekannten Paketen mit dem NRF24L01 ist gar nicht so einfach. Da es keinen ‚promiscous‘ Mode gibt und der Chip Synchron-, Adress- und CRC-Bytes bereits intern verarbeitet. Es gibt aber einen Trick, Dank an Trevis Goodspeed, der hier hervorragende Vorarbeit geleistet hat. Dieser Trick besteht darin:

  1. den Chip in einen unzulässigen 2 Byte-Adress-Mode zu betreiben (offiziell sind nur 3-5 Byte erlaubt)
  2. die Checksummenbildung (CRC-Check) auszuschalten
  3. als 2 Byte Adresse ein übliches Synchron Zeichen (0x55 oder 0xAA) zu verwenden

Als Ergebnis erhält man Rohdaten der empfangenen Pakete inklusive Adresse und CRC. Da die Synchron Bytes als Adresse fungieren, wird jedes Paket als gültig akzeptiert. Das erzeugt aber auch eine Menge an ungültigen Paketen.

Ein paar wenige Anpassungen am NRF_sniff Sketch sind dazu notwendig. Dazu zählt:

  • die ermittelte Kanalnummer (0x39),
  • die CRC Länge auf 0 zu setzen
  • die Adresse auf 0x0000000055L zu setzen
  • die Binärausgabe zu unterbinde, dann erhält man Klartextmeldungen anstelle der Wireshark Binärausgabe

Die Ausgabe sieht leider nicht sehr vielversprechend aus. Zwar erkennt man, das Pakete ankommen, wenn man den Auslöser des Funk-Moduls drückt, aber die Daten ergeben keinen Sinn. Es werden immer 10 Bytes empfangen, aber es gibt keine eindeutige Adress-ID und auch kein erkennbares Muster für Taster halb gedrückt (Wakeup/Fokus Mode) und voll durchgedrückt (Auslösen). Irgendetwas stimmt noch nicht. Ein genauerer Blick ins Datenblatt zeigt: Übertragungsrate beim A7105 500kBit. Der NRF24L01 kann nur 1Mbit oder 2MBit. Das bedeutet hier ist erst mal Ende. Die beiden Chips sind offensichtlich zu einander inkompatibel.


-- RF24 Sniff --
4e 3900030255000000000000000020 Channel: 57
Datarate: 1Mb/s
Address: 0x00**
Max payload: 32
CRC length: 0

STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0x0000 0xc2c2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe7e7
RX_PW_P0-6 = 0x20 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x03
RF_CH = 0x39
RF_SETUP = 0x07
CONFIG = 0x07
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = Disabled
PA Power = PA_MAX

Listening...
0a a0cc4700000000 000000
0a 58ce4700000000 00001d
0a 700b4800000000 000000
0a 404a4800000000 000000
0a f84b4800000000 000000
0a 18894800000000 000000
0a c88a4800000000 000002
0a f8c74800000000 000000
0a c0064900000000 000000
0a 50454900000000 000000
0a 08474900000000 0b0001
0a 28844900000000 000000
0a e0854900000000 000001
0a f0c24900000000 000000
0a a8c44900000000 000000
0a c0014a00000000 000000
0a 78034a00000000 000000
0a 90404a00000000 000000
0a 687f4a00000000 000000
0a 18814a00000000 000000
0a 10be4a00000000 000000
0a c8bf4a00000000 000003
0a d8fc4a00000000 000000
0a 90fe4a00000000 000000
0a 70074b00000000 000003
0a 983b4b00000000 000000

Aber es gibt noch Hoffnung. Auf eBay und Deal Extreme finden sich auch fertige A7105 Module. Auch eine Arduino Library gibt es für diesen Chip. Ein Paar wurde bereits bei Deal Extreme geordert.

Fazit

Leider klappt es mit dem zur Verfügung stehenden NRF24L01 nicht, die Pakete vom RF-603 Funkauslöser zu entschlüsseln. Immerhin konnte der zu sendende Kanal und der mit den DIP Schaltern einzustellende Kanalbereich gefunden werden. Theoretisch ließe sich der NRF24L01 als reiner Empfänger oder Tochterblitz-Auslöser verwenden. Man kann zwar nicht unterscheiden, ob der Auslöser ganz oder nur halb gedrückt wurde. Aber das der Taster gedrückt wurde, bekommt man schon einigermaßen sicher heraus.

Bleibt erst mal abzuwarten, bis die A7105 Module eintreffen. Es bleibt also spannend.

Wird fortgesetzt.

Der verwendete Programmcode ist zu finden unter:
https://github.com/robotfreak/dfhacks/tree/master/Arduino/Yongnuo

2 Antworten auf „Yongnuo RF-603 Funkprotokoll – Teil 1“

  1. Schön, mittlerweile hast Du es gemerkt, NRF24 und 7105 sind inkompatibel 😉

    Meine 7105 Module hatte ich bei banggood bestellt, meinem aktuellen DX-Substitut für MC&Co.

    Wirf mal einen Blick auf die Seiten von rcgroups.com bzw. deviationtx, Hintergrund Flysky/Hubsan Protokoll-Hacking, vielleicht findest Du dort ein paar Tips.
    Hier ein Einstiegslink:
    http://www.rcgroups.com/forums/showthread.php?t=1954078
    Viel Erfolg!

    PS: Danke für den Tip mit den SIlentSTepSticks, bislang kannte ich nur den TMC360

    1. Danke für den Link. Den Thread hatte ich auch schon entdeckt. Derzeit wühle ich mich durch Datenblatt, Foren Threads und Beispiel Code. Die DX Module sind inzwischen auch schon eingetroffen. Das Lesen und Schreiben in die A7105 Chip Register klappt schon mal. Als nächstes möchte ich so eine Art Sniffer basteln, wie für den NRF24L01. Falls das nicht klappt, werde ich versuchen auf der SPI Schnittstelle des Yongnuos Transceivers mit zu lauschen.

      LG Peter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

zehn + neunzehn =