您好!
我正在测试15.4网络的共存性、并观察到传感器节点出现了一些意外行为。 以下是我采取的步骤:
1) 1)以非信标模式启动一个由两个节点(收集器1和传感器1)组成的网络、使用2-GFSK 200kbps phy。 PAN ID = 0x5678、通道掩码= 0F0000000000000000000000000000 (仅选择前4个通道)和安全密钥(密钥1)。
2) 2)以非信标模式启动另一个收集器(收集器2)、具有相同的 Phy、相同的信道掩码:但不同的 PAN-ID = 0x1234和不同的安全密钥(Key2)。 此时、收集器可以检测到第一个通道正在被另一个网络使用、然后成功启动通道2上的网络
3) 3)以非信标模式启动另一个传感器(传感器2)、该传感器具有相同的 Phy、相同的通道掩码、PAN-ID = 0x1234和安全密钥2。 此时、我希望该传感器节点首先尝试第一个通道、然后在一段时间后尝试掩码中的其他通道。 但不知何故、该传感器节点将永远卡在连接状态。
4)如果我从 2号传感器的通道掩码中删除第一个通道,那么它可以快速加入2号收集器。
5)如果我转动收集器1号,那么传感器2号也可以快速加入收集器2号。
我的问题是、如果在通道1上尝试加入网络失败、我们是否可以强制2号传感器自动切换到通道2? 当传感器尝试加入网络时、似乎会进行某种扫描。
/*!
* @brief Send scan request
*
* @param type - type of scan: active, passive or orphan
*/
static void sendScanReq(ApiMac_scantype_t type)
{
ApiMac_mlmeScanReq_t scanReq;
/*Turn receiver ON for SCAN */
ApiMac_mlmeSetReqBool(ApiMac_attribute_RxOnWhenIdle, true);
/* set common parameters for all scans */
memset(&scanReq, 0, sizeof(ApiMac_mlmeScanReq_t));
/* set scan channels from channel mask*/
memcpy(scanReq.scanChannels, defaultChannelMask,
APIMAC_154G_CHANNEL_BITMAP_SIZ);
scanReq.scanType = type;
if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)
{
scanReq.scanDuration = CONFIG_SCAN_DURATION;
}
else
{
scanReq.scanDuration = CONFIG_MAC_BEACON_ORDER;
}
scanReq.maxResults = 0;/* Expecting beacon notifications */
scanReq.permitJoining = false;
scanReq.linkQuality = CONFIG_LINKQUALITY;
scanReq.percentFilter = CONFIG_PERCENTFILTER;
scanReq.channelPage = CONFIG_CHANNEL_PAGE;
/* using no security for scan request command */
memset(&scanReq.sec, 0, sizeof(ApiMac_sec_t));
/* send scan Req */
ApiMac_mlmeScanReq(&scanReq);
}
这种扫描似乎主要涉及到考虑泛 ID 和安全密钥的能量。 我们是否可以在扫描期间以某种方式使用安全密钥和 PAN ID? 这将大大降低网络冲突的可能性。
请告知、谢谢。
ZL