一、BLE传输速率
1、BLE理论吞吐率以及吞吐率计算
1)BLE4.0/4.1的理论吞吐率为39kb/s;
2)BLE4.2的理论吞吐率为100kb/s;
3)BLE5.0的理论吞吐率为180kb/s(前提:使用2Mbps调制速率;如果使用1Mbps调制速率,那么吞吐率就和蓝牙4.2一样);
计算公式:
下面是具体计算原理及公式:
蓝牙数据包
下面分别是BLE 4.0/4.1 和4.2数据包格式
蓝牙数据包由Preamble、Access、PDU、CRC四部分组成。
其中,PDU由Header、Payload、MIC三部分组成。
Header由LLID、NESN、SN、MD、Length五部分组成。
传输周期:
1)设备A发送一个数据包给设备B,该过程称作T时隙;
2)然后等待150us,该过程称作IFS时隙;
3)接着设备B发送一个ACK包给设备A,该过程称作R时隙;
4)然后又等待150us,开始下一次传输
5)T + IFS + R + IFS 为一个完整的传输周期
注:ACK包为空包,即PDU的Payload为0,那么ACK包的长度 = 1+4+2+3 = 10字节(具体请看BLE数据包的组成)
蓝牙4.0/4.1/4.2的调制速率是1Mbps,即1秒钟传输1M bits,传输1bit的时间是1us;
(1)蓝牙4.0/4.1
蓝牙4.0/4.1的PDU头部用 5个bit标识有效数据长度,即0-31字节,那么去除数据完整性校验MIC的4字节后,有效数据最大为27字节。
T时隙时间 = (1+4+2+27+4+3) x 8 x 1us = 328us
R时隙时间 = (1+4+2+3) x 8 x 1us = 80us
一个完整传输周期时间 T = 328 + 150 + 80 + 150 = 708us
那么
(2)蓝牙4.2
蓝牙4.2的PDU头部用8bit标识有效数据长度,即0-255字节,那么去除数据完整性校验MIC的4字节后,有效数据最大为251字节
T时隙时间 = (1+4+2+251+4+3) x 8 x 1us = 2120us;
R时隙时间 = (1+4+2+3) x 8 x 1us = 80us;
一个完整传输周期时间 T = 2120 + 150 + 80 + 150 = 2500us;
那么
所以,BLE4.2的理论吞吐率为:0.803 * 1024 / 8 = 102.7KB/S;
(3)蓝牙5
蓝牙5的调制速率是1Mbps或2Mbps,即1秒钟最快可传输2M bits。
(1)使用1Mbps调制速率
那么吞吐率就和蓝牙4.2一样。
(2)使用2Mbps调制速率
那么传输1bit的时间 = 1s / 2M bits = 0.5 us
T时隙时间 = (1+4+2+251+4+3) x 8 x 0.5us = 1060us
R时隙时间 = (1+4+2+3) x 8 x 0.5us = 40us
一个完整传输周期时间 T = 1060 + 150 + 40 + 150 = 1400us
那么
可见蓝牙5的吞吐率较蓝牙4.2提升了78.5%。
2、影响传输速率的因素
1)使用的 PHY
蓝牙 5 中基本上有三个 PHY:原始 1 Mbps PHY、新的 2 Mbps 和编码 PHY(S=2 或 S=8)。 所使用的 PHY 将直接影响您可以实现的最大数据吞吐量,
因为它决定了通过空中发送数据包的实际原始数据速率
蓝牙4.0/4.1/4.2的调制速率是1Mbps,即1秒钟传输1M bits,即1bit/us,蓝牙5的调制速率是1Mbps或2Mbps,即1秒钟最快可传输2M bits,即2bit/us
2)连接间隔
蓝牙基带是跳频工作的,主机和从机会商定多长时间进行跳频连接,连接上才能进行数据传输。这个连接和广播状态和连接状态的连接不是一样的意思。
主机在从机广播时进行连接是应用层的主动软件行为。而跳频过程中的连接是蓝牙基带协议的规定,完全由硬件控制,对应用层透明。明显,如果这个连接间
隔时间越短,那么传输的速度就增大。连接上传完数据后,蓝牙基带即进入休眠状态,保证低功耗。其是1.25毫秒一个单位。
一旦BLE设备建立连接后,两个设备会以相等的时间间隔交换数据,这个间隔成为连接间隔(Connection Interval),间隔范围是7.5ms-4s。并且,要交互
的数据都发生在Connection Event之间,其余时间处于sleep状态,即使应用层无数据交互,整个链路也会以Connection Interval间隔交互数据(空包),应用层数
据多,Connection Event时间就越长,sleep时间就越短。因此,连接间隔决定着传输速率,值越小,发送数据越快,但功耗也会越大;另外,IOS要求连接间隔
最小时15ms,最大最小之间的时间差值最低15ms,因此IOS支持的最快连接间隔最小最大分别是15ms-30ms
,安卓端最低7.5ms
3)CLE
(connection event length extension)链接事件长度扩展
在BLE4.0中,单个连接间隔,最多只能发送4(IOS)或者6(Android)个数据包,当打开CLE功能时,协议栈会判断链接间隔剩下的时间是否还支持发送数
据包,如果还有时间,那么会继续进行数据发送,而不是受限于6个包
4)ATT 最大传输单元 (ATT MTU)
即在一个传输单元中的最大有效数据传输量,对于 MTU 值可以有多高,每个规范没有限制。但使用的特定堆栈可能有其自身的限制。 例如,如果您启用 DLE,
那么您最多可以传输 251 – 4 = 247 个字节(扣除 L2CAP 标头大小后),mtu的格式为1字节op_code,2字节attr handle,因此实际一帧传输的用户数据为ATT_MTU-3,
还剩下 244 个字节用于实际的 ATT 有效载荷数据。
5)数据长度扩展 (DLE:data length extension)
允许数据包大小容纳更大量的有效负载(最多 251 个字节,禁用时为 27 个),蓝牙4.2、蓝牙5.0及以上才支持数据长度扩展。。
6)操作类型
有响应写入与无响应写入、指示与通知,有响应,则每次数据通信,需要更多的时间。
7)帧间空间 (IFS)
同一信道索引上的两个连续数据包之间的时间间隔称为帧间空间。 它被定义为从前一个数据包的最后一位结束到后续数据包的第一位开始的时间。帧间空间被指定
为“T_IFS”并且应为 150 μs
8)空包传输
如果接收数据的设备没有数据要发回,它仍然需要按照蓝牙规范发送一个空包
9)数据包开销
数据包包含一些不计入应用程序数据(ATT 数据)的开销数据。 基本上,这些字节将消耗部分传输数据速率,而不会考虑作为应用程序数据的一部分发送的任何字节
3、实际应用场景
在实际应用场景中,可以通过相关接口获取MTU,间隔时间等参数,在发送数据时,才可以根据主设备的这些参数,确定发送的数据包大小,优化发送参数。尽可能的
让每个连接间隔都处于发包状态,才能接近最大速率。
用Nordic的nrf58210芯片,s113协议栈,用小米6X可以达到100KB/S左右,iphone13传输速率大概65KB/S(连接间隔15ms),红米10X传输速率大概35KB/S。
实际应用场景的限制:
1)一个251字节的蓝牙数据包和它的ACK包总共在空中大概持续2.5ms时间,因为每个连接间隔还需要预留一些时间给协议栈调度,射频初始化,以及应用程序执行,
这个时间可能为3ms左右;
2)不同的连接设备,MTU大小,连接间隔,每个连接间隔用于通信的时间等参数都可能不一样,被连接的设备可以建议设置相关参数,但是主设备可能不采用,所以
可能不同的的连接设备,BLE传输速率都不一样。并且传输速率差异可能很大,有的可能只有几KB/S。
3)如果是双模的,在连接了经典蓝牙的情况下,BLE的传输速率大大下降,可能只有几KB/S。同时,在连接了BLE的情况下,也可能影响到经典蓝牙的连接。
4)易受干扰,在距离不变的情况下,晃动BLE设备,都会造成BLE的传输速率降低很多。
5)受传输距离影响大,实测,在靠近设备时,传输速率在100KB/S左右,在把设备拿到2米左右的距离,传输速率只有40多KB/S。
6)实际应用中,要达到较大的传输速率,协议栈要做优化,应用程序也要优化,可能会占用比较多的资源,因为要快速的,连续的往FIFO中发送数据。
二、抓包工具
1、wireshark抓包流程
具体流程,请看附件。
Wireshark所需文件:
nRF_Sniffer_BLE_UG_v4.1.0.pdf
2、抓包界面
参数说明:
接口:选择抓包工具端口号;
Device:选择需要抓包的BLE设备,信号强度+mac地址
Adv Hop:一共40个信道,广播信道:37,38,39,数据通道:0~37,这里选择广播信道;
PHY:BLE的调试速率,蓝牙4.0/4.1/4.2的调制速率是1Mbps,即1秒钟传输1M bits,即1bit/us,蓝牙5的调制速率是1Mbps或2Mbps,即1秒钟最快可传输2M bits,即2bit/us。
Length:数据长度(payload,有效数据);
SN:值为1,表示重传,0表示不是重传;
NESN:值为1表示有ack,数据接收成功,期待下一个数据,值为0,表示数据未接收到;
Master只更新SN,Slave只更新NESN
1)、判断是不是新的数据包
当Slave收到一包,NESN == SN时,认为是新包;
当Master收到一包, NESN和SN不同,认为是新包;
2)、判断是否为重发包(可用于流控):
当Slave收到一包,NESN != SN时,认为是重发包;
当Master收到一包, NESN和SN相同时,Master重传上一包;
More Data:值为False:表示没有数据了,进入休眠,值为Ture,表示还有数据没发完,继续发送数据;
Event counter :事件计数;
Empty PDU:连接空包,心跳报文,判断BLE是否建立连接;
注意:
1)Device选择,需要在广播阶段,连接BLE前选择,BLE连接成功后,设备不在列表中。
2)BLE连接成功后,有可能抓不到数据。此时重新连接BLE或者重新抓包,重复几次,一般都能抓到BLE数据。
手把手教你开发BLE数据透传应用程序 - iini - 博客园
上面是Nordic的调试方法