如需在任何 OpenThread 节点上提供用于检测信号干扰的可配置机制,请启用干扰检测功能。
对于需要检测特定频道上信号干扰的设备认证,此功能非常有用。它可配置为满足每种类型认证的要求。
工作原理
干扰检测会在指定的时间段内监控节点的 RSSI(接收信号强度指示器),以确定信道是否已遭到干扰。
启用干扰检测后:
- 干扰检测状态设置为
false
。 - 节点会在每隔一秒的时间间隔内多次采样 RSSI。
- 如果在整个一秒间隔内的 RSSI 始终高于为每个样本配置的 RSSI 阈值,则该一秒间隔会被视为卡住。
- 如果在任意时间点,被干扰的一秒间隔的总数大于或等于在之前配置的检测窗口秒数内的配置的繁忙时段秒数的总数,则在该时间点的干扰检测状态设置为
true
。 - 如果在任何时间点,被干扰的一秒间隔时间的总数小于上一个配置的检测窗口秒数内的配置的繁忙时段秒数的总数,则在该时间点的干扰检测状态设为
false
。
历史记录位图
在 OpenThread API 和 wpantund
属性中,可以检索过去 63 秒的位图。此位图会指示 RSSI 是否在过去 63 秒的每一秒都超过了配置的 RSSI 阈值。
例如,您可以检索以下位图:
0xC248068C416E7FF0
转换为二进制文件会生成 RSSI 在过去 63 秒内超过配置的 RSSI 阈值的每个实例:
11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
如果将检测窗口设置为 16 秒,并将繁忙时段设置为 8 秒,则在 51 秒时,干扰检测状态会变为 true
,因为这是在前 16 秒内至少有 8 秒的时间 RSSI 阈值超出第一次。在此示例中,干扰检测状态在接下来的 13 秒内保持 true
。
11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000 [00001 01101110 011] = 8 in 16
如果配置的 RSSI 阈值为 -45 dBm,此位图可能如下图所示:
启用方式
默认情况下,此功能处于停用状态。
按定义
如需启用卡顿检测,请在构建 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
build 选项:
./script/build -DOT_JAM_DETECTION=ON
参数
Jam 检测参数只能通过 OpenThread API、Spinel 协议或 wpanctl
(用于管理网络协同处理器 (NCP) 的 wpantund
命令行工具)进行配置。如果启用此功能但未进行后续配置,系统会应用默认值。
您可以使用以下参数自定义此功能:
参数 | |||||
---|---|---|---|---|---|
RSSI 阈值 |
|
||||
检测期 |
|
||||
繁忙时段 |
|
API
OpenThread
您可以使用 Jam Detection API 直接在 OpenThread 应用中管理 Jam Detection 功能。OpenThread API 提供以下功能:
- 启动和停止此功能
- 查看 Jam 检测状态
- 管理所有参数
- 检索当前的干扰检测历史记录位图
- 注册在检测到 Jam 时的回调函数
尖晶石
Spinel 协议支持主机设备直接与 NCP 通信。此协议在 openthread/src/lib/spinel/spinel.h
中公开了 Jam 检测属性,可提供以下功能:
- 启动和停止该功能
- 查看 Jam 检测状态
- 管理所有参数
- 检索当前的干扰检测历史记录位图
CLI
OpenThread
没有与此功能相关的 OpenThread CLI 命令。
wpantund
使用 wpanctl
CLI 管理 OpenThread NCP 配置的干扰检测功能。wpantund
会在 NCP 重置后保留所有 Jam 检测配置。
wpanctl
提供对以下 wpantund
属性的访问权限:
属性 | |||||
---|---|---|---|---|---|
JamDetection:Status |
|
||||
JamDetection:Enable |
|
||||
JamDetection:RssiThreshold |
|
||||
JamDetection:Window |
|
||||
JamDetection:BusyPeriod |
|
||||
JamDetection:Debug:HistoryBitmap |
|
例如,如需获取 NCP 的 Jam 检测状态,请使用以下代码:
sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false
如需在 NCP 上将干扰检测 RSSI 阈值设置为 -45 dBm,请执行以下操作:
sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45
如需详细了解 wpantund
属性,请参阅 wpantund
GitHub 代码库。