BLE包结构及传输速率

 根据Bluetooth 4.0 BLE部分协议:BLE中物理层physical layer的传输速率是1Mbps,除了这个外,数据传输速率与包大小、CPU处理时间相关。

包结构:

1.总体结构:

总体结构{
    U1 preamble;//前缀,可以是10101010或01010101
    U4 AccessAddress;//0x8e89bedd6 ,Access Address(4字节)
    U[x] PDU;//PDU
    U3 CRC;
};

2.广播包

广播包{
    U2 Header;//0000,0001,0010,0011,0101,0110
    //0000 - connected undirected advertising event 可连接非定向广播事件
    //0001 - connected directed advertising event 可连接定向广播事件
    //0010 - non-connected undirected advertising event 不可连接非定向广播事件
    //0011 - response to scan request form scanner扫描请求响应
    //0101 - connect request by initiator连接请求
    //0110 - connected directed advertising event 可发现非定向广播事件
    U[x] Payload;//最大37字节
};

其中Payload结构分为:

非定向广播包:{//Undirected advertising packets
    U[6] AdvA;//广播者地址 advertiser‘s public address if TxAdd = 1, or a random address if TxAdd = 0; 
    U[x<=31] AdvData;//广播数据(advertising data)
};
定向广播包{//Directed advertising packets
    U[6] AdvA;//广播者地址 advertiser‘s public address if TxAdd = 1, or a random address if TxAdd = 0;
    U[6] InitA;//contains initiator's address if RxAdd = 1, or a random address if RxAdd = 0;
}

3. 扫描请求及扫描响应

扫描请求及扫描响应{
    U2 Header;//0011  0100 
    //0011 - scan request for further information from advertiser 扫描请求
    //0100 - response to scan request from scanner 扫描响应
    U[x] Payload ;//
};

扫描请求

扫描请求{
    U[6] ScanA;//Scanner's public address if TxAdd = 1, or a random address if TxAdd = 0; 
    U[6] AdvA;//advertiser‘s public address if TxAdd = 1, or a random address if TxAdd = 0;
};

扫描响应

扫描响应{
    U[6] AdvA;//advertiser‘s public address if TxAdd = 1, or a random address if TxAdd = 0; 
    U[0-31] ScanRspData;//ScanRspData data from advertiser’s host;
};

4. 连接请求

连接请求PDU{
    U2 Header;//0101 连接请求标志
    U[34] Payload{
        U[6] InitA;//
        U[6] AdvA;//
        U[22] LLData;//包含连接信息,详细结构参考bluetooth 4.0 协议。
    };
};

5.LL 数据通道及控制包

PDU =  Header(2 Bytes)+ Payload(最多27字节)
 Header:详细说明参考bluetooth 4.0 协议; 
 
 LL 数据通道 
Payload  = 0~27字节 
LL 控制包 Payload = 1~23字节

6.速率

  若只考虑蓝牙设备连接之后,评估数据传输速率,

最大包长度=preamble(U1)+Access Address(U4)+PDU(U[29])+CRC(U3)=41字节

  射频PHY传输速率 1Mbps;

  则传输有效payload 27字节耗时:41*8/1 = 328 us;

  一个27字节的传输周期 :328 + 150 + 80 + 150 = 708 us,若能持续传输,即传输速度:38KB/s,这样显然功耗不会低,也不符合BLE协议规范,真正的传输速度受连接事件间隔和间隔内能传输数据包数目相关。

  如果连接时间间隔设置到7.5ms(协议规定最小值),一个连接事件传输3个包,则传输速率大约是10.8kB/s,一个连接事件能传输几个包与连接设备密切相关,看到很多CC2540实测数据,时间间隔7.5ms和一个传输时间3个包以上很多都达不到,51内核是其重要原因之一,在  http://processors.wiki.ti.com/index.php/CC2540_Data_Throughput  有5.9KB/s,也有在论坛看到有40ms间隔,2个包,即1.4KB/s成功的案例,以后有时间我再实测下速度。