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.

[参考译文] CC2340R5:在 ZBOOS 栈中、ZB_APS_SEND_USER_PAYLOAD 接口在发送数据时会导致非常长的延迟、例如单跳单播传输的延迟为 900 毫秒。

Guru**** 2583915 points
Other Parts Discussed in Thread: CC2340R5, ENERGYTRACE

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1574900/cc2340r5-in-the-zboos-stack-the-zb_aps_send_user_payload-interface-will-cause-a-very-long-delay-when-sending-data-for-example-the-latency-for-a-single-hop-unicast-transmission-is-900-milliseconds

器件型号:CC2340R5
主题中讨论的其他部件:SysconfigENERGYTRACE

工具/软件:

在 ZBOOS 堆栈中、ZB_APS_SEND_USER_PAYLOAD 接口在发送数据时会导致非常长的延迟、例如单跳单播传输的延迟为 900 毫秒。

我认为单跳单播延迟异常、 请检查是否正确使用了“ZB_APS_SEND_USER_PAYLONG" API“ API 接口。  这应该是发送缓冲区引起的问题、在执行“ZB_APS_SEND_USER_PAYLONG"API 接口“ 接口后、没有立即发送数据传输。

typedef 结构

unsigned char addr_mode;
unsigned char ack_enable;
unsigned char source_endpoint;
unsigned char dest_endpoint;
unsigned short cluster_id;
unsigned short profile_id;
}ws_send_frame_t;

静态易失性无符号字符 ws_rf_send_status=0;

静态空洞 ws_rf_send_CB(zb_uint8_t 参数)

  zb_ret_t status=zb_buf_get_status (param);


  zb_buf_free (param);


  WS_RF_send_status=0;

  WS_printf(“ws_rf_send_CB:0x%x\r\n“、status);

}

unsigned char ws_rf_send (zb_addr_u dest_addr、unsigned char *data、unsigned char len、ws_send_frame_t *param)

If(!ZB_Joined())

返回 WS_SEND_NO_NET;
}
IF(长度>82)

返回 WS_SEND_TOO_LONG;
}

if (ws_rf_send_status=1)

返回 WS_Sending;
}
WS_RF_Send_status=1;

zb_bufid_t buf_id;
buf_id = zb_buf_get_out ();

if(!buf_id)

返回 WS_SEND_BUF_ERR;
}

ZB_APS_SET_USER_DATA_TX_CB (WS_RF_Send_CB);
ws_send_addr=dest_addr.addr_short;
zB_ret_t ret=zB_APS_SEND_USER_PAYLONG (
buf_id、
dest_addr、/* dst_addr */
param->profile_id、// ws_default_profileID、/* profile_id */
param->cluster_id、//ws_default_clusterd、/* cluster_id */
param->dest_endpoint、//ws_default_dest_endpoint、/* dst_endpoint */
param->source_endpoint、//ws_default_soure_endpoint、/* src_endpoint */
param->addr_mode、//ZB_APS_ADDR_MODE_16_ENDP_PRESENT、/* addr_mode */
param->ack_enable、/*ZB_false*//*ZB_true*//* aps_ack_is_enabled */
数据、
长度
);
if (ret!=RET_OK)

返回 WS_SEND_BUF_ERR;
}

返回 0;
}

unsigned char ws_at_send_rf_data (unsigned char *buf、unsigned short len)

unsigned char ret=0;

ws_send_frame_t ws_at_send_frame;
zb_addr_u dest_addr;


ws_at_send_frame.ack_enable=1;

ws_at_send_frame.addr_mode=ZB_APS_ADDR_MODE_16_ENDP_PRESENT;

dest_addr.addr_short = 0;  //目标地址是协调器。

ws_at_send_frame.source_endoint=ws_default_soure_endoint;

ws_at_send_frame.dest_endpoint = WS_DEFAULT_DEST_ENDPOINT;
ws_at_send_frame.cluster_id = ws_default_clusterid;
ws_at_send_frame.profile_id =WS_DEFAULT_PROFILEID;

ret=ws_rf_send (dest_addr、buf、len、&ws_at_send_frame);
返回 ret;
}

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

    你好 baosong、

    将此数据包发送到的节点(协调器,路由器或终端设备)的作用是什么?  您使用的是哪个版本的 SimpleLink F3 SDK?  您只应 在堆栈初始化期间调用 ZB_APS_SET_USER_DATA_TX_CB (ws_RF_Send_CB);而不是每次发送 APS 数据包时调用一次。  Zigbee 基础 SLA 中将讨论此序列 、以防您尚未引用它。  您如何测量从调用 API 到消息无线传输之间的时间?

    此致、
    Ryan

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

    1.发送此数据包的节点(协调器,路由器或终端设备)的作用是什么?

    路由器向协调器发送数据。

    2.您使用的是哪个版本的 SimpleLink F3 SDK?

    版本为“simplelink_lowpower_f3_SDK_9_12_00_19"</s>“

    3.您如何衡量 API 被调用与消息通过无线传输之间的时间?

    执行 API 接口后、Ubiqua 工具不会以无线方式捕获任何数据包、只有在调用回调函数“ws_rf_send_cb"后“后才能在无线方式捕获数据包。

    上面的屏幕截图是一个通信延迟示例。

    帧 1:

    发送时间为 10:31:50.949、  接收时间为 10:31:51.074、  调用 ws_RF_Send_CB 函数的时间为  10:31:51.082、 无线数据包捕获时间为 10:31:51.125

    传输延迟为 125 毫秒。

    帧 2:

    发送时间为 10:31:52.050、  接收时间为 10:31:52.446、  调用 ws_RF_Send_CB 函数的时间为  10:31:52.454、 无线数据包捕获时间为 10:31:52.496

    传输延迟为 396 毫秒。

    第 3 帧:

    发送时间为 10:31:53.361、  接收时间为 10:31:53.449、  调用 ws_RF_Send_CB 函数的时间为  10:31:53.460 、 无线数据包捕获时间为 10:31:53.501

    传输延迟为 88 毫秒。

    帧 4:

    发送时间为 10:31:54.124,  接收时间为 10:31:54.216,  调用 ws_RF_Send_CB 函数的时间为  10:31:54.228 , 无线数据包捕获时间为 10:31:54.268

    传输延迟为 92 毫秒。

    帧 5:

    发送时间为 10:31:54.803、  接收时间为 10:31:54.833、  调用 ws_RF_Send_CB 函数的时间为  10:31:54.837 、 无线数据包捕获时间为 10:31:54.880

    传输延迟为 30 毫秒。

    第 6 帧:

    发送时间为 10:31:55.533、  接收时间为 10:31:56.433、  调用 ws_RF_Send_CB 函数的时间为  10:31:56.456、 无线数据包捕获时间为 10:31:56.484

    传输延迟为 900 毫秒。

    15ms 到 30ms 范围的传输延迟应视为正常、帧 5 的延迟应视为正常。   帧 6 的延迟达到 900ms。

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

    当我测试 SLA 时、我看到 干净通道上 SEND_AP_PAYLONG 和 SEND_AP_PAYLOAD_CB 之间平均有 30ms 的延迟(向下 20ms、向上 40ms)。  鉴于您观察到的差异很大、我想知道您的 2.4 GHz 信道是否有噪声、是否会导致 CSMA/CA 功能出现问题。  但是、您的屏幕截图不会指示任何其他信道活动。  或者、是否有一些在发送和回调操作之间差异很大的自定义代码实现?  您是否根据自己的解决方案验证了 SLA 说明? 您使用的是 TI LaunchPad EVM 还是定制硬件?

    此致、
    Ryan

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

    您能给我提供您的测试源代码吗?   例如、基于 on_off_light.c 修改后的文件

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

    同时、我也面临另一个问题。

    onoff_switch 示例显示、在 8_40_02_01 版中进入周期性睡眠模式后、睡眠电流可能低于 2uA。 但在 9_12_00_19 版本进入周期性睡眠模式时、睡眠电流为 2mA、、而未进入低功耗模式。在这两个 SDK 版本中、睡眠模式是否有任何变化?

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

    你好 baosong、

    每个主要 SDK 版本都执行了测试、以验证待机功耗是否符合预期。  您是否使用直接从 F3  SDK v9.12 导入的默认 onoff_switch 示例、并具有 SDK 版本说明中的所有正确依赖项?  您是否尝试过 F3 SDK v9.10 以及参考点?

    此致、
    Ryan

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

    我刚刚为 SimpleLink F3 SDK v9.12 运行默认的 onoff_light 和 onoff_switch 示例、测量 EnergyTrace 中的 onoff_switch CC2340R5 LP 电流消耗时、没有迹象表明未正确利用低功耗待机模式。

    此致、
    Ryan