
Nordic Semiconductor nRF24LU1+ ベースのUSBドングルおよびブレイクアウトボード向けのファームウェアと研究ツール。
Nordic Semiconductor nRF24LU1+ ベースの USB ドングルおよびブレイクアウトボード向けのファームウェアと研究ツール。
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
以下のハードウェアはテスト済みで、動作が確認されています。
make
nRF24LU1+ チップには、フラッシュメモリの最上位2KBを占める工場出荷時プログラム済みブートローダーが搭載されています。CrazyRadio ファームウェアと RFStorm 研究用ファームウェアは、Nordic ブートローダーに入るための USB コマンドをサポートしています。
以下のいずれかのファームウェアが動作している場合、ドングルとブレイクアウトボードは USB 経由でプログラムできます:
USB 経由でファームウェアを書き込むには:
sudo make install
最も一般的な Unifying ドングルは nRF24LU1+ ベースですが、中には Texas Instruments のチップを使用しているものもあります。 このファームウェアは、型番が C-U0007 の nRF24LU1+ バリアントのみでサポートされています。書き込み スクリプトは接続されたドングルの種類を自動的に検出し、nRF24LU1+ バリアントのみに書き込みを試みます。
Logitech Unifying ドングルに USB 経由でファームウェアを書き込むには:
sudo make logitech_install
RQR_012_005_00028.hex のような名前の Logitech ファームウェアイメージをダウンロードして展開します。次に、以下のコマンドを実行して Logitech ファームウェアをドングルに書き込みます:
sudo ./prog/usb-flasher/logitech-usb-restore.py [path-to-firmware.hex]
ドングルやブレイクアウトボードが文鎮化した場合、代替として Teensy を使用して SPI 経由でプログラムできます。
これは Teensy 3.1/3.2 でのみテストされていますが、他の Arduino 互換ボードでも動作する可能性が高いです。
platformio run --project-dir teensy-flasher --target upload
sudo make spi_install
疑似プロミスキャスモードのデバイス発見ツール。チャンネルリストをスイープし、デコードされた Enhanced Shockburst パケットを出力します。
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
チャンネル1〜5でデバイスをスキャン
./nrf24-scanner.py -c {1..5}
0xA9 で始まるアドレスを持つデバイスを全チャンネルでスキャン
./nrf24-scanner.py -p A9
デバイス追跡型スニファー。特定の nRF24 デバイスがホッピングする際に追跡し、そのデバイスからのデコードされた Enhanced Shockburst パケットを出力します。
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]
アドレス 61:49:66:82:03 からのパケットを全チャンネルでスニッフィング
./nrf24-sniffer.py -a 61:49:66:82:03
スター型ネットワークマッパー。指定されたアドレスの最後のバイトを変更し、チャンネルリスト内の各チャンネルで256個の可能なアドレスそれぞれに ping を送信して、スター型ネットワーク内のアクティブなアドレスを発見しようとします。
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]
アドレス 61:49:66:82:03 が属するスター型ネットワークをマッピング
./nrf24-network-mapper.py -a 61:49:66:82:03
nRF24LU1+ チップには、連続トーンを送信するテストメカニズムが含まれており、SDR にアクセスできればその周波数を検証できます。デバイス間の周波数オフセットが予期しない動作を引き起こす可能性があります。例えば、テストした SparkFun ブレイクアウトボードの1つは約300kHzの周波数オフセットがあり、そのため隣接する2つのチャンネルでパケットを受信していました。
このスクリプトは、渡された最初のチャンネルでトランシーバーにトーンを送信させます。
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)
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 |