OOK Sniffer PIC16/18F CC1101


#1

Ich hoffe es ist okay, wenn ich hier ein neues Thema eröffne. Ich dachte es passt nicht zum URH und verdient ein eigenes.

Hier möchte ich euch mein OOK Sniffer Projekt vorstellen. Da ich in letzter Zeit ein paar defekte Garagenöffner hatte, wollte ich mir das mal genauer anschauen. Bei den meisten Funksendern sind die Typenbezeichnungen der IC’s entfernt oder mit eigenen Bezeichnungen wie ‘FAAC SL…’ versehen, deshalb wollte ich ein Universal Gerät bauen.

Und, es ist einfacher als gedacht…

Als Funkmodule kommen die beliebten und bekannten CC1101 zum Einsatz, es gibt sie in fast allen Frequenz-Variationen und kosten rund 6 $, also wirklich billig. (Das soll keine Werbung für Waveshare sein)

Die Konfiguration wird mit RFStudo von TI und über die SPI Schnittstelle gemacht. RFStudio erlaubt es, die Konfig zu exportieren.

Zum Sniffer selbst:

CC1101 unterstützt sehr viele Modi wie ASK/OOK, FSK, MSK etc. Dazu Preamble, Sync-Word, Manchester etc. Wenn wir einen Sniffer bauen für OOK, wissen wir nur, dass es ein ON/OFF Keying ist, aber keine Baudrate, keine Preamble, kein Sync Wort.

Wir nutzen diese Funktionen also nicht und schalten den CC in den asynchronen seriellen Modus und ASK/OOK. Das bedeutet, die RX und TX Bits liegen nicht im FIFO welcher über die SPI Schnittstelle zugänglich ist, sondern werden an den GDOx Pins eingelesen oder ausgegeben.

Wir müssen also die Decodierung am Controller selbst machen. Die meisten Fernbedienungen im OOK Mode hatten ca. 1200 Baud. Wir stellen den CC also auf 4800 ein, dann können wir bis 2400 Baud problemlos lesen, natürlich geht auch mehr…

Mein Prototyp hat zwei Funktionen, sniffen und senden. Die ge-snifften Daten werden im Eeprom des PIC’s abgelegt und sind nach einem Neustart auch noch da.

Das Einfache an der Sache: Uns interessiert es eigentlich nicht, wie der Aufbau ist, sprich Preamble, Sync Word Daten. Wir messen die Länge der High und die der Low und legen diese im Eeprom ab.

Momentan läuft das ganze auf einem 18F45k22 PIC, werde heute das noch auf einem 16F873 anpassen.

Genauere Erklärung inkl. Schatlplan und Sourcecode folgt.

Nachtrag:

Hab schnell ein Layout erstellt, nicht schön aber es sollte funktionieren.

Ich bin noch einen Schritt weiter. Da die Module wirklich nicht teuer sind, dachte ich warum nicht zwei aufs Board :wink:
So wird ein Modul auf RX Konfiguriert, während das andere im TX Modus ein Störsignal auf einer leicht versetzten Frequenz sendet.

Stichwort: Rolling Code
Ich konnte bereits einen erfolgreichen Test machen, muss aber die Konfig von den CC1101 noch etwas anpassen.


#2

Ich habe nun mal ein neues Layout erstellt und den PIC18F442 gewählt, da er in PLC44 Form verfügbar ist.

Am Board sind zwei CC1101 Module, ein Pin Header für ein LCD Display (3.3V), ein LM317 für die 3.3V Spannungsversorgung und ein Header für die UART und eine LED.

Die PINS in der Mitte des PLC44 Sockels habe ich vorsorglich gelegt um eventuell eine zweite Platine darunter zu verbinden.

Der 18F442 erhält einen seriellen Bootloader um ihn in der Schaltung bespielen zu können. Sollte dieser mal einen defekt ausweisen, ist es auch kein Drama den PIC aus dem Sockel zu nehmen.

Daher habe ich auf eine ICSP Schnittstelle verzichtet.

Hier das Layout:

bauteilseite.pdf (68,4 KB)

lotseite.pdf (68,1 KB)

Wer Interesse hat, kann sich gerne melden, werde in den nächsten zwei Wochen die Platinen in Auftrag geben. Sind sehr günstig und kosten meist nicht einmal 20 CHF. Gerne könnt ihr auch fertig bestückte Platinen mit dem Bootloader vorinstalliert haben zum Selbstkostenpreis natürlich.

Mit einem kleinen Windows Programm und einem RS232 Wandler könnt ihr dann ganz einfach Software einspielen.

Ganz kurz zum Thema Rolling Code:

Wer im Netz sucht, wird einige Beiträge in Englisch finden. Dabei geht es grundsätzlich darum, dass Handsender von z.B. Autos hohen Temperaturunterschieden unterliegen. Aus diesem Grund sind die Empfänger der Fahrzeuge/Tore sehr hellhörig, haben somit einen breiten Empfangsbereich um den Drift des Senders “auszugleichen”.

Sendet man nun ein Signal neben der Frequenz des eigentlichen Handsenders und noch im Empfangsbereich des Empfängers, so wird die Übermittlung des Handsender als inkorrekt eingestuft, obwohl es die richtige Kodierung hat.

Drückt der Proband nun ein zweites mal auf die Taste, so wird der nächste Code gesendet, welcher wiederum gültig ist aber durch das neben liegende Störsignal als nicht gültig erscheint.

Nun sendet der Sniffer das erste Signal ohne Störsignal und das Fahrzeug wird verschlossen, da dieser ja noch gültig ist. Im Speicher des Sniffers befindet sich aber noch der zweite Code, welcher gültig ist und zum entsperren verwendet werden kann.

Da ich niemanden unterstützen möchte um illegale Dinge zu machen, bitte ich um Nachsicht, dass ich den Code dafür nicht veröffentlichen werde. Für mich ist das ein rein wissenschaftliches Projekt welches ich nur ein meinen eigenen Fahrzeugen teste.

Mitglieder von Coredump können sich diesbezüglich bei mir melden.

Nachtrag: Hab jetzt noch einen Mikrosd Slot eingefügt. Kann nicht schaden die Daten auf die SD zu schreiben um sie später am Rechner zu analysieren.

roema


#3

Klingt spannend :slight_smile: Ich habe momentan leider keine Verwendung dafür (besitze weder ein Auto noch eine Garage… :wink:)

Wo bestellst du deine Boards? Für Einzelstücke lohnt sich http://platinenshop.ch/, für Prototypen-Serien bestelle ich meistens bei Seeed oder EasyEDA.


#4

Ich lasse meine Platinen immer im platinenshop.ch machen.
Sind sehr günstig und schnell geliefert.

Achte aber auch immer darauf nur einseitige Platinen zu entwerfen, sofern es möglich ist.

Werd mir mal seed anschauen. Bin an einer Nixie Clock dran und es lasst sich nicht vermeiden eine mehrschichtige Platine zu machen.

HEY!!! Seed ist ja komplett genial!!!

Endlich nimmt jemand meine Gerber Files! Danke für den Tip!!!


#5

Hello roema,
after i finish my new topic i see one sugested topic with CC1101.
from your topic i know you have used the cc1101 in ask mode.
Could you please send me your config for it - it would help me much.
Also i did’nt know which RX bandwidth i should use in settings.
Could you help me to find the rigth setting?

Best regards,
Frank