TI中文支持网
TI专业的中文技术问题搜集分享网站

终端设备不能发现 ZNP coordinator的信号

    Zigbee 芯片是CC2530, 协议栈是使用的是1.2.2a.44539,  Zigbee通过UART连接到树莓派上, ZNP使用的固件是协议栈中znp代码编译出来的, ZAP对ZNP的串口操作命令是按照文档 swra444.pdf, 命令的串口返回消息也是正确的, 最终ZNP返回 cmd0:0x45, cmd1:0xc0, payload:09, znp应该已经启动了zigbee网络。在使用HA 的samplelight的enddevice启动后,扫描对应信道的信号,始终都搜不到,ZDO_beaconNotifyIndCB没有被调用,ZDO_NetworkDiscoveryConfirmCB的status是0xea(ZMacNoBeacon),coordinator在启动的时候使用的是DEFAULT_BEACON_ORDER,即BEACON_ORDER_NO_BEACON,协调器和终端设备都使用的是channel 11 (0x800)

   请问在No_beacon情况下终端设备需要怎样加入网络(使用samplelight的coordinator和enddevice可以发现网络并加入)

VV:

请问你的协调器在哪个信道上建网?

你的节点在哪个信道上搜网,是不是没有对上?

Jim Yu1:

回复 VV:

VV大神,你好!

1. 我的协调器是在11信道建网的

2. 我的终端节点也是在11信道搜网的,下图是siniffer抓的zigbee包,我觉得终端节点一切都正常,只是协调器没有回应beacon的包:

另外,上次我可能描述的不够清楚,我把我现在的实现方法再简单介绍下,希望vv大神能帮忙看看到底问题出在哪里?

我想用2块的2530模组搭建一个zigbee网络,其中一块是作为协调器使用,另外一块作为end device.

lighting-gateway server + ZNP coord + HomeAutomation SampleLight,  结构图如下:

1. server端:采用的是TI下载的lighting-gateway\server. 我主要的改动都在server端这里。

    (1)在zbController的main()中做了cc2530 reset的动作

    (2)在zbSocCmd.c里面修改了zbSocOpen(), 初始化了串口的一些配置。然后主要修改了zbSocProcessRpc()这个函数,在里面添加了下面的代码(在这段代码里其实有疑问,不知道是否应该在MT_RPC_SYS_SYS消息里去做组网的动作):

    switch(rpcBuff[0] & MT_RPC_SUBSYSTEM_MASK)

    {

        …

        case MT_RPC_SYS_SYS:

        {//该消息是我后来添加的,不知道在这里做组网的时机是否正确

              if(0x80 == rpcBuff[1]){//以下标注红色的函数都使按照swra444.pdf里面的信令格式发送的,server===>znp coordinator

                      if(0 == bootStep){

                              zbSocClearNwkStatus();

                              zbSocReset();

                              bootStep = 1;

                      }else{

                               zbSocSetPanID();// set panid = 0xffff

                               zbSocSetExtPanID();// set extpanid, cmd= 0xfe,0x0a,0x26,0x05,0x2d,0x08,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00

                               zbSocSetChanList();// set chanlist =0x00000800(即11channel),cmd= fe,06,26,05,84,04,00,00,08,00,00

                               zbSocSetLogicalType();// set logical type=coordinator, cmd = fe,03,26,05,87,01,00,00

                               zbSocSetStartNwk();// start nwk, cmd= fe,02,25,40,00,00,00

                      }

               }

               break;

        }

    }

2. coordinator端:  采用的是z-stack home 1.2.2a.44539\projects\zstack\ZNP\下的代码, 该部分代码在用IAR编译时,选择的是CC2530-TestHex. 编译选项中定义的宏如下所示:

FEATURE_SYSTEM_STATSASSERT_RESETxPOWER_SAVINGMT_SYS_OSAL_NV_READ_CERTIFICATE_DATA=TRUEMT_SYS_KEY_MANAGEMENTZCL_KEY_ESTABLISHECCAPI_283_DISABLEDTC_LINKKEY_JOINSECURE=0

3. end device端:采用的代码是z-stack home 1.2.2a.44539\projects\zstack\HomeAutomation\SampleLight\CC2530DB的工程,然后在IAR工程里面选择的是EndDeviceEB进行编译的。

测试的结果:能看到end device正常启动,也能看到它一直在发beacon request的zigbee包,但是因为一直没有收到coord端的beacon回复,导致它一直搜索不到网络,也没办法加入网络。

不知道到底哪里出了问题,从打印能看到组网成功了(收到了cmd0=0x45, cmd1=0xc0, payload=0x09, FCS=0x8D),但是后面串口就没消息过来了,通过抓包也看不到任何关于beacon等的回复。

望TI大神们不吝指教,急急急,万分感谢!!!

VV:

回复 Jim Yu1:

你好,

我觉得问题应该是协调器没有建网成功。

建议你使用ZTool+CC2530 ZNP的方式测试,ZNP的代码使用协议栈里面原始的代码,不要做改动。

然后参考下面对的命令测试下,就可以了。 

如果协调器建网成功的以后,应该在对应的信道里面,每隔15s会有一条Link Status的数据发出来。

Z-Stack ZNP Interface Specification.pdf

3.1  ZNP startup procedure

Jim Yu1:

回复 VV:

VV,你好!

我现在在通过z-tool来测试ZNP,但仍有几个疑问想请教下。我看了文档《Z-Stack ZNP interface specification.pdf》的3.1章 ZNP startup procedure,启动流程总结如下:

1. ZB_WRITE_CONFIGURATION

2. ZB_APP_REGISTER_REQUEST (use simple api)

3. ZB_START_REQUEST

4. waite ZB_START_CONFIRM with a status of ZB_SUCCESS

5. AF_REGISTER

6. ZOD_STARTUP_FROM_APP

7. waite ZDO_STATE_CHANGE_IND with a status of DEV_ZB_COORD and so on

我想跟您确认的有3点,期待您的回复,谢谢:

1. 上面的step 2,3,4是不是跟step5,6冲突的,不能一起使用? step2,3,4只适用于simple API的情况,5,6只适合未使用simple API的情况,是这样吗?

2. 如何判断我是否使用了simple API呢?我在projects\zstack\ZNP\source\znp.cfg中看到,定义了-DMT_SAPI_FUNC和-DMT_SAPI_CB_FUNC,这是否代表使用了simple API?

另外附上我编译ZNP时的IAR工程的编译选项:

FEATURE_SYSTEM_STATSASSERT_RESETxPOWER_SAVINGMT_SYS_OSAL_NV_READ_CERTIFICATE_DATA=TRUEMT_SYS_KEY_MANAGEMENTZCL_KEY_ESTABLISH    

3. 我能否用z-tool来模拟上述的步骤来启动ZNP?例如我如果使用了simple API, 我能否通过z-tool发送上述的step 1,2,3,4,7来启动ZNP组网?

Jim Yu1:

回复 VV:

VV, 您好!

上次组网的问题,我已经解决了,但现在在控制end device的灯的开关时,我参考了您之前的一片文章:《ZHA Coordinator如何控制ZLL Light/Philips Hue Light》,是根据您所描述的service discovery的过程来做的。

但现在也遇到了一些问题:

1. 根据《z-stack Monitor and Test API.pdf》中3.12.1.5章节的描述,APP向ZNP发送ZDO_SIMPLE_DESC_REQ消息,会收到0x65 0x04的回复。但我又看到另外的一个应答消息叫ZDO_SIMPLE_DESC_RSP(0x45 0x84),这个消息的payload才是您那片文章里介绍的,可以收到类似cluster这样的内容。我遇到的问题是,我只收到了0x65 0x04的回复,而未收到0x45 0x84的回复,这样我就没有办法拿到end device的cluster的相关信息。

我的疑问是,当我发送了ZDO_SIMPLE_DESC_REQ消息后,到底应该收到哪个消息?

我现在end device加入网络后,APP收到的消息的时序如下所示:

UART IN: 0x45 0xC1 //收到device announce

UART OUT: 0x25 0x05 //ZDO_ACTIVE_EP_REQ

UART IN: 0x65 0x05

 UART IN: 0x45 0x85 //ZDO_ACTIVE_EP_RSP, 获取到终端的EP

UART OUT: 0x25 0x04 //ZDO_SIMPLE_DESC_REQ

UART IN: 0x65 0x04

UART IN: 0x45 0xC0 0x6A 0x08 0x82 //这个消息不知道是什么意思,文档上找不到对应的消息,没有收到ZDO_SIMPLE_DESC_REQ!!!

2. 我从app给znp发送APP_MSG(0x29 0x00)去设置终端灯的开/关 ,ZNP回复成功,但是end device端的灯并未有反映,请问这可能是什么问题导致的?是不是我设置的clusterid和end point不对导致的?

请VV大神在百忙之中抽空来帮忙看一下,万分感谢!!!

user4362819:

回复 Jim Yu1:

你好,我现在也在弄ZNP,不知道如何配置成协调器,然后组网呢?我现在是烧录了官方的znp工程,然后用串口连接上,然后用电脑的ZTOOLS来查看,里面有很多指令,但是我不知道如何用?能指教一下吗?

赞(0)
未经允许不得转载:TI中文支持网 » 终端设备不能发现 ZNP coordinator的信号
分享到: 更多 (0)