完整的计算过程请参考Digi官方网站的文章:Sending data through an 802.15.4 network latency timing. Digi的S1模块可以跑802.15.4固件,发送数据通过802.15.4的时延是空中传输时间加上CSMA-CA耗时和重传的时间之和,详述如下。最新的XBee S2C 802.15.4计算方法类似,只有少许差别,其它以802.15.4为基础的协议也可参考下面的一些内容,根据不同网络层协议中或参数中定义的包头包尾,有效载荷,最大字节数和mac层应用层的重发次数等另作计算,以方便对极端场景做程序上的优化设计。

快速参考(以下数据在接下来的计算中会用到)

单帧最大有效载荷数据:XBee 8021.5.4 max payload = 100 bytes 
空中波特率: RF baud rate (802.15.4, 2.4GHz) = 250 Kbps 
单字节250kbps传输耗时:Byte time @ 250 Kbps = 32 us 
64-bit寻址发送空中耗时: T_air(B) = 0.8 + 0.032B ms 
16-bit寻址发送空中耗时: T_air(B) = 0.416 + 0.032B ms 
16-bit寻址发送最佳场景时耗时(广播及单播):16-bit best case (broadcast and unicast): T_total(B) = 0.544 + 0.032B ms 
64-bit寻址单播发送最佳场景时耗时:64-bit unicast best case: T_total(B) = 0.928 + 0.032B ms 
64-bit寻址广播最坏场景耗时: 64-bit Broadcast worst case: T_total(B) = 9.376 + 0.032B ms 
16-bit寻址单播最坏场景总耗时:64-bit unicast worst case: T_total(B) = 40.096 + 0.128B ms 
64-bit寻址单播最坏场景总耗时:64-bit unicast worst case: left for the reader to calculate

空中时间: 802.15.4物理层允许最大127字节包,去除包头包尾S1的有效载荷最大为100字节,S2系列的ZigBee包头会更大,每个帧最大有效载荷请以手册中为准。

802.15.4物理层定义RF的波特率为250Kbps,每位4us或是说每字节32us 所以T_air(B)=0.8 + 0.032B ms, 这里B是字节数 这个公式仅考虑空中时延,实际场景还要加上CSMA-CA和重传 载波监测多址接入碰撞规避机制是在发射前检测信道是否干净(CCA),如果信道评估没过,会延迟一段随机时间,再次尝试CCA。 CCA的算法在IEEE802.15.4的172页中有详述。这里有个简易的框架参考:

  1. 延迟一段随机时间, 随机延迟:(0 : 2^BE - 1) * 0.320 ms BE从RN开始,每次加1,最大值5次,直到步聚发送后清0。(RN在模块中可设置,默认为0,公式0:N中冒号表示在0和N之间的数值中随机选择)
  2. CCA (0.128ms)
  3. 如果CCA通过,发送出去,如果信道被占用,重复1~3步骤,最多重试4次。
  4. 如果是广播模式(没有应答/重传)就完成了。如果是单播:
    1. 等待目标节点的ACK (0.864ms)
    2. 如果ACK收到,就完成了,如果没收到1~4,最多重试3次

总计发送时间 T_total(B) 最好的情况,分16位寻址和64位寻址:

16-bit: T_total(B) = 0.544 + 0.032B ms 64-bit: T_total(B) = 0.928 + 0.032B ms

最差的情况:

16-bit:T_total(B) = 40.096 + 0.128B ms

也就是以常见的16位寻址的方式发送数据,在802.15.4协议下发送100字节,在最好的情况下,约耗时3.7ms,最差的情况为52.8ms。

最新文章

  1. maven-过滤不打入包的文件
  2. JAVA内存管理
  3. X删除数据表的新用法
  4. UIAutomator 编译
  5. 【leetcode❤python】242. Valid Anagram
  6. [Java] SSH框架笔记_框架分析+环境搭建+实例源码下载
  7. linux服务监控脚本
  8. [转]Linux/Unix系统镜像/备份/恢复 (dd 命令使用)
  9. ArcGIS 栅格数据已加载后的获取
  10. google地图marker文字label添加js lib
  11. 【Spring MVC系列】--(4)返回JSON
  12. 【天坑】ASP.net WebAPI跨域调用问题
  13. .Net中Web增加加密狗管理
  14. PHP批量更新数据
  15. PowerShell-自定义函数(五)-参数互斥:ParameterSetName
  16. CEF C++调用前端js方法展示传递过来的图片数据
  17. SpringBoot之通过yaml绑定注入数据
  18. 配置 BizTalk Server
  19. 【转载】TensorFlow学习笔记:共享变量
  20. Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果

热门文章

  1. 【poj1017】 Packets
  2. MATLAB与C/C++混合编程的一些总结
  3. 仿知乎Android端回答UI
  4. jeecms内容显示条数
  5. tachyon 集群容错
  6. 在eclipse.ini中指定jdk的方式
  7. [转]Oracle EBS APIs
  8. iOS9.3 Could not find Developer Disk Image 真机调试错误解决办法
  9. 【 Android】自定义的AlertDialog中的EditText无法调用输入法问题解决
  10. a标签实现文件下载
  11. 打印杨辉三角—Python
  12. java构造器和构建器
  13. MySQL图形化管理工具
  14. composer 安装依赖缓慢,查看 composer 的详细执行日志
  15. Unity3D 入门 游戏开发 Unity3D portal game development
  16. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)
  17. geoserver 开发1
  18. Ext BoxComponent
  19. Mybatis 类的转换器
  20. 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network