
Ferramentas de firmware e pesquisa para dongles USB e placas breakout baseadas no nRF24LU1+ da Nordic Semiconductor.
Firmware e ferramentas de pesquisa para dongles USB e placas de desenvolvimento baseados no nRF24LU1+ da Nordic Semiconductor.
Instale as dependências no 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
O seguinte hardware foi testado e funciona.
make
Os chips nRF24LU1+ vêm com um bootloader programado de fábrica ocupando os 2KB superiores da memória flash. O firmware CrazyRadio e o firmware de pesquisa RFStorm suportam comandos USB para entrar no bootloader da Nordic.
Dongles e placas de desenvolvimento podem ser programados via USB se estiverem executando um dos seguintes firmwares:
Para gravar o firmware via USB:
sudo make install
Os dongles Unifying mais comuns são baseados no nRF24LU1+, mas alguns usam chips da Texas Instruments. Este firmware é suportado apenas nas variantes nRF24LU1+, que possuem número de modelo C-U0007. O script de gravação detectará automaticamente qual tipo de dongle está conectado e só tentará gravar as variantes nRF24LU1+.
Para gravar o firmware via USB em um dongle Logitech Unifying:
sudo make logitech_install
Baixe e extraia a imagem do firmware Logitech, que será nomeada RQR_012_005_00028.hex ou similar. Em seguida, execute o seguinte comando para gravar o firmware Logitech no dongle:
sudo ./prog/usb-flasher/logitech-usb-restore.py [caminho-para-firmware.hex]
Se o seu dongle ou placa de desenvolvimento estiver brickado, você pode alternativamente programá-lo via SPI usando um Teensy.
Isso foi testado apenas com um Teensy 3.1/3.2, mas provavelmente funcionará com outras variantes Arduino também.
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
Ferramenta de descoberta de dispositivos em modo pseudo-promíscuo, que varre uma lista de canais e imprime pacotes 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
Varra dispositivos nos canais 1 a 5
./nrf24-scanner.py -c {1..5}
Varra dispositivos com um endereço começando em 0xA9 em todos os canais
./nrf24-scanner.py -p A9
Sniffer de rastreamento de dispositivo, que segue um dispositivo nRF24 específico enquanto ele salta de canal e imprime pacotes Enhanced Shockburst decodificados do 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]
Capture pacotes do endereço 61:49:66:82:03 em todos os canais
./nrf24-sniffer.py -a 61:49:66:82:03
Mapeador de rede em estrela, que tenta descobrir os endereços ativos em uma rede em estrela alterando o último byte do endereço fornecido e enviando ping para cada um dos 256 endereços possíveis em cada canal da lista de canais.
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]
Mapeie a rede em estrela à qual o endereço 61:49:66:82:03 pertence
./nrf24-network-mapper.py -a 61:49:66:82:03
Os chips nRF24LU1+ incluem um mecanismo de teste para transmitir um tom contínuo, cuja frequência pode ser verificada se você tiver acesso a um SDR. Existe a possibilidade de offsets de frequência entre dispositivos causarem comportamento inesperado. Por exemplo, uma das placas de desenvolvimento SparkFun testadas tinha um offset de frequência de ~300kHz, o que fez com que ela recebesse pacotes em dois canais adjacentes.
Este script fará o transceptor transmitir um tom no primeiro canal informado.
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)
Transmitir um tom contínuo 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 |