|
注册登录,了解更多芯片技术。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
BLE传输带宽主要跟两个要素有关: 通信周期和每个通信点可传输的数据量。1.通信周期: 安卓手机一般可支持到10ms,苹果一般可支持到15ms2.每个通信点可传输的数据量: 就是指每包的长度以及可以传多少包3.BLE理论带宽传输计算如下:按15毫秒通信周期,每次基本通信能发4包(发包个数取决于主机)
若PDU长为27, 即payload长是 20 byte,那传输速度是 (1000/15)204 约= 5K byte 速度。
若PDU长为251,即payload长是 244 byte,那传输速度是 (1000/15)2444 约= 63K byte 速度。(要双方同时支持DLE和2M属性) -----------------------------------------------------------以 AC63_v2.1.0 版本的trans_data示例说明:1.改大本地发送端ATT协议MTU的大小和应用层cbuf的大小。#define ATT_LOCAL_MTU_SIZE (517)/*本地MTU的长度,range:23~517,会通过接口ble_vendor_set_default_att_mtu配置*/#define ATT_SEND_CBUF_SIZE (ATT_LOCAL_MTU_SIZE *5)/*cbuf是contoller发包的二级缓存*//*一般情况是client端主动发起MTU交换;但如果client没发起,server角色也可以使用接口发起MTU交换(ble_api.h)*/void att_server_set_exchange_mtu(u16 con_handle);/*MTU是否调整生效,有对应的事件消息 ATT_EVENT_MTU_EXCHANGE_COMPLETE,事件带调整后的MUT的值*/
2.改小蓝牙的通信周期interval的值,最小周期是7.5 ms。(从机只请求,通信周期由主机决定)static const struct conn_update_param_t trans_connection_param_table[] = { {6, 9, 0, 400}, /*Android请求的连接参数*/ {6, 12, 0, 400}, /*ios请求的连接参数*/ {16, 24, 0, 400},/*ios请求的连接参数*/};
3.修改每次通信最多收发数据包的个数,contoller的一级缓存。(建议<=10,能收发多少包最终由主机决定)const int config_btctler_le_rx_nums =10; /*空中1次通信可接收最多的数据包个数*/const int config_btctler_le_acl_total_nums =10; /*空中1次通信可发送最多的数据包个数*/
4.开启 Data Length Extension supported (LE_DATA_PACKET_LENGTH_EXTENSION),简称DLE ,ACL层的每个数据包PDU的长度可配置范围 27~251 bytes。(主机要支持蓝牙v4.2或以上版本)/*蓝牙版本features*/const uint64_t config_btctler_le_features = SET_ENCRYPTION_CFG|LE_DATA_PACKET_LENGTH_EXTENSION;const int config_btctler_le_acl_packet_length = 251;/*数据包payload长度,range:27~251*//*主从机都可以发起DLE请求交换,一般是主机发起,可调用接口;做从机默认不需要调用该接口*//*是否调整生效,有对应的事件消息 HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE 上来*//*具体代码调用流程控制可参考SDK版本V2.2.1,有添加调用示例*/int ble_comm_set_connection_data_length(u16 conn_handle, u16 tx_octets, u16 tx_time)ble_comm_set_connection_data_length(conn_handle,config_btctler_le_acl_packet_length ,2120);
5.开启2M包的支持,提升物理传输速率。配置feature 属性LE_2M_PHY ,(主机要支持蓝牙v5.0或以上版本)/*蓝牙版本features*/const uint64_t config_btctler_le_features = SET_ENCRYPTION_CFG|LE_2M_PHY ;/*主从机都可以发起2M包请求交换,一般是主机发起,可调用接口;做从机默认不需要调用该接口*//*是否调整生效,有对应的事件消息 HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 上来*//*具体代码调用流程控制可参考SDK版本V2.2.1,有添加调用示例*/int ble_comm_set_connection_data_phy(u16 conn_handle, u8 tx_phy, u8 rx_phy, u16 phy_options);ble_comm_set_connection_data_phy(conn_handle,CONN_SET_2M_PHY,CONN_SET_2M_PHY,CONN_SET_PHY_OPTIONS_NONE);
|
|