
Firmware et outils de recherche pour les dongles USB et cartes de développement basés sur le Nordic Semiconductor nRF24LU1+.
Firmware et outils de recherche pour les clés USB et cartes de dérivation basées sur le nRF24LU1+ de Nordic Semiconductor.
Installer les dépendances sur 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
Le matériel suivant a été testé et est connu pour fonctionner.
make
Les puces nRF24LU1+ sont livrées avec un bootloader programmé en usine occupant les 2 Ko supérieurs de la mémoire flash. Le firmware CrazyRadio et le firmware de recherche RFStorm prennent en charge les commandes USB pour entrer dans le bootloader Nordic.
Les dongles et les cartes de dérivation peuvent être programmés via USB s'ils exécutent l'un des firmwares suivants :
Pour flasher le firmware via USB :
sudo make install
Les dongles Unifying les plus courants sont basés sur le nRF24LU1+, mais certains utilisent des puces de Texas Instruments. Ce firmware n'est pris en charge que sur les variantes nRF24LU1+, dont le numéro de modèle est C-U0007. Le script de flash détectera automatiquement le type de dongle branché et ne tentera de flasher que les variantes nRF24LU1+.
Pour flasher le firmware via USB sur un dongle Logitech Unifying :
sudo make logitech_install
Téléchargez et extrayez l'image du firmware Logitech, qui sera nommée RQR_012_005_00028.hex ou similaire. Ensuite, exécutez la commande suivante pour flasher le firmware Logitech sur le dongle :
sudo ./prog/usb-flasher/logitech-usb-restore.py [chemin-vers-firmware.hex]
Si votre dongle ou votre carte de dérivation est brické(e), vous pouvez également la programmer via SPI à l'aide d'un Teensy.
Cela n'a été testé qu'avec un Teensy 3.1/3.2, mais cela devrait probablement fonctionner avec d'autres variantes Arduino également.
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
Outil de découverte d'appareils en mode pseudo-promiscuité, qui balaie une liste de canaux et affiche les paquets Enhanced Shockburst décodés.
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
Rechercher des appareils sur les canaux 1 à 5
./nrf24-scanner.py -c {1..5}
Rechercher des appareils dont l'adresse commence par 0xA9 sur tous les canaux
./nrf24-scanner.py -p A9
Sniffer suiveur d'appareil, qui suit un périphérique nRF24 spécifique lors de ses sauts de fréquence et affiche les paquets Enhanced Shockburst décodés provenant de l'appareil.
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]
Sniffez les paquets de l'adresse 61:49:66:82:03 sur tous les canaux
./nrf24-sniffer.py -a 61:49:66:82:03
Mappeur de réseau en étoile, qui tente de découvrir les adresses actives d'un réseau en étoile en modifiant le dernier octet de l'adresse donnée et en envoyant un ping à chacune des 256 adresses possibles sur chaque canal de la liste des canaux.
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]
Cartographier le réseau en étoile auquel appartient l'adresse 61:49:66:82:03
./nrf24-network-mapper.py -a 61:49:66:82:03
Les puces nRF24LU1+ incluent un mécanisme de test permettant d'émettre une tonalité continue, dont la fréquence peut être vérifiée si vous avez accès à un SDR. Il existe un risque que les écarts de fréquence entre les appareils provoquent un comportement inattendu. Par exemple, l'une des cartes de dérivation SparkFun testées présentait un écart de fréquence d'environ 300 kHz, ce qui l'a amenée à recevoir des paquets sur deux canaux adjacents.
Ce script fera émettre au émetteur-récepteur une tonalité sur le premier canal passé en argument.
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)
Émettre une tonalité continue à 2405 MHz
./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 |