Jam 检测

在 GitHub 上查看源代码

如需在任何 OpenThread 节点上提供可配置的信号干扰检测机制,请启用干扰检测功能。

对于需要能够检测特定频道上的信号干扰的设备认证,此功能非常有用。它可以配置为满足每种认证的要求。

运作方式

干扰检测功能会在指定的时间窗口内监控节点的 RSSI(接收信号强度指示器),以确定信道是否受到干扰。

启用干扰检测功能后:

  1. 将阻塞检测状态设置为 false
  2. 节点在每个 1 秒的时间间隔内多次对 RSSI 进行采样。
  3. 如果整个 1 秒时间间隔内的 RSSI 在每个样本中都保持在配置的 RSSI 阈值之上,则该 1 秒时间间隔被视为阻塞。
  4. 如果在任何时间点,拥堵的一秒间隔的总数大于或 等于前一个配置的检测窗口秒内配置的繁忙时段秒的总数,则该时间点的拥堵检测状态设置为 true
  5. 如果阻塞的一秒间隔的总数小于在之前配置的检测窗口秒内配置的繁忙时段秒的总数,则相应时间点的干扰检测状态设置为 false

历史记录位图

OpenThread API 中,可以检索前 63 秒的位图。此位图用于指示在过去 63 秒内的每一秒,RSSI 是否超过了配置的 RSSI 阈值。

例如,您可能会检索到以下位图:

0xC248068C416E7FF0

转换为二进制后,会生成在过去 63 秒内 RSSI 高于配置的 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/src/core/config/openthread-core-default-config.h文件中将 OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 定义为 1,然后再构建 OpenThread

#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
说明
指定阈值 RSSI 级别(以 dBm 为单位),高于该级别时,系统会认为相应信道被阻塞。
检测窗口
默认值
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 中公开了干扰检测属性,这些属性提供以下功能:

  • 启动和停止该功能
  • 查看卡纸检测状态
  • 管理所有参数
  • 检索当前干扰检测历史记录位图

CLI

OpenThread

没有与此功能相关的 OpenThread CLI 命令。