
TI CC1352/CC26x2ハードウェア向けのBluetooth 5および4.x LEスニファ。拡張アドバタイズ、全PHYモード、MAC/RSSIフィルタリング、Wireshark互換のPCAPエクスポートに対応。
Sniffle は、TI CC1352/CC26x2 ハードウェアを使用した Bluetooth 5 および 4.x (LE) 向けスニファです。
Sniffle には、次のような便利な機能があります。
ファームウェア用のビルド環境をセットアップする手間をかけたくない場合は、UniFlash/DSLite を使用して事前ビルド済みファームウェアバイナリをフラッシュするだけです。 事前ビルド済みファームウェアバイナリは、このプロジェクトの GitHub リリースタブのリリースに添付されています。事前ビルド済みファームウェアを使用する場合は、master ブランチより古いファームウェアとの互換性の問題を避けるため、master ではなくリリースタグに対応する Python コードを使用してください。
さまざまな Linux ディストリビューションのパッケージマネージャーで提供される arm-none-eabi-gcc は、ヘッダーファイルが不足していたり、リンカー設定の変更が必要だったりすることがよくあります。手間を最小限にするには、上記でリンクした ARM GCC を使用することをお勧めします。事前ビルド済み実行ファイルをダウンロードして展開するだけです。
TI SDK は、ライセンス契約に同意するとソースコードの束を展開する実行可能バイナリとして提供されます。Linux と Mac では、デフォルトのインストールディレクトリは ~/ti/ 内です。これは問題なく機能し、私の makefile はこのパスを期待しているので、ここではデフォルトのままにすることをお勧めします。TI SysConfig ツールについても同様です。
SDK を展開したら、ビルド環境に合わせて 1 つの makefile を編集する必要があります。~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 (または SDK がインストールされた場所) の中に、imports.mak という名前の makefile があります。Sniffle をビルドするためにここで設定する必要があるパスは、GCC、XDC、cmake、SysConfig のみです。CCS コンパイラは必要ありません。以下の diff を例として参照し、インストールした場所に合わせて調整してください。```
diff --git a/imports.mak b/imports.mak
index b2cf5bf59..389d1a7c3 100644
--- a/imports.mak
+++ b/imports.mak
@@ -18,14 +18,14 @@
-XDC_INSTALL_DIR ?= /home/username/ti/xdctools_3_62_01_15_core -SYSCONFIG_TOOL ?= /home/username/ti/ccs1270/ccs/utils/sysconfig_1.21.1/sysconfig_cli.sh +XDC_INSTALL_DIR ?= $(HOME)/ti/xdctools_3_62_01_15_core +SYSCONFIG_TOOL ?= $(HOME)/ti/sysconfig_1.21.1/sysconfig_cli.sh
-CMAKE ?= /home/username/cmake-3.21.3/bin/cmake +CMAKE ?= cmake PYTHON ?= python3
TICLANG_ARMCOMPILER ?= /home/username/ti/ccs1270/ccs/tools/compiler/ti-cgt-armllvm_3.2.2.LTS-0 -GCC_ARMCOMPILER ?= /home/username/arm-none-eabi-gcc/12.3.Rel1-0 +GCC_ARMCOMPILER ?= $(HOME)/arm_tools/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi IAR_ARMCOMPILER ?= /home/username/iar9.50.2
SDKバージョン8.30.01.01以降、最近のバージョンのGCC(およびbinutils)でコンパイルするには、
リンクエラー「Unknown destination type (ARM/Thumb)」および「dangerous relocation: unsupported relocation」を回避するために、
SDKに小さな変更を加える必要があります。```
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
index 187cfd744..4cbf0d384 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
@@ -236,6 +236,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
index 717f49c9a..1c83ed725 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
@@ -226,6 +226,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe
この変更を行った後、SDKを再コンパイルする必要があります。``` cd ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 make build-gcc -j5
### DSLite の入手
DSLite は、XDS110 デバッガ用の TI 製コマンドラインプログラミング/デバッグサーバーツールです。CC26xx および CC13xx Launchpad ボードには、どちらも XDS110 デバッガが搭載されています。残念ながら、TI はスタンドアロンのコマンドライン DSLite のダウンロードを提供していません。DSLite を入手する最も簡単な方法は、TI から [UniFlash](http://www.ti.com/tool/download/UNIFLASH) をインストールすることです。Linux、Mac、Windows で利用できます。DSLite 実行ファイルは、UniFlash のインストールディレクトリからの相対パス `deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite` に配置されます。Linux では、UniFlash のデフォルトのインストールディレクトリは `~/ti/` 内です。
DSLite 実行ファイルのディレクトリを `$PATH` に含めるようにしてください。
## ファームウェアのビルド
GCC、DSLite、SDK がインストールされ動作していれば、Sniffle のビルドは簡単です。`fw` ディレクトリに移動して `make` を実行するだけです。SDK をデフォルトディレクトリにインストールしていない場合は、makefile 内の `SIMPLELINK_SDK_INSTALL_DIR` を編集する必要があるかもしれません。
CC26x2R 以外の Launchpad のバリアント向けにビルドまたはインストールする場合は、make の引数として、または make を呼び出す前に環境変数として `PLATFORM=xxx` を指定する必要があります。`PLATFORM` でサポートされている値は、ファームウェアの makefile に記載されています。別のプラットフォーム向けにビルドする前には、必ず `make clean` を実行してください。
## ファームウェアのインストール (TI Launchpad ボード)
DSLite を使って (接続済みの) CC26x2R Launchpad に Sniffle をインストールするには、`fw` ディレクトリ内で `make load` を実行します。他の Launchpad モデルの場合は、上記で説明したように make に `PLATFORM` 引数を指定する必要があります。また、UniFlash GUI を使用して、コンパイル済みの `sniffle.hex` バイナリをフラッシュすることもできます。
## ファームウェアのインストール (SONOFF USB ドングル)
SONOFF CC2652P ドングル (CP2102N USB/UART ブリッジを搭載) に Sniffle をインストールするには、[JelmerT/cc2538-bsl](https://github.com/JelmerT/cc2538-bsl) ユーティリティを使用して、内蔵 ROM ブートローダーでファームウェアをフラッシュします。次のコマンドを使用します:```
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv sniffle_cc1352p1_cc2652p1.hex
2025年1月10日時点で、cc2538-bsl には、フラッシュ後にSonoffドングルのCC2562Pチップをリセットできないバグがあります。この修正はプルリクエスト 173 にありますが、まだマージされていません。その間、プルリクエストがマージされるのを待つ間、私のフォーク https://github.com/sultanqasim/cc2538-bsl を使用できます。
2022年、COVID-19パンデミックによるチップ不足のため、一部のSonoff CC2652Pドングルは、921600ボーに制限されたCP2102(非N)USB/UARTブリッジチップを搭載して製造されました。お持ちのドングルがこれに該当する場合、より低速な921600ボーを使用する別のファームウェアイメージをフラッシュする必要があります。この低速ボー用の特別なビルドは、sniffle_cc1352p1_cc2652p1_1M.hex(ビルドバリアント CC2652P1F_1M)という名前です。また、Sniffleユーティリティを起動する際に、デフォルトの2000000ボーを上書きするためにオプション -b 921600 を指定する必要があります。
警告: ブートローダーを使用して誤ったビルドバリアントをフラッシュしないでください。デバイスが文鎮化し、ブートローダーにロックアウトされる恐れがあります。Sonoff CC2652Pデバイスの場合は、sniffle_cc1352p1_cc2652p1.hex ファイル(CC2652P1F ビルドバリアント)または sniffle_cc1352p1_cc2652p1_1M.hex ファイル(CC2652P1F_1M` ビルドバリアント)を921600ボー用に使用してください。誤ったバリアントをフラッシュしてブートローダーにロックアウトされた場合、JTAG/SWDを使用してデバイスを復旧できる可能性があります。