ble HCI 流控机制

HCI 有两种流控机制

  • packet-based - 基于数据包的个数来控制收发
  • data-block-based - 基于数据长度来控制收发

BR/EDR 默认使用 packet-based,可用 HCI_Write_Flow_Control_Mode command 设置,而 BLE 只支持 packet-based
在这里插入图片描述

一、Host to Controller data flow control

初始时,Host 通过 HCI_LE_Read_Buffer_Size 命令获取 Controller 中每个 ACL buffer 的大小,以及 ACL buffer 的个数,该个数即允许 Host 向 Controller 连续发送 ACL 包的个数
在这里插入图片描述当 Host 向 Controller 发送一个 ACL 包后,允许发包个数减 1,当允许发包个数为 0 时,则不能再向 Controller 发送
当 Controller 处理完一个 ACL 包后,如已将数据发给对端设备,Controller 释放 ACL buffer 空间,并向 Host 发送 HCI_Number_Of_Completed_Packets event,此时允许发包个数加 1,Host 又可以继续向 Controller 发送了
如果 Controller 同时处理完多个 ACL 包,Controller 释放多个 ACL buffer 空间,HCI_Number_Of_Completed_Packets event 中会有多个连接释放的 ACL buffer 个数,此时允许发包个数增值为所有连接释放的 ACL buffer 个数总和
在这里插入图片描述

二、Controller to Host data flow control

Controller 向 Host 方向的流控默认是关闭的,可以通过 HCI_Set_Controller_To_Host_Flow_Control cmd 打开或关闭
在这里插入图片描述
机制与 Host to Controller 相似,初始时,Host 通过 HCI_Host_Buffer_Size cmd 告知 Controller 自己每个 ACL buffer 的大小,以及 ACL buffer 的个数,该个数即允许 Controller 向 Host 连续发送 ACL 包的个数

在这里插入图片描述
当 Controller 向 Host 发送一个 ACL 包后,允许发包个数减 1,当允许发包个数为 0 时,则不能再向 Host 发送
当 Host 处理完一个 ACL 包后,如已将数据发给上层协议处理,Host 释放 ACL buffer 空间,并向 Controller 发送 HCI_Host_Number_Of_Completed_Packets command,此时允许发包个数加 1,Controller 又可以继续向 Host 发送了
如果 Host 同时处理完多个 ACL 包,Host 释放多个 ACL buffer 空间,HCI_Host_Number_Of_Completed_Packets command 中会有多个连接释放的 ACL buffer 个数,此时允许发包个数增值为所有连接释放的 ACL buffer 个数总和
HCI_Host_Number_Of_Completed_Packets cmd 是一个特殊的 cmd,它不受流控控制,Host 可以在任何时刻向 Controller 发送,且也没有相应的 event 生成
在这里插入图片描述

三、command flow control

当 Host 向 Controller 发送 command 后,Controller 会向 Host 返回 HCI_Command_Complete event 或 HCI_Command_Status event,这两个 event 中都有参数 num_of_allowed_command_packet, 这个参数即是 Host 可以向 Controller 连续发送 command 的个数
在初始时或者后续任何时刻,Controller 都可以向 Host 发送 Command Opcode=0x0000 的 HCI_Command_Status event 或 HCI_Command_Status event,用以告知 Host 此时允许连续发送 command 的个数
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值