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