Jam 偵測

在 GitHub 上查看來源

如要在任何 OpenThread 節點上提供可設定的訊號干擾偵測機制,請啟用干擾偵測功能。

這項功能適用於需要偵測特定頻道訊號干擾的裝置認證。可設定為符合各類型認證的要求。

運作方式

干擾偵測功能會在指定時間範圍內監控節點的 RSSI (接收訊號強度指標),判斷通道是否遭到干擾。

啟用干擾偵測功能後:

  1. 干擾偵測狀態設為 false
  2. 節點會在每個一秒間隔內多次取樣 RSSI。
  3. 如果整個一秒間隔的 RSSI 仍高於每個樣本的設定 RSSI 閾值,則該一秒間隔會視為受到干擾。
  4. 如果一秒間隔的壅塞總數大於或 等於前一個設定的「偵測視窗」秒內,設定的「忙碌期間」秒數總和,則該時間點的壅塞偵測狀態會設為 true
  5. 如果一段時間內發生壅塞的 1 秒間隔總數少於設定的「忙碌週期」秒數,則該時間點的壅塞偵測狀態會設為 false。這段時間的長度等於設定的「偵測時間範圍」秒數。

歷史記錄點陣圖

OpenThread API 中,可以擷取前 63 秒的點陣圖。這個點陣圖會指出在過去 63 秒內,RSSI 是否在每個時間點都超過設定的 RSSI 門檻。

舉例來說,您可能會擷取下列點陣圖:

0xC248068C416E7FF0

轉換為二進位後,會產生 RSSI 在前 63 秒內高於設定 RSSI 門檻的每個例項:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

如果「偵測時間範圍」設為 16 秒,「忙碌週期」設為 8 秒,則「干擾偵測狀態」會在第 51 秒變成 true,因為這是前 16 秒內,RSSI 閾值首次超過至少 8 秒。在本例中,干擾偵測狀態會在接下來的 13 秒內維持 true

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

如果設定的 RSSI 門檻為 -45 dBm,則這個點陣圖可能以以下圖表表示:

OT 阻塞偵測

如何啟用

這項功能預設為停用。

依定義

如要啟用干擾偵測功能,請在建構 OpenThread 前,先在 openthread/src/core/config/openthread-core-default-config.h 檔案中將 OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 定義為 1

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

依選項

或者,您也可以在建構 OpenThread 時使用 -DOT_JAM_DETECTION=ON 建構選項:

./script/build -DOT_JAM_DETECTION=ON

參數

只能透過 OpenThread API 或 Spinel 協定設定干擾偵測參數。如果啟用這項功能後未進行後續設定,系統會套用預設值。

使用下列參數自訂這項功能:

參數
RSSI 門檻
預設值
0 dBm
說明
指定以 dBm 為單位的 RSSI 臨界值,超過這個值即視為頻道受到干擾。
偵測時間範圍
預設值
63 秒
說明
指定檢查訊號干擾的時間範圍 (以秒為單位)。範圍:1 至 63。
忙碌時段
預設值
63 秒
說明
指定偵測視窗內 RSSI 必須高於 RSSI 門檻的總秒數,才能觸發干擾偵測。必須小於偵測時間範圍。範圍:1 至 63。

API

OpenThread

使用 Jam Detection API,直接在 OpenThread 應用程式中管理 Jam Detection 功能。OpenThread API 提供下列功能:

  • 啟動及停止這項功能
  • 查看卡紙偵測狀態
  • 管理所有參數
  • 擷取目前的干擾偵測記錄點陣圖
  • 註冊回呼函式,以便在偵測到干擾時收到通知

尖晶石

主機裝置可透過 Spinel 協定直接與 NCP 通訊。這項通訊協定會顯示 openthread/src/lib/spinel/spinel.h 中的 Jam Detection 屬性,提供下列功能:

  • 啟動及停止這項功能
  • 查看卡紙偵測狀態
  • 管理所有參數
  • 擷取目前的干擾偵測記錄點陣圖

CLI

OpenThread

這項功能沒有相關的 OpenThread CLI 指令。