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.

[参考译文] CC2531USB-RD:发送ZB_SEND_DATA_Request命令后无法获取所需数据

Guru**** 2468460 points
Other Parts Discussed in Thread: CC2531, CC2530

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1088190/cc2531usb-rd-couldn-t-get-the-needed-data-after-sending-zb_send_data_request-command

部件号:CC2531USB-RD
主题中讨论的其他部件:CC2531CC2530

尊敬的TI支持团队:

 

我在尝试从ZigBee终端设备获取数据时遇到了困难,因此我想寻求帮助。 下面是问题和我的环境的概述。

我有两个来自TI的CC2531 USB加密狗。 第一个是,我用它作为协议嗅探器,通过无线方式捕获数据包信息。

另一个,我用ZNP 协调员固件刷新了它,因为我不想使用内置USB,而是想通过UART (类似于CC2530)进行串行通信。 链接: https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator 我想将其连接到主机处理器(TIVA),并通过UART在TIVA微控制器和CC2531之间进行串行通信。

然后,我有另一个ZigBee温度监控作为终端设备,并将它与ZigBee协调员绑定。 我从TIVA微控制器 发送UART命令,以从ZigBee温度设备获取/读取温度。 不幸的是,我没有得到任何东西。 ZigBee温度设备似乎没有将其温度发送回ZigBee协调员。

 

设置概述:

 

到目前为止我所做的工作。

1.在连接/绑定ZigBee终端设备之前,我已按照文档中3.2 CC2530-ZNP启动过程中的说明,首先配置了ZigBee协调员。

我检查了ZigBee协调员ZB_READ_CONFIGURATION的配置  
Tx:0xFE 0x01 0x26 0x04 0x83 0xA0
Tx:0xFE 0x01 0x26 0x04 0x87 0xA4
Tx:0xFE 0x01 0x26 0x04 0x84 0xA7

并获得预期结果。

然后我发送 了ZB_APP_REGISTER_REQUEST和 ZB_START_REQUEST。 发送ZB_START_REQUEST后,ZigBee协调员将变为可用(我可以在嗅探器软件中看到它)。

2. ZigBee协调员准备就绪后,我绑定/连接ZigBee终端设备(温度监控)。 绑定没有问题,我可以在嗅探器软件中看到它,我也可以从终端设备中看到一些数据。  

3.然后在这里,我尝试发送 ZB_SEND_DATA_Request。 而终端设备的温度似乎没有发送给协调人。 我在发送ZB_SEND_DATA_REQUEST后获得了此数据。

FE 00 66 03 65 ->确认看起来正常。

FE 02 46 83 22 F0 15 ->不确定此F0。 如果我看一下状态表F0,它没有列出。

 

您能就如何读取/获取终端设备的温度提供帮助/建议吗?

期待您的回复。

 

提前非常感谢。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Depeng,

    查看 监控和测试API,数据包的结构为SOF | LEN | CMD0 | CMD1| DATA | FCS,因此对于您提供的最后一个数据包,其结构为0xFE | 0x02 | 0x46 | 0x83 | 0x22 0xF0 | 15。  0x46的CMD0是SAPI AREQ,而0x83的CMD1是 MT_SAPI_SEND_DATA_CNF (同样,0x66是SAPI SRSP,0x03是 MT_SAPI_SEND_DATA_Req)。  0x22是句柄,0xF0是转换为 ZMacTransactionExpirred的状态。  这意味着,尽管ZNP收到 了ZB_SEND_DATA_Request,但它无法通过无线方式发送。  这很可能是因为ZNP的Nwk_indiry_MSG_timeout发生在Zed轮询数据之前。  您可以使用嗅探器日志来确认这一点,然后修改应用程序以改善这种情况。  您还应确保 ZB_SEND_DATA_Request具有ZCL读取属性请求的正确数据。  

    ZNP为 端点注册ZCL_CLUST_ID_MS_TEMPERATY_measurement OUT群集,以便温度传感器Zed可以识别并向其报告,这会更有用。 或者,ZNP签发 ZCL_CMD_CONFIG_REPORT,以便温度传感器Zed开始自动报告其 ZCL_CLONG_ID_MS_TEMPTRATURE CLUST_measurement_value 属性值。

    此致,
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Ryan:
    Depeng代表我发布了上述问题,因为我还不能在论坛上发布。 感谢Depeng的帮助:)
    非常感谢Ryan的快速,详细的回复。
    我尝试了以下测试迭代,但仍无法从终端设备读取温度数据。
    请就我做错了什么提供建议。 可能是我的步骤和测试程序不正确,或者我发送的数据不正确。 请告诉我您的想法。
    请注意:
    Tx表示命令由协调员发送。
    Rx是指协调器接收的数据。
    协调人地址= 0x0000
    终端设备地址= 0xa31a
    测试迭代1:
    1。] 我已阅读配置以确保一切正常。
    ZB_读取_配置  
    长度= 0x01  
    Cmd0 = 0x26  
    Cmd1 = 0x04  
    ConfigId = ZCD_NV_PANID/ZCD_NV_logical_type/ZCD_NV_CHANLIST
    Tx:0xFE 0x01 0x26 0x04 0x83 0xA0 ->用于ZCD_NV_PANID
    Rx:0xFE 0x05 0x66 0x04 0x00 0x83 0x02 0x34 0x23 0xF1
    Tx:0xFE 0x01 0x26 0x04 0x87 0xa4 ->用于ZCD_NV_logical_type
    Rx:0xFE 0x04 0x66 0x04 0x00 0x87 0x01 0x00 0xe0
    Tx:0xFE 0x01 0x26 0x04 0x84 0xa7 -> ZCD_NV_CHANLIST
    Rx:0xFE 0x07 0x66 0x04 0x00 0x84 0x04 0x00 0x08 0x00 0x00 0x00 0xED
    2。] clusterid被放置在输入命令列表中。
    ZB_APP_REGISTER_REQUEST  
    长度= 0x0d  
    Cmd0 = 0x26  
    Cmd1 = 0x0A  
    AppEndPoint = 0x01
    AppProfileID = 0x0104
    DeviceID = 0x0302
    DeviceVersion = 0x01
    未使用= 0x00
    InputCommandsNum = 0x01
    InputCommandsList = 0x0402
    OutputCommandsNum = 0x00
    OutputCommandsList = 0x0000
    Tx:0xFE 0x0d 0x26 0x0a 0x01 0x04 0x01 0x02 0x03 0x01 0x00 0x01 0x02 0x04 0x00 0x00 0x00 0x22
    Rx:0xFE 0x01 0x66 0x0a 0x00 0x6d  
    ] ZB_START_REQUEST
    Tx:0xFE 0x00 0x26 0x00 0x26
    Rx:0xFE 0x00 0x66 0x00 0x66  
    Rx:0xFE 0x01 0x45 0xC0 0x09 0x8d  
    Rx:0xFE 0x01 0x46 0x80 0x00 0xc7  
    ] ZB_SEND_DATA_REQUEST
    长度= 0x0a
    Cmd0 = 0x26  
    Cmd1 = 0x03  
    目标= 0xa31a (终端设备地址)
    CommandId = 0x0402
    句柄= 0x22
    ACK = 0x01/0x10
    半径= 0x0F
    len = 0x02
    数据= 0x0000
    Tx:0xFE 0x0a 0x26 0x03 0x1a 0xa3 0x02 0x04 0x22 0x01 0x0F 0x02 0x00 0x00 0xbe
    Rx:0xFE 0x00 0x66 0x03 0x65  
    Rx:0xFE 0x02 0x46 0x83 0x22 0xF0 0x15
    Tx:0xFE 0x0a 0x26 0x03 0x1a 0xa3 0x02 0x04 0x22 0x10 0x0F 0x02 0x00 0x00 0xaf
    Rx:0xFE 0x00 0x66 0x03 0x65  
    Rx:0xFE 0x02 0x46 0x83 0x22 0xF0 0x15
    测试迭代2:
    在这里,它与测试迭代#1基本相同,只是我用以下信息更改了“步骤2”。
    2。] clusterid被放置在输出命令列表中。
    ZB_APP_REGISTER_REQUEST
    长度= 0x0d  
    Cmd0 = 0x26  
    Cmd1 = 0x0A  
    AppEndPoint = 0x01
    AppProfileID = 0x0104
    DeviceID = 0x0302
    DeviceVersion = 0x01
    未使用= 0x00
    InputCommandsNum = 0x00
    InputCommandsList = 0x0000
    OutputCommandsNum = 0x01
    OutputCommandsList = 0x0402
    Tx:0xFE 0x0d 0x26 0x0a 0x01 0x04 0x01 0x02 0x03 0x01 0x00 0x00 0x00 0x01 0x02 0x04 0x22
    Rx:0xFE 0x01 0x66 0x0a 0x00 0x6d  
    测试迭代#3:
    在这里,它与测试迭代#1基本相同,只是我用以下信息更改了“步骤2”。
    2。] clusterid被置于输入和输出命令列表中。
    ZB_APP_REGISTER_REQUEST
    长度= 0x0d  
    Cmd0 = 0x26  
    Cmd1 = 0x0A  
    AppEndPoint = 0x01
    AppProfileID = 0x0104
    DeviceID = 0x0302
    DeviceVersion = 0x01
    未使用= 0x00
    InputCommandsNum = 0x01
    InputCommandsList = 0x0402
    OutputCommandsNum = 0x01
    OutputCommandsList = 0x0402
    Tx:0xFE 0x0d 0x26 0x0a 0x01 0x04 0x01 0x02 0x03 0x01 0x00 0x01 0x02 0x04 0x01 0x02 0x04 0x02 0x04 0x04 0x25
    Rx:0xFE 0x01 0x66 0x0a 0x00 0x6d  
    对于我目前为止所做的上述测试迭代,请告诉我哪一部分做得不正确。
    此外,您提到这个Nwk_indiry_MSG_timeout,我可以在应用程序中改进它。
    您能否将下载应用程序的链接发送给我,以便我可以更新超时,然后进行编译,然后更新固件?
    此外,如果您可以指出我需要更新的文件或变量或宏的确切位置,这将非常有帮助。
    非常感谢。
    此致,
    鲁迪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用嗅探器来检查空中发生的确切情况? 如果是,您是否可以提供嗅探器日志来进行检查?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您没有将 ZCL_CLUST_ID_General标识(0x0003)放在输入或输出命令列表中,使得Zed温度传感器难以识别 要绑定的ZCL_CLONG_ID_MS_TEMPERATURE (0x0402)输出群集。   

    ZB_SEND_DATA_REQUEST基本上转换为AF数据请求,但您的数据长度和内容与Read Attributes命令不对应。  例如,我希望数据长度为0x05,数据长度为 framecontrol (1字节) | transID (1字节)| commandID (1字节)| attributeID (2字节),尽管在此示例中,它们可以全部填充0x00s。

    在使用Zigbee2MQTT项目时,应遵循其有关下载,修改和编译ZNP的说明。  他们提供了关于Github的充分文件。  事实上,我强烈建议您在他们的论坛上请求帮助,因为您正在寻求有关如何使用他们的系统和设置的建议。

    此致,
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Ryan:

    非常感谢您的回复。

    按照您的建议添加群集ID 0x0003并将数据长度更正为0x05并提供读取属性命令ID后,我可以从终端设备读取温度值。 终端设备将其温度值发送给协调器,协调器要求的所有内容(通过发送读取属性命令)。

    但是,在协调器和终端设备之间没有活动的一段时间后,终端设备进入休眠状态。 当终端设备处于休眠状态时,协调员询问其温度值,终端设备将不响应,而是出现超时。

    现在我的问题是,协调员应该向终端设备发送什么命令来告诉他每次终端设备处于唤醒状态时必须向协调员发送温度值? 就像这样,一旦终端设备处于唤醒状态,并且协调器不需要请求温度值,终端设备就会自动将其温度值发送给协调器。

    谢谢你。

    此致,

    鲁迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要发送 configure reporting命令,数据将是方向字节(ZCL_SEND_ATTR_Reports/0x00),属性ID (ATTRID_TEMPERATY_measurement_measured_value/0x0000), 数据类型(ZCL_datatype_Int16/0x29), 最小和最大报告间隔(每个两个字节,以秒为单位), 和可报告的更改(长度与 在数据类型中定义的长度相同,以属性ID支持的单位表示(0x2C01在Int16_t中为300/3度)。  嗅探器设置将大大有助于您的开发,因为您可以更好地了解无线通信过程中发生的情况。

    此致,
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Ryan:

    现在一切都如预期的那样运作。

    非常感谢。

    此致,

    鲁迪