This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Z-Stack 3.0.0 (HA) + CC2530 实现 Touch Link 遇到的问题求助

Other Parts Discussed in Thread: Z-STACK

协议栈使用的是 Z-Stack 3.0.0.exe,文件版本 0.0.0.0

=========================================
Initiator
D:\Texas Instruments\Z-Stack 3.0.0\Projects\zstack\HomeAutomation\SampleSwitch
-DDEFAULT_CHANLIST=0x07FFF800 // 11 - 26 默认信道设置为 11~26

打开下面的预编译宏
BDB_TL_INITIATOR
INTER_PAN

配置好了外置 PA,信号强度在 -23dbm 左右,并且和 Target 物理位置在 30cm 以内

编译为 EndDevice

=========================================
Target
D:\Texas Instruments\Z-Stack 3.0.0\Projects\zstack\HomeAutomation\SampleLight
-DDEFAULT_CHANLIST=0x07FFF800 // 11 - 26 默认信道设置为 11~26

打开下面的预编译宏
BDB_TL_TARGET
INTER_PAN

配置好了外置 PA,信号强度在 -25dbm 左右,并且和 Initiator 物理位置在 30cm 以内

编译为 Router

=========================================
只使用 Initiator 和 Target 两个设备,网络中没有协调器。
开发目标是让 Initiator 加入 Target,并能够使用 Initiator 的按键来控制 Target 的灯的开关等。


=========================================
按照下面的文档:

D:\Texas Instruments\Z-Stack 3.0.0\Documents\Z-Stack 3.0 Sample Application User's Guide.pdf
Page 29
Figure 45: Joining with Touchlink commissioning (FN ZED Initiator and FN ZR Target)

前面的流程符合 Figure 45 所述。

后面 Target 已经收到了 Initiator 发来的 Device Announce 请求命令,证据如下:
void touchLink_RouterProcessZDOMsg( zdoIncomingMsg_t *inMsg )
{
ZDO_DeviceAnnce_t devAnnce;

DEBUG("inMsg->clusterID=0x%x\n",inMsg->clusterID);

switch ( inMsg->clusterID )
{
case Device_annce:

{
//略去部分代码

// if not, look for a vacant entry to add this node...
if ( linkInfo == NULL )
{
DEBUG("linkInfo == NULL\n");

//略去部分代码
}
else
{
DEBUG("linkInfo != NULL\n"); <---- 程序会运行到这里,串口打印出 "linkInfo != NULL"
// only update the TxCost, so the Link Status can be sent properly
if (linkInfo->txCost == 0)
{
linkInfo->txCost = MAX_LINK_COST;
}
}
}
break;

}

疑问1:
按照上面提到的pdf文档中 Figure 45:,下一步应该是 Initiator 发送 Simple Descriptor Request 命令,
但是在代码中,根本没有找到这个命令,类似COMMAND_TOUCHLINK_xxxx,当然也没有收到这个命令响应的处理函数,类似initiator_xxxx_ReqCB。


疑问2:
暂且不管上面的 Simple Descriptor Request 命令,
当 Target 已经收到了 Initiator 发来的 Device Announce 之后,

此时,我发现在 25 信道(有时候在11,15信道等),发现上面的 Initiator 和 Target 已经在同一个网络中,并且这个网络中只有这两个设备。
Initiator 的短地址为0x0000,Target的短地位为0x0001,
Initiator 一直在向 Target 发送 Data Request 的消息

请问此时是不是Touch Link成功了?


疑问3:
如果上面的情况,说明已经连接成功,我要在 Initiator 上面发不同的按键信息给 Target,
在哪里发命令? Target 中又在哪里解析这些命令? 没找到这些代码。

谢谢各位帮忙看看。

  • =========================================
    在 Initiator 中,我是按下面的方法来启动 Touch link 的

    uiSelectedBdbComissioningModes = DEFAULT_COMISSIONING_MODE;

    uiSelectedBdbComissioningModes |= BDB_COMMISSIONING_MODE_INITIATOR_TL;

    bdb_StartCommissioning(uiSelectedBdbComissioningModes);

    =========================================
    Target 中,我是按下面的方法来启动 Touch link 的

    uiSelectedBdbComissioningModes = DEFAULT_COMISSIONING_MODE;

    uiTouchlinkTargetTimeout = TOUCHLINK_TARGET_PERPETUAL;
    touchLinkTarget_EnableCommissioning( uiTouchlinkTargetTimeout );
    uiLcdAutoUpdateInterval = LCD_AUTO_UPDATE_INTERVAL_ON_TOUCHLINK_TARGET_SCREEN;
    bdb_StartCommissioning(uiSelectedBdbComissioningModes);

    =========================================

    把 dbm检测值 的门槛等等限制降低,最后,

     Initiator  执行了 touchLink_DevRejoin( bdbTLNwkRejoin_t *rejoinInf ) 函数。

    bdbNodeIsOnANetwork  的值等于 1

    它们在同一个网络中了,

    =============================================================

    此时在 SDK  的Initiator  中,按键发送的目标地址有问题,修改成正确的 PAN ID, endPoint 等之后,

    Initiator  可以给 Target 发送消息,

    但是在 Target 中没有解析消息的出来,也没有上报消息类型。

    在是在下面的函数中,

    uint16 touchLinkTarget_event_loop( uint8 task_id, uint16 events )

    有一个 0xfd 的消息。

    ===========================================================

    想问一下 TI 的员工,Z-Stack 3.0.0.exe 对 Touch Link 的功能完成并测试过了吗?哪里有问题,谢谢。

  • 我也遇到这个问题,是不是TI不希望在3.0中使用touch link?也没有关于touch link的demo?ubiqua抓包确实没发现simpleDescRequest,那就绑定不了了

  • 目前3.0中是没有touch link的相关demo的,您可以将ZLL中的相关函数移植到3.0

    在TI WIKI内有相关说明 http://processors.wiki.ti.com/index.php/What%27s_New_in_ZigBee_3.0#BDB_Commissioning_Modes

    Touchlink (Optional)

    • Proximity-based commissioning
    • Previously a part of ZigBee Light Link