Thread 中讨论的其他器件:SysConfig、 Z-stack、 CC2430、 SIMPLELINK-CC13X2-26X2-SDK
我们最近将应用移植到 SDK3.30、现在看到了几种新的奇怪行为。 这是其中之一。
根据所连接的鲨鱼捕获、您可以看到设备发出信标请求、然后发送关联请求、但请求关联为 RFD。 (见第21至27段)
如果将器件关联为错误类型的器件、则器件会重置、然后重试。
最终、它以 FFD 的形式发送关联请求、然后完成密钥交换并正常运行。 (参见帧256 - 295)
SDK3.20堆栈未发生这种情况。
BDB 的设置方式是否发生了变化?
我们的设备可以是协调器或路由器。
//定义以包括协调器和路由器功能
#define Zstack_device_BUILD (device_build_Coordinator | device_build_router)
在以下代码中、我们首先调用设置默认 bdb 参数(MyApp_initParameters)
然后、一旦我们知道我们的设备类型(协调器或路由器)和用户指定的 PAN_ID、 我们就会调用 MyApp_SetPanId() 、它使用所需 的调试模式调用 Zstackapi_BdbStartCommissioningReq()。
此时、它开始发送信标请求、并出于某种原因将其关联为一个 RFD、如 Wireshark 捕获中所示。
如果想了解这种情况的发生原因、我们将不胜感激。
-Bill
静态空 MyApp_initParameters (void) { ZStack_bdbSetAttributeReq_t ZStack_bdbSetAttrReq ={0}; ZStack_bdbSetAttrReq.ha_bdbCommissioningGroupID = true; Zstack_bdbSetAttrReq.bdbCommissioningGroupID = BDB_DEFAULT_TRUSING_GROUID; ZSTACK_bdbSetAttrReq.ha_bdbPrimaryChannelSet = true; Zstack_bdbSetAttrReq.bdbPrimaryChannelSet = BDB_DEFAULT_PRIMARY_CHANNEL; ZSTACK_bdbSetAttrReq.has _bdbScanDuration = true; Zstack_bdbSetAttrReq.bdbScanDuration = BDB_DEFAULT_SCAN_DURATION; if (isCoordinatorMode()) { Zstack_bdbSetAttrReq.has _bdbJoinUsesInstallCodeKey =真; Zstack_bdbSetAttrReq.bdbJoinUsesInstallCodeKey = BDB_DEFAULT_JOIN_USS_INSTALL_CODE_KEY; Zstack_bdbSetAttrReq.has _bdbTrustCenterNodeJoinTimeout = true; Zstack_bdbSetAttrReq.bdbTrustCenterNodeJoinTimeout = BDB_DEFAULT_TC_NODE_JOIN_TIMEOUT; Zstack_bdbSetAttrReq.ha_bdbTrustCenterRequireKeyExchange = true; Zstack_bdbSetAttrReq.bdbTrustCenterRequireKeyExchange = BDB_DEFAULT_TC_require_key_exchange; Zstack_bdbSetAttrReq.ha_bdbSecondaryChannelSet =真; Zstack_bdbSetAttrReq.bdbSecondaryChannelSet = 0x00000000;//协调器的次要通道集为零 //因此它们只尝试在上启动网络 //主通道集 } else //(isRouterOrRepeater Mode) { Zstack_bdbSetAttrReq.ha_bdbSecondaryChannelSet =真; Zstack_bdbSetAttrReq.bdbSecondaryChannelSet = BDB_DEFAULT_SEARE_CHANNEL;//允许路由器使用辅助通道 //在搜索要加入 的网络时设置} Zstackapi_BdbSetAttributeReq( MyApp_ZstackId,&Zstack_bdbSetAttrReq ); //在空闲模式下启动 bdb 以查看其是否从 NV Zstack_bdbstartCommissioning&t Zstack_bStartStringReq 恢复; zstack_bdbStartCommissioningReq.commissioning_mode = Zstintrintrintrintrintrinacuatedr (mydtrintrintrintrintraduatedr ) //如果加入新的 PAN, //在启动网络之前设置全局 panid if (( MyApp_nvPanID != 0xFFFF )&&( MyApp_nvPanID !=所需的 PanID ){ //保存新的 panID nvId.systemID = NVINTF_SYSID_ZStack; nvId.subId = ZCD_NV_PANID; nvId.itemID = ZCD_NV_EX_legacy; myApp_nvPanID =所需的 PanID; Zstack_user0Cfg.nvFps.writeItem( nvId、sizeof( uint16 )、&rechedPanID ); //要强制"新建"加入,请执行 RadioRestart ForceRadioRestart(); } 否则 { //仅在尚未启动网络且 PAN ID 有效的情况下启动网络, if (所需的 PanID <= MAX_PAN_ID && RadioHasJoined()== false) { Zstack_bdbStartCommissioningReq_t Zstack_bdbStartCommissioningReq; //更新堆栈的 Pan ID if (MyApp_nvPanID == 0xFFFF) { nvId.systemID = NVINTF_SYSID_ZStack; nvId.subId = ZCD_NV_PANID; nvId.itemID = ZCD_NV_EX_legacy; myApp_nvPanID =所需的 PanID; Zstack_user0Cfg.nvFps.writeItem( nvId、sizeof( uint16 )、&rechedPanID ); } //更新堆栈的器件逻辑类型 nv if (zgDeviceLogicalType!= MyApp_DeviceLogicalType) { nvId.systemID = NVINTF_SYSID_ZStack; nvId.subId = ZCD_NV_logical_type; nvId.itemID = ZCD_NV_EX_legacy; zgDeviceLogicalType = MyApp_DeviceLogicalType; Zstack_user0Cfg.nvFps.writeItem( nvId,sizeof( zgDeviceLogicalType ),&zgDeviceLogicalType ); } //启动或加入 PAN if (!bdb_isDeviceNonFactoryNew()) { if (MyApp_DeviceLogicalType == ZG_DEVICETYPE_Coordinator) { zstack_bdbStartCommissioningReq.commissioning_mode = BDB_TUSITING_MODE_NWK_Formation; Zstackapi_BdbStartCommissioningReq (MyApp_ZstackId、&ZStack_bdbStartCommissioningReq); } 其他 { zstack_bdbStartCommissioningReq.commissioning_mode = BDB_T调试_MODE_NWK_TOCOING; Zstackapi_BdbStartCommissioningReq (MyApp_ZstackId、&ZStack_bdbStartCommissioningReq); } } }