BLE Throughput
如何计算?
开门见山,我们先说一下BLE TP的计算公式:
TP (Bytes per Second) = (1000ms * Number of Packets in a Connection Interval * Data Per Packet) / connection interval ms
首先来看一下这些参数:
1) Connection Interval: 代表设备之间对话的频率;
我们知道一条BLE link包含两个设备,分别是Central和Peripheral,两者之间的一次通信,叫Communication Event. 而两次Communication Event之间的间隙,就叫Connection Interval。
另外,对于不同的设备来讲,最小的Connection interval是不一样的。
如上图,显而易见,IOS限制了某些最小连接间隙,尤其是iPhone 6之前的版本,最小Connection interval只能更改到30ms,这会一定程度上造成数据传输率上。
2) Number of Packets in a Connection Interval: 代表在一个Connection interval时间内,双方交互的Packets数目;
不同的手机或设备,所支持的NPCI也是有差别的,一般在IOS上是4,Android可能会到6。
3) Data Per Packet:表示每一包Packet携带的数据量,一般受限于MTU大小;
MTU更新一般在连接之后由主机自动发起和从机进行协商,选择双方支持的MTU中的小值。如果不协商会选择Spec要求的默认MTU。
当然,对于BT Core Spec不同的版本上面,ATT支持的MTU不尽相同,整体上是呈现上升趋势,从最初的27->251(Support LE Data Length Extension功能才可以),除去(L2CAP + ATT)开销7个Bytes,APP层可以发送的最大data是20或244 Bytes;
当然LE 2M PHY和LE 1M PHY,也是对数据吞吐量有影响的。理论上,使用LE 2M PHY可以使得每个连接时间期间从PHY发送的数据量增加一倍。
怎样测试BLE TP?
基本思想是GATT Server端不断发送GATT通知,GATT Client端接收数据,过程中尽可能减少开销,尽可能减少停机时间。所以我们可以通过调整1中提到的参数以增加吞吐量。
- 选择最合适的MTU大小;
- 是否可以支持LE 2M PHY;
- 是否可以支持LE Data Length Extension功能;
- 权衡最合适的连接间隔;
- 优化APP层发送通知的机制,尽量保证每个Connection interval里面都能发到NPCI包数据,占满带宽;
当然,最好在屏蔽空间测试,减少其他2.4Ghz信号源的干扰。