流控制用于在主机和主机控制器之间,避免传送到主机控制器的未应答远程设备的 ACL 数据溢出主机控制器数据缓冲区。主机(蓝牙协议栈)负责管理主机控制器(蓝牙芯片)的数据缓冲区。流控分为两种:
1)蓝牙协议栈到蓝牙芯片的流控
2)蓝牙芯片到蓝牙协议栈的流控
蓝牙协议栈跟蓝牙芯片都是使用统一的数据来交互的,由SIG规定(备注:部分芯片有HCI vendor命令),一般交互的有以下几种类型(注意:如果没有特别声明,所有的数据)
1) HCI command,由蓝牙协议栈给蓝牙芯片发送命令,来控制芯片行为,分几个OGF(Groups)在后面小节讲HCI command的时候会介绍。
2)HCI event,由蓝牙芯片上报事件给蓝牙协议栈的事件
3)HCI acl数据,蓝牙协议栈跟蓝牙芯片双向交互的L2CAP以及上层数据
4)HCI sco,蓝牙协议栈跟蓝牙芯片交互的SCO音频是数据
5)HCI iso,蓝牙协议栈跟蓝牙芯片交互的BLE audio的数据(Core 5.2才增加)