
Firmware- und Forschungswerkzeuge für USB-Dongles und Breakout-Boards auf Basis des Nordic Semiconductor nRF24LU1+.
Firmware und Forschungs-Tools für USB-Dongles und Breakout-Boards auf Basis des Nordic Semiconductor nRF24LU1+.
Abhängigkeiten unter Ubuntu installieren:
sudo apt-get install sdcc binutils python python-pip
sudo pip install -U pip
sudo pip install -U -I pyusb
sudo pip install -U platformio
Die folgende Hardware wurde getestet und funktioniert nachweislich.
make
nRF24LU1+-Chips verfügen über einen werksseitig programmierten Bootloader, der die obersten 2 KB des Flash-Speichers belegt. Die CrazyRadio-Firmware und die RFStorm-Forschungsfirmware unterstützen USB-Befehle, um den Nordic-Bootloader aufzurufen.
Dongles und Breakout-Boards können über USB programmiert werden, wenn sie eine der folgenden Firmwares ausführen:
Um die Firmware über USB zu flashen:
sudo make install
Die gängigsten Unifying-Dongles basieren auf dem nRF24LU1+, einige verwenden jedoch Chips von Texas Instruments. Diese Firmware wird nur auf den nRF24LU1+-Varianten unterstützt, die eine Modellnummer von C-U0007 haben. Das Flash- Skript erkennt automatisch, welcher Typ von Dongle angeschlossen ist, und versucht nur, die nRF24LU1+-Varianten zu flashen.
Um die Firmware über USB auf einen Logitech-Unifying-Dongle zu flashen:
sudo make logitech_install
Laden Sie das Logitech-Firmware-Image herunter und extrahieren Sie es; es wird RQR_012_005_00028.hex oder ähnlich heißen. Führen Sie dann den folgenden Befehl aus, um die Logitech-Firmware auf den Dongle zu flashen:
sudo ./prog/usb-flasher/logitech-usb-restore.py [path-to-firmware.hex]
Wenn Ihr Dongle oder Breakout-Board gebrickt ist, können Sie es alternativ über SPI mit einem Teensy programmieren.
Dies wurde nur mit einem Teensy 3.1/3.2 getestet, funktioniert aber wahrscheinlich auch mit anderen Arduino-Varianten.
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
Pseudo-promiskuitives Geräteerkennungstool, das eine Liste von Kanälen durchläuft und dekodierte Enhanced-Shockburst-Pakete ausgibt.
usage: ./nrf24-scanner.py [-h] [-c N [N ...]] [-v] [-l] [-p PREFIX] [-d DWELL]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-p PREFIX, --prefix PREFIX Promiscuous mode address prefix
-d DWELL, --dwell DWELL Dwell time per channel, in milliseconds
Nach Geräten auf den Kanälen 1–5 suchen
./nrf24-scanner.py -c {1..5}
Nach Geräten mit einer Adresse, die mit 0xA9 beginnt, auf allen Kanälen suchen
./nrf24-scanner.py -p A9
Geräteverfolgender Sniffer, der einem bestimmten nRF24-Gerät beim Hopping folgt und dekodierte Enhanced-Shockburst-Pakete des Geräts ausgibt.
usage: ./nrf24-sniffer.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Pakete von Adresse 61:49:66:82:03 auf allen Kanälen mitschneiden
./nrf24-sniffer.py -a 61:49:66:82:03
Sternnetzwerk-Mapper, der versucht, die aktiven Adressen in einem Sternnetzwerk zu ermitteln, indem er das letzte Byte der angegebenen Adresse verändert und jede der 256 möglichen Adressen auf jedem Kanal in der Kanalliste anpingt.
usage: ./nrf24-network-mapper.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-p PASSES] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Known address
-p PASSES, --passes PASSES Number of passes (default 2)
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Das Sternnetzwerk kartieren, zu dem die Adresse 61:49:66:82:03 gehört
./nrf24-network-mapper.py -a 61:49:66:82:03
Die nRF24LU1+-Chips enthalten einen Testmechanismus zum Senden eines Dauertons, dessen Frequenz verifiziert werden kann, wenn Sie Zugang zu einem SDR haben. Es besteht die Möglichkeit, dass Frequenzversätze zwischen Geräten zu unerwartetem Verhalten führen. Beispielsweise hatte eines der getesteten SparkFun-Breakout-Boards einen Frequenzversatz von ~300 kHz, wodurch es Pakete auf zwei benachbarten Kanälen empfing.
Dieses Skript veranlasst den Transceiver, einen Ton auf dem ersten übergebenen Kanal zu senden.
usage: ./nrf24-continuous-tone-test.py [-h] [-c N [N ...]] [-v] [-l]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
Einen Dauerton bei 2405 MHz senden
./nrf24-continuous-tone-test.py -c 5
| Teensy | CrazyRadio PA | Sparkfun nRF24LU1+ Breakout |
|---|
| GND | 9 | GND |
| 8 | 3 | RESET |
| 9 | 2 | PROG |
| 10 | 10 | P0.3 |
| 11 | 6 | P0.1 |
| 12 | 8 | P0.2 |
| 13 | 4 | P0.0 |
| 3.3V | 5 | VIN |