登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
轻量养虾,开箱即用!低 Token + 稳定算力,Gitee & 模力方舟联合出品的 PocketClaw 正式开售!点击了解详情~
代码拉取完成,页面将自动刷新
开源项目
>
工业软件
>
智能硬件
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
62
Star
229
Fork
122
珠海杰理科技
/
fw-AC63_BT_SDK
代码
Issues
104
Pull Requests
1
Wiki
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
NOTE:AC63N提升BLE传输速率方法
待办的
#I59IL3
JL-MinXian
成员
创建于
2022-05-27 10:05
# BLE传输带宽主要跟两个要素有关: 通信周期和每个通信点可传输的数据量。 ## 1.通信周期: 安卓手机一般可支持到10ms,苹果一般可支持到15ms ## 2.每个通信点可传输的数据量: 就是指每包的长度以及可以传多少包 ## 3.BLE理论带宽传输计算如下: 按15毫秒通信周期,每次基本通信能发4包(发包个数取决于主机) 若PDU长为27, 即payload长是 20 byte,那传输速度是 (1000/15 )* 20 * 4 约= 5K byte 速度。 若PDU长为251,即payload长是 244 byte,那传输速度是 (1000/15) * 244 * 4 约= 63K byte 速度。(要双方同时支持DLE和2M属性) # ----------------------------------------------------------- # 以 AC63_v2.1.0 版本的trans_data示例说明: ## 1.改大本地发送端ATT协议MTU的大小和应用层cbuf的大小。 ```C #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。(从机只请求,通信周期由主机决定) /*是否调整生效,有对应的事件消息 HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 上来*/ 参考:https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I4MEA5 ```C 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,能收发多少包最终由主机决定) ```C 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或以上版本) ```C /*蓝牙版本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); ``` 注意:如果从设备支持DLE特性,一般手机可用的ATT MTU大小也会跟着变大。 另外ATT_LOCAL_MTU_SIZE 和 config_btctler_le_acl_packet_length的配置关系,参考 https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I599P4 ## 5.开启2M包的支持,提升物理传输速率。配置feature 属性LE_2M_PHY ,(主机要支持蓝牙v5.0或以上版本) ```C /*蓝牙版本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); ```
# BLE传输带宽主要跟两个要素有关: 通信周期和每个通信点可传输的数据量。 ## 1.通信周期: 安卓手机一般可支持到10ms,苹果一般可支持到15ms ## 2.每个通信点可传输的数据量: 就是指每包的长度以及可以传多少包 ## 3.BLE理论带宽传输计算如下: 按15毫秒通信周期,每次基本通信能发4包(发包个数取决于主机) 若PDU长为27, 即payload长是 20 byte,那传输速度是 (1000/15 )* 20 * 4 约= 5K byte 速度。 若PDU长为251,即payload长是 244 byte,那传输速度是 (1000/15) * 244 * 4 约= 63K byte 速度。(要双方同时支持DLE和2M属性) # ----------------------------------------------------------- # 以 AC63_v2.1.0 版本的trans_data示例说明: ## 1.改大本地发送端ATT协议MTU的大小和应用层cbuf的大小。 ```C #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。(从机只请求,通信周期由主机决定) /*是否调整生效,有对应的事件消息 HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 上来*/ 参考:https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I4MEA5 ```C 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,能收发多少包最终由主机决定) ```C 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或以上版本) ```C /*蓝牙版本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); ``` 注意:如果从设备支持DLE特性,一般手机可用的ATT MTU大小也会跟着变大。 另外ATT_LOCAL_MTU_SIZE 和 config_btctler_le_acl_packet_length的配置关系,参考 https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I599P4 ## 5.开启2M包的支持,提升物理传输速率。配置feature 属性LE_2M_PHY ,(主机要支持蓝牙v5.0或以上版本) ```C /*蓝牙版本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); ```
评论 (
2
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
蓝牙BLE
feature
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(2)
C
1
https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK.git
git@gitee.com:Jieli-Tech/fw-AC63_BT_SDK.git
Jieli-Tech
fw-AC63_BT_SDK
fw-AC63_BT_SDK
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册