项目篇:ble透传方案总结

1、前言

很长一段时间都是通过CSDN刷博客学技术,现在想尝试自己动手总结一下自己的学习结果。下面是基于公司项目需求和参考浅谈BLE吞吐量 | Jayden's Blog写的关于“ble透传”的总结,其中重点还是提高ble吞吐量,有不足或不当之处,烦请指出修正。

2、项目需求

ble主从模块点对点通信,执行“透传”功能,需求包最大容量1KB,吞吐速率4KB/S。

要求1,ble进行点对点通信,执行透传功能。

要求2,包长1KB

要求3,速率4KB/S

3、需求分析

        要求1,很容易实现。一个模块作为slave进行广播,另一个模块作为master进行连接,分别通过write without responce而不用write,和notification而不用indication,小编的想法是空白(无payload)比回应包(有payload)有效数据少,1Mb/S情况下,一个bit占用1us嘛,有效数据越少,占用带宽时间越短。

        要求2,包最大容量1KB,也就是说主从设备每次发包都需要1KB,工作模式半双工。根据上述博客中说明,ble中Link Layer Packet限制最多20B数据,也就是说20B对应Att的Payload部分不能超过20(1premble+4accessaddress+2header+4l2cap+3Att_header+20Att_payload+3crc), ,Att的payload若超过20B,L2cap则作分包处理,连续包Payload的长度可27B,去除header,但最终还是受MTU限制(512B),并不能达到每次包长1KB的要求。

        策略如下:一方面Gatt对写操作支持写长包形式,如下图所示,每个包都对应一个回应,回应包相对于空包占用带宽时间更长;另一方面从代码实现角度来说,从设备通过notification发送数据并不支持长包,即最大支持512B。因此,小编主从设备采用统一方案,应用层主动分包——MTU设置为512,包长度超过512B作分包处理,不超过直接发送。

        要求3,速率达到4KB/S,那么就是尽可能的提升ble的发包速率。在没读上述博客之前,已实现透传方案,与博主给的建议几乎一致,哈哈!!!这边截取一张博客图来说明一下。

根据上图可得出提升ble速率的方法:

1、减小连接间隔,最小6*1.5ms,即7.5ms;

2、在每个connection event中发送更多的包,在代码中翻了一遍,没找到可以适配这一条件的,不过可以提高配置connection event持续时间来达到要求,存在MaxEventDuring,这个值和连接间隔等因素相关;

3、提升Llink Layer Packet负载的数据,上文已经描述清楚,头包20B,连续包27B,直接pass。

4、调整帧帧间隔T_IFS,这个貌似硬件实现的,小编没有试过。

其他方法:

1、应用层,配置ble任务优先级为最高,不被其他任务打断,且发包过程都是在tx中断中,尽量减少发包过程中做其他业务吧。

2、GATT层,能做的MTU尽可能大,已经512B了!!!主从都采用无回应方案发包。

3、LL层,对于上述分析。

4、重传率,即SN和NESN正常更新情况下会很低,若一直SN_ERROE和NESN_ERROE……就去查一下芯片的收发性能吧,30%?20%?10%。

5、小编的方案是每次从queue即一个循坏buff读取数据,当没有数据来的时候在进行发送,因此很受影响……(AT框架限定死了,具体查阅代码)

当然还有一些其他因素,比如cpu处理速率,hci接口等。

注:当时查阅平头哥ble透传方案好像时9KB/S,源码链接参考1,项目要求4KB/S。

4、BLE的AT透传方案设计:

        实现框图如下,MCU1通过uart给MCU2发送AT指令,若ble模块工作于order模式,则将order保存于order_queue,若ble模块工作于data模式,即透传模式,则将data保存于data_queue。

        两种模式之间通过状态机切换,oder模式下,比如AT+STARTADV,即先保存order_queue,之后立即执行开启广播操作;data模式下,先存数据入data_queue(循坏buff),当有数据刷新时,reset定时器,当无数据刷新时(2tick没收到数据即认为无数据来)通过定时器到期触发TX流程。

        小编的这套方案受Uart模式限制,当前模式下,每从uart收到1B数据即触发中断影响业务,若边收边发的话遇到不小的麻烦,调试了一段时间果断放弃了。后续也将uart改进,uart申请FIFO,当FIFO数据满或者指定一段时间从FIFO中读取数据,然后通过ble发送,这样会大大提高ble发送速率。

 5、总结

 平头哥AT方案源码

ble小能手 / PTG_Source · GitCode

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值