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.

ZSTACK 3.0.2使用问题

Other Parts Discussed in Thread: Z-STACK, CC2530, CC2538, CC2592

1.light例程里的BDB_REPORTING是做什么的?能x了吗?

2.想使用串口,是不是xZTOOL_P1改为ZTOOL_P1即可?

3.light例程里的UI我用不到,怎么屏蔽掉?

4.switch例程,默认的是非低功耗模式吧?-DRFD_RCVC_ALWAYS_ON=FALSE,xPOWER_SAVING

  • 1.就是透過BDB去做reporting,BDB是Zigbee 3.0重要特徵,建議不要x了
    2. 是
    3. 可以參考e2echina.ti.com/.../146528
    4. 如果你用的是switch終端設備例程,默认是低功耗模式
  • 1、BDB_REPORTING: defines the BDB reporting state machine that adds report sending functionality.
    2、是的
    3、按照如下步骤:
    Removing the Example User Interface
    The User Interface (UI) that is provided with the Z-Stack 3.0.2 sample applications provide a means to easily get a network up and running, view the network status on an LCD, and modify network commissioning parameters at runtime. However it also takes up a lot of code space and is unnecessary
    for developers to keep in their own custom applications.
    Three things must be done to remove this interface:
    • Exclude the UI files from compilation
    • Remove the API calls to the UI functions in the sample app file(s)
    • Modify the project compile flags to exclude LCD-related drivers
    4、终端还是低功耗
  • light例程作为协调器,switch例程作为终端,
    但是我们的用法是反的,用协调器去控制终端
    这样的haunt BDB在协调器这边,协调器reporting什么?向终端汇报他的状态?
  • 基本上switch例程作为协调器,light例程作为终端,在程序上並不需要改變什麼
  • light例程设置如下,串口就可以用了吗?MT的不要去掉x?
    ZTOOL_P1
    xMT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_APP_CNF_FUNC
  • BDB_REPORTING 功能是报告 BDB 的状态。
    只要开了 ZTOOL_P1 然后在应用层开启串口就能用了,MT 层的要关了,不然会有MT层的数据发送至 host。
    如果你的处理器是 CC2530 的话开启 ZTOOL_P1 还会显示内存不足。
  • MT_TASK要去掉x,其他的就看你要用什麼MT相關的command決定
  • 3.0.2的协议栈,light作为终端,怎么启动不了,被HOLD了吗?
    宏定义添加xHOLD_AUTO_START也不行,怎么能自动启动
  • light例程預設要透過button/lcd操作才會啟動搜尋網路
  • 我想要上电自动启动,怎么设置?
    另外switch例程是不是也是这样的设置?
  • 你有去參考 e2echina.ti.com/.../146528 的作法嗎?
  • 1.协调器建网,我是否可以把下面的函数放在初始化里?这样上电后就自动建立了网络
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION );
    2.终端加网,我是否可以把下面的函数放在初始化里?这样上电后就自动加网
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);
    3.上面的加网和建网默认的有没有时间,比如建网函数调用后,会不会一会就自动关闭了网络
    还有加网的函数会尝试加网多久?
    4.绑定的时间默认是持续多久的?
  • 1. 應該是用 bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_FINDING_BINDING);
    2. 應該是用 bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);
    3&4. 建网後默认的入网及绑定的时间是180秒
  • 你好,按照之前链接的方法以及你回复的方式,发现终端一直是DEV_HOLD状态,加不上协调器的网络
  • 建議你調試看看
  • 现在终端可以入网了,还有些问题:
    1.第一次入网,协调器和终端都要触发bdb_StartCommissioning
    那么后面重启的话不需要再执行这样的动作了吧?(双方都开启了NV)
    2.终端我现在临时搞一个按键的,实际上没有按键,我怎么设置让终端始终在bdb_StartCommissioning
    只要协调器一上电就加上了,协调器断电了就一直尝试加网
    3.现在测试,在终端zcl_SendReportCmd发给协调器,协调器case ZCL_CMD_REPORT里怎么收不到,
    是不是3.0的协议栈有什么不一样?
  • 1. 是的

    2. 可以在應用程序的init去調用bdb_StartCommissioning

    3. 你有抓包看看封包有沒有正確的送出嗎?

  • 你要看一下你的包是否正常发出以及endpoint 的注册回调是否匹配。
  • Wireshark抓包,2B32终端发数据,协调器收不到,请帮忙分析一下

    2B32终端.psd

  • 需要你的network key才能解開封包
  • 3.0协议栈不知道和之前差别多大,我描述下我的实现,

    请帮忙确认下在3.0协议栈里这么做可对?

    light例程作为终端,switch例程作为协调器

    1.协调器发送用zclGeneral_SendOnOff_SwOn,

    终端在zclSampleLight_OnOffCB接收处理

    2.终端上报用自己的状态用zcl_SendReportCmd,

    协调器在case ZCL_CMD_REPORT里接收处理

    3.通信异常,抓包如附件,上发下发都收不到7343.2B32终端.psd

  • network key是啥,我直接用例程做的,我也不知道,怎么看?
  • 請提供network key
  • network key是zigbee加密封包的鑰匙,你抓包的時候把入網的流程也抓進來,我就能抓的到network key
  • 抓包数据更新如附件,请帮忙分析为什么节点上报数据,协调器收不到

    0576.抓包数据.psd

  • 還是解不開,你需要把flash 都擦除然後讓協調器重新組網,終端重新入網,這樣我才抓到的正確的network key
  • 看到light有發送出ON/OFF狀態到switch的endpoint 8,你應該要可以收到才是,除非你switch的endpoint不是8
  • 两边都是8
    #define SAMPLESW_ENDPOINT 8
    协调器这边在下面的地方打断点,一直没有中断
    case ZCL_INCOMING_MSG:
    // Incoming ZCL Foundation command/response messages
    zclSampleSw_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );
    break;
  • 檢查一下ON/OFF cluster有沒有都放進switch的In/Out cluster里
  • 相反的协调器给终端单播数据,终端也收不到
    终端zclSampleLight_OnOffCB收不到协调器的开关指令
  • 收不到就是要查ON/OFF cluster有沒有都放進In/Out cluster里
  • 加了也是不行
    const cId_t zclSampleSw_InClusterList[] =
    {
    ZCL_CLUSTER_ID_GEN_BASIC,
    ZCL_CLUSTER_ID_GEN_IDENTIFY,
    ZCL_CLUSTER_ID_GEN_ON_OFF_SWITCH_CONFIG,
    ZCL_CLUSTER_ID_GEN_ON_OFF
    };

    const cId_t zclSampleSw_OutClusterList[] =
    {
    ZCL_CLUSTER_ID_GEN_IDENTIFY,
    ZCL_CLUSTER_ID_GEN_ON_OFF,
    ZCL_CLUSTER_ID_GEN_GROUPS,
    };
  • 默认的例程应该是可以通信的啊,
    我只是注释了UI和LCD相关代码,
    怎么连通信都不行
  • 你有把ZCL_REPORT加入預編譯項目嗎?
  • 协调器端配置如下(switch)
    ewarm
    CC2538_USE_ALTERNATE_INTERRUPT_MAP=1
    FEATURE_RESET_MACRO
    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    ZTOOL_P1
    MT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_APP_CNF_FUNC
    xLCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_DISCOVER
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_ON_OFF
    ZCL_GROUPS
    ZCL_SCENES
    ZCL_REPORT
    HAL_PA_LNA_CC2592
    终端配置如下(light)
    BDB_REPORTING
    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    xPOWER_SAVING
    NWK_AUTO_POLL
    ZTOOL_P1
    MT_TASK
    MT_APP_FUNC
    MT_SYS_FUNC
    MT_ZDO_FUNC
    MT_ZDO_MGMT
    MT_APP_CNF_FUNC
    xLCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_DISCOVER
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_ON_OFF
    ZCL_SCENES
    ZCL_GROUPS
    ZCL_LEVEL_CTRL
  • 那你有自己去打開zclSampleSw_ProcessIncomingMsg裡面的zclSampleSw_ProcessInReportCmd來做接收嗎?
  • 打开了,协调器下发,终端是可以收到的
    但是终端上报,协调器就收不到了
    终端上报时,协调器的zclSampleSw_ProcessIncomingMsg都没进入
    终端上报的代码如下,终端本地有个按键,按一下灯的状态变一下,并把状态上报给协调器,
    zclSampleLight_OnOff = 0x01;
    zclReportCmd_t *pReportCmd;
    pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) );
    if ( pReportCmd != NULL )
    {
    pReportCmd->numAttr = 1;
    pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
    pReportCmd->attrList[0].dataType = ZCL_DATATYPE_BOOLEAN;
    pReportCmd->attrList[0].attrData = (void *)(&zclSampleLight_OnOff);
    zcl_SendReportCmd( SAMPLELIGHT_ENDPOINT, &zclSampleLight_DstAddr,
    ZCL_CLUSTER_ID_GEN_ON_OFF,
    pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, zclSampleLightSeqNum++ );
    }
    osal_mem_free( pReportCmd );
  • 試試在預編譯加上ZCL_REPORT_DESTINATION_DEVICE
  • 不好意思,跟错贴了。