
Firmware y herramientas de investigación para dongles USB y placas de desarrollo basados en el nRF24LU1+ de Nordic Semiconductor.
Firmware y herramientas de investigación para dongles USB y placas de desarrollo basados en Nordic Semiconductor nRF24LU1+.
Instala las dependencias en 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
El siguiente hardware ha sido probado y se sabe que funciona.
make
Los chips nRF24LU1+ incluyen un bootloader programado de fábrica que ocupa los 2KB superiores de la memoria flash. El firmware CrazyRadio y el firmware de investigación RFStorm admiten comandos USB para entrar en el bootloader de Nordic.
Los dongles y las placas breakout se pueden programar por USB si ejecutan uno de los siguientes firmwares:
Para grabar el firmware por USB:
sudo make install
Los dongles Unifying más comunes están basados en el nRF24LU1+, pero algunos usan chips de Texas Instruments. Este firmware solo es compatible con las variantes nRF24LU1+, cuyo número de modelo es C-U0007. El script de grabación detectará automáticamente qué tipo de dongle está conectado y solo intentará grabar las variantes nRF24LU1+.
Para grabar el firmware por USB en un dongle Logitech Unifying:
sudo make logitech_install
Descarga y extrae la imagen del firmware de Logitech, que se llamará RQR_012_005_00028.hex o similar. A continuación, ejecuta el siguiente comando para grabar el firmware de Logitech en el dongle:
sudo ./prog/usb-flasher/logitech-usb-restore.py [path-to-firmware.hex]
Si tu dongle o placa breakout está bloqueado (bricked), puedes programarlo alternativamente por SPI con un Teensy.
Esto solo se ha probado con un Teensy 3.1/3.2, pero es probable que funcione también con otras variantes de Arduino.
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
Herramienta de descubrimiento de dispositivos en modo pseudo-promiscuo, que recorre una lista de canales e imprime paquetes Enhanced Shockburst decodificados.
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
Escanea dispositivos en los canales 1-5
./nrf24-scanner.py -c {1..5}
Escanea dispositivos con una dirección que comience en 0xA9 en todos los canales
./nrf24-scanner.py -p A9
Sniffer de seguimiento de dispositivos, que sigue a un dispositivo nRF24 específico mientras cambia de canal e imprime los paquetes Enhanced Shockburst decodificados del 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]
Captura paquetes de la dirección 61:49:66:82:03 en todos los canales
./nrf24-sniffer.py -a 61:49:66:82:03
Mapeador de redes en estrella, que intenta descubrir las direcciones activas en una red en estrella cambiando el último byte de la dirección dada y haciendo ping a cada una de las 256 direcciones posibles en cada canal de la lista de canales.
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]
Mapea la red en estrella a la que pertenece la dirección 61:49:66:82:03
./nrf24-network-mapper.py -a 61:49:66:82:03
Los chips nRF24LU1+ incluyen un mecanismo de prueba para transmitir un tono continuo, cuya frecuencia puede verificarse si se dispone de un SDR. Existe la posibilidad de que las desviaciones de frecuencia entre dispositivos provoquen comportamientos inesperados. Por ejemplo, una de las placas breakout de SparkFun que se probaron tenía una desviación de frecuencia de ~300 kHz, lo que provocaba que recibiera paquetes en dos canales adyacentes.
Este script hará que el transceptor transmita un tono en el primer canal que se pase.
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)
Transmite un tono continuo a 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 |