De YARD Stick One is een compacte "Hardware Defined Radio" die kan zenden en ontvangen in de UHF-band. Het lijkt op een soort break-out board (BoB), maar met een USB-interface om het gebruik op grote hosts zoals PC's en Raspberry Pi's mogelijk te maken. De Yard Stick One wordt geleverd met USB-software vooraf geïnstalleerd in zijn 8051 kern. De radio wordt bestuurd door het configureren van enkele tientallen registers, maar de Python middleware kan er veel details uit halen.

YARD Stick One Supports Sending and Receiving

Het belangrijkste voordeel van de YARD Stick One is dat het een van de goedkopere apparaten is (vergeleken met de HackRF or LimeSDR) dat ook kan zenden en min of meer "plug and play" werkt. De gewone, goedkope tools zoals de RTL SDR dongles kunnen alleen ontvangen.

Omdat alle low-level functies zijn geïmplementeerd door een CC1111 chip, is het gebruik van de radio een kwestie van de juiste waarden naar de configuratieregisters te sturen. De CC1111 is bedoeld voor complexe laag 2-protocollen, met functies als sync-woorden, framing, interleave en scrambling. Omdat de CC1111 is ontworpen als een SoC voor commerciële RF-toepassingen, is het gebruik van de YARD Stick One voor signaalanalyse zeer beperkt. Tenzij het te testen systeem een soortgelijke SoC gebruikt, is het minder frustrerend en goedkoper om een SDR te gebruiken.

De YARD Stick One wordt alleen ondersteund door rfcat, een op Python gebaseerde middleware die de meest gebruikte opties abstraheert in een soort beschrijvende methoden. Voor fine-tuning kan rfcat de registers ook direct configureren.

Bij levering is de stick een kale print, en moet het met de nodige zorg worden behandeld. Behuizingen van derden zijn beschikbaar.

De term "Sub 1 GHz" is een beetje overdreven; de werking van de YARD Stick One is beperkt door de TI CC1111 radio, die de lagere UHF ISM banden dekt: 300-928 MHz. De 13.56 MHz band, gebruikt voor RFID, valt daarbuiten.

De YARD Stick One werkt iets stabieler op Linux dan op Windows 10. Windows herkent de stick vaak helemaal niet, maar Linux komt weg met herhaaldelijk loskoppelen en verbinden van de stick.

Software-installatie

Het gebruik van de YARD Stick One vereist een goed begrip van de OSI-lagen 1 en 2. Enige kennis van Python en vertrouwdheid met het gebruikte OS is handig om installatieproblemen op te lossen. De in de Elektor-winkel aanbevolen software werd geïnstalleerd op Windows 10, Kali en Ubuntu 18.
 
Installatie van rfcat op Linux met Python 3.10 werkte goed. Het enige verschil met de documentatie was dat rfcat moet worden gestart met 
 
./rfcat

Bij een "Error in resetup()", de stick loskoppelen en opnieuw verbinden.

Windows 10: installeer Python niet via de appstore, want dat verknoeit de bestandsrechten, maar installeer handmatig voor alle gebruikers. Verder:
 
pip install Cython

Installeer met admin rechten (zie waar de Linux instructies sudo vereisen). En heb een VC >14 geïnstalleerd.

 Vereiste aanpassing als je een foutmelding krijgt over "collections not callable": voeg .abc toe in C:\Program Files\Python310\Lib\site-packages\pyreadline\py3k_compat.py line 8: 
 
        return isinstance(x, collections.abc.Callable)

pyreadline zou alleen nodig zijn voor Windows.

Installeer de libusb-win32 driver; de eenvoudigste manier is waarschijnlijk met "Zadig", dat meestal wordt meegeleverd met SDR#. Als de stick afwezig is, krijg je de "No Dongle Found" exception van rfcat.

Bij een "ChipconUsbTimeoutException" moet je de stick loskoppelen en opnieuw verbinden.

Al met al is de installatie en het gebruik op Windows 10 wat lastiger dan op Linux.

De in de CC1111 gebruikte controller is een MCS51-variant en vereist een SDCC-compiler versie 3.5 of lager. Dit vergt wat extra werk bij de installatie, omdat de huidige versie 4.x is. Veel gebruikers zullen echter gewoon de rfcat firmware gebruiken.

Gebruik van de YARD Stick One

De CC1111-radio doet al het low-level werk, het toevoegen en verwijderen van pre- en post-ambles, sync-woorden, CRC, plus modulatie en demodulatie. De radio moet volledig geconfigureerd zijn voor gebruik, want de reset-configuratie is nutteloos. Het schrijven van een klein Python-programma zoals beschreven in [5] bespaart veel typewerk en fouten.
yard stick one image002.png
Figuur 1: Rfcat spectrum.

Rfcat kan ook het spectrum weergeven. Het een "analyser" te noemen is een beetje overdreven. De meeste eenvoudige instrumenten hebben een beperkte bandbreedte en dynamisch bereik, in tegenstelling tot zwaargewichten zoals de HP141 of HP181 die 1 GHz bandbreedte kunnen weergeven bij een dynamisch bereik van 80 dB.

Om de YARD Stick One als ontvanger te gebruiken, moeten de eigenschappen van laag 1 en laag 2 correct worden geconfigureerd, anders zal de radio het pakket negeren. Om een onbekend signaal te analyseren is een extra SDR nodig, de goedkoopste hardware daarvoor zijn de RTL dongles. Naast het gebruik van GNU Radio en Audacity, zoals getoond in [3], biedt de Universal Radio Hacker een meer geïntegreerde workflow voor signaalanalyse en replay.

Als alternatief kan de set-up van de radiochip van de peer van de hardware-interface worden betrokken als het type chip bekend is, zoals getoond in [1].

Het gebruik van de YARD Stick One als standaard ontvanger is nogal lastig: bij te algemene instellingen wordt veel ruis ontvangen, bij te krappe instellingen wordt alles weg gefilterd. Het zou kunnen werken met een variabele verzwakker aan de ingang, maar die had ik niet bij de hand.

Om te helpen met de configuratie van de vele registers van de CC1111, kan het hulpprogramma SmartRF Studio van TI helpen. De berekende waarden kunnen naar de YARD Stick One worden gestuurd met de juiste setXxx(value) functie.

De firmware zoals die bij de YARD Stick One in de Elektor-winkel wordt geleverd, dient als brug tussen de CC1111-registers en de USB-interface.

Na een Python-exception moet de YARD Stick One worden losgekoppeld en opnieuw verbonden; anders vindt rflib hem niet meer.

Voorbeeld

Het volgende voorbeeld toont een PWM-signaal met ASK-modulatie, wat zeer gebruikelijk is voor eenvoudige afstandsbedieningen. De screenshots zijn van URH.

 
yard stick one image003.png
Figuur 2: PWM-signaal met ASK-modulatie.

Vier binaire cijfers vertegenwoordigen een data bit, een 0 wordt verzonden als 1000 en een 1 als 1110, dus dit moet naar de YARD Stick One worden gestuurd als 8e88888888888888888e8e8e8e8. Eén symbool duurt 0,484 ms, dus de baudrate moet worden ingesteld op 2744.

 
yard stick one image004.png
Figuur 3: Data display.

Documentatie

De documentatie waarnaar de Elektor-shop verwijst, is zeer schaars. Het door Great Scott Gadgets aangegeven forum is niet erg nuttig. De rfcat git repository geeft veel informatie over het creëren en downloaden van de YARD Stick One firmware.

Er zijn enkele tutorials op het internet, zie bijvoorbeeld [3] en [4]. Pas deze aan de lokale regels voor de ISM-band aan.

Conclusie

De YARD Stick One is niet goedkoop voor wat hij biedt en heeft een vrij steile leercurve. De software is instabiel en onvoldoende gedocumenteerd. Alleen voor analyse is een eenvoudige SDR-ontvanger een veel betere keuze. Voor zenden heb je met een standaard SDR transceiver voor €150 meer (bijv. HackRF One of Adalm Pluto).

De YARD Stick One kan van nut zijn als je je concentreert op de specifieke protocollen die door deze familie van radio SoC's worden ondersteund (zie [1] en ook de IM-Me zoals vermeld op de Elektor-site). Voor specifieke toepassingen zou je een CC111x break-out board uit China kunnen overwegen, aangesloten op een Arduino, zodat de lastige USB-communicatie wordt vermeden.

Glossary

Term Explanation
ASK Amplitude Shift Keying
ISM Industrial Scientific Medical. Radiozenders die zonder vergunning mogen worden gebruikt
OOK
On Off Keying, ASK met 100% modulatie.
PWM Pulsbreedtemodulatie
RTL Realtec
SDR Software Defined Radio
SoC System on a Chip.
UHF 300 – 3000 MHz

References

  1. Radio Communication Analysis using RfCat
  2. CC1110Fx / CC1111Fx datasheet
  3. Hacking Everything with RF and Software Defined Radio - Part 1
  4. Hacking Everything with RF and Software Defined Radio - Part 2
  5. https://gist.github.com/JamesHagerman/40f414c5f0db8d476d64f78f9dd3a7b6
  6. Rfcat Helper Scripts in Python 2
Vertaling: Willem den Hollander