我用的编译器是IAR Assembler for 8051 7.51A/W32 (7.51.1.3);协议栈版本是ZStack-CC2530-2.2.2-1.3.0;
我自己的应用程序是根据官方的无线测温实验改写的(sensor采集片内温度和电压值,周期性传给collector)。 我的最终目的是达到PC端可以从ZC中平均每秒钟读取50个float数。我现在已经实现了ZED平均9ms采集一个float,每个float转成四个Byte再传给协调器。但是我却不知道该如何成功的发往协调器?
首先我想知道,ZED要把数传给ZC,这个发送周期该怎么修改,在哪里修改?当然不是osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod );中的myTempReportPeriod时间了,因为myTempReportPeriod设置的很慢,肯定不需要考虑协调器的反应时间。如果这个值设置的很快,那这个时间是由哪里决定的呢?
其次,我说一个可行性的分析。网上有一篇名为“zigbee流量研究”,标题为“通过分析仿真和实验来最大化无线zigbee网络的吞吐量”,有一句话是“在一个单跳传输、无信标的个人局域网,最大的传输速率大约可以达到115.5kbps。这个估计考虑到了额外的zigbee包头,因此这是一个zigbee无线网络通信中的传输速率的上界的合理估计。”所以说110Kbps为理论的最大值,110Kbps = 13.75KByte/s =13.75*1024 Byte /s = 14080 Byte /s = 3520 float /s。所以我从ZC端每秒钟得到50个浮点数,这个应该是可行的!
我也找了TI相关的帖子和飞比论坛上的帖子,以zb_SendDataRequest( 0xFFFE的方式进行发送,最大的APS净荷应该是99Byte。所以就剩下最小周期的问题没有解决了!
我这几天一直在用sniffer监听官方原版实验的数据包,其实是挺糊涂的,根本没弄明白通信流程。也看了一下Zigbee2007规范3.6.2传输和接收,又看了ZigBee Wireless Networks and Transceivers,根本就弄明白我往哪个方向努力呢?我该看哪部分代码?如何测量这个ZED向ZC传送数据的最小周期?又如何改变他的最小周期值呢?











