
Strumenti firmware e di ricerca per dongle USB e breakout board basati su Nordic Semiconductor nRF24LU1+.
Firmware e strumenti di ricerca per dongle USB e breakout board basati su Nordic Semiconductor nRF24LU1+.
Installa le dipendenze su Ubuntu:
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
Il seguente hardware è stato testato e funziona.
make
I chip nRF24LU1+ vengono forniti con un bootloader programmato in fabbrica che occupa i 2KB superiori della memoria flash. Il firmware CrazyRadio e il firmware di ricerca RFStorm supportano i comandi USB per accedere al bootloader Nordic.
I dongle e le breakout board possono essere programmati via USB se eseguono uno dei seguenti firmware:
Per eseguire il flash del firmware via USB:
sudo make install
I dongle Unifying più comuni sono basati sul nRF24LU1+, ma alcuni utilizzano chip di Texas Instruments. Questo firmware è supportato solo sulle varianti nRF24LU1+, che hanno un numero di modello C-U0007. Lo script di flashing rileverà automaticamente il tipo di dongle collegato e tenterà di eseguire il flash solo sulle varianti nRF24LU1+.
Per eseguire il flash del firmware via USB su un dongle Logitech Unifying:
sudo make logitech_install
Scarica ed estrai l'immagine del firmware Logitech, che avrà un nome simile a RQR_012_005_00028.hex. Quindi, esegui il seguente comando per flashare il firmware Logitech sul dongle:
sudo ./prog/usb-flasher/logitech-usb-restore.py [path-to-firmware.hex]
Se il tuo dongle o la tua breakout board è brickata, puoi in alternativa programmare il dispositivo via SPI utilizzando un Teensy.
Questo è stato testato solo con un Teensy 3.1/3.2, ma è probabile che funzioni anche con altre varianti Arduino.
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
Strumento di scoperta dei dispositivi in modalità pseudo-promiscua, che scandisce un elenco di canali e stampa i pacchetti Enhanced Shockburst decodificati.
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
Esegui la scansione dei dispositivi sui canali da 1 a 5
./nrf24-scanner.py -c {1..5}
Esegui la scansione dei dispositivi con un indirizzo che inizia con 0xA9 su tutti i canali
./nrf24-scanner.py -p A9
Sniffer di inseguimento del dispositivo, che segue uno specifico dispositivo nRF24 mentre cambia canale e stampa i pacchetti Enhanced Shockburst decodificati provenienti dal dispositivo.
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]
Cattura i pacchetti dall'indirizzo 61:49:66:82:03 su tutti i canali
./nrf24-sniffer.py -a 61:49:66:82:03
Mapper di reti a stella, che tenta di scoprire gli indirizzi attivi in una rete a stella modificando l'ultimo byte dell'indirizzo dato e inviando un ping a ciascuno dei 256 possibili indirizzi su ogni canale dell'elenco dei canali.
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]
Mappa la rete a stella a cui appartiene l'indirizzo 61:49:66:82:03
./nrf24-network-mapper.py -a 61:49:66:82:03
I chip nRF24LU1+ includono un meccanismo di test per trasmettere un tono continuo, la cui frequenza può essere verificata se si ha accesso a un SDR. Esiste la possibilità che gli offset di frequenza tra i dispositivi causino comportamenti imprevisti. Ad esempio, una delle breakout board SparkFun testate aveva un offset di frequenza di ~300kHz, che le faceva ricevere pacchetti su due canali adiacenti.
Questo script farà sì che il ricetrasmettitore trasmetta un tono sul primo canale passato come argomento.
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)
Trasmette un tono continuo a 2405MHz
./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 |