HCI 与蓝牙协议栈学习

HOST层:此部分就是蓝牙协议栈
1)HCI(HOST CONTROLLER INTERFACE):
主机控制层接口,主要负责透过transport把协议栈的数据发送给蓝牙芯片,并且接受来自蓝牙芯片的数据,数据主要分为
HCI COMMAND(HOST->CONTROLLER),
HCI EVENT(HOST<-CONTROLLER),
HCI ACL(HOST<->CONTROLLER),
HCI SCO(HOST<->CONTROLLER),
HCI ISO(HOST<->CONTROLLER),
2)L2CAP(Logical Link Control and Adaptation Protocol):
逻辑链路控制与适配协议,将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务,L2CAP还屏蔽了低层传输协议中的很多特性,使得高层协议应用开发人员可以不必了解基层协议而进行开发。 3)SDP(SERVICE DISCOVERY PROTOCOL):
服务发现协议,服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用服务的特征 4)RFCOMM(Serial Port Emulation):
串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP等协议都是直接走的RFCOMM 5)OBEX:对象交换协议,蓝牙电话本,蓝牙短信,文件传输等协议都是走的OBEX 6)HFP(Hands-Free):
蓝牙免提协议一共分为两个角色:AG跟HF,蓝牙耳机跟手机连接,手机的角色就是AG,蓝牙耳机的角色是HF 7)HSP:蓝牙耳机协议
8)SPP(SERIAL PORT PROFILE):蓝牙串口协议, 9)IAP:苹果的特有协议,分为IAP1/IAP2
10)PBAP(Phone Book Access):蓝牙电话本访问协议, 11)MAP(MESSAGE ACCESS PROFILE):蓝牙短信访问协议
MAP跟PBAP很像,都是在V1.2的时候架构有变化,V1.1 MAP直接走的RFCOMM,在V1.2的时候如果GOEP是V2.0版本,那么MAP是直接走的L2CAP,并且是L2CAP ERTM mode,不是basic mode 12)OPP(OBJECT PUSH PROFILE):对象推送协议, 13)AVCTP(AUDIO/VIDEO CONTROL TRANSPORT PROTOCOL):音视频控制传输协议,是AVRCP的地方, 14)AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL):音视频分布传输协议,是A2DP的底层15)HID(HUMAN INTERFACE DEVICE):人机接口协议 16)A2DP(Advanced Audio Distribution): 蓝牙音乐协议,手机传输音乐给蓝牙耳机,手机是A2DP source端,蓝牙耳机是A2DP sink端 17)AVRCP(AUDIO/VIDEO REMOTE CONTROL PROFILE):蓝牙音乐控制协议,手机跟蓝牙耳机举例,那么蓝牙耳机就是controller(CT),手机就是target(TG) 18)ATT:蓝牙属性协议
ATT,Attribute Protocol,用于发现、读、写对端设备的协议(针对BLE设备),ATT允许设备作为服务端提供拥有关联值的属性集 ,让作为客户端的设备来发现、读、写这些属性;同时服务端能主动通知客户端。
在ATT中属性分为3个内容:
属性类型(attribute type),用UUID的形式来表现 属性句柄(attribute handle),用于标识一个属性 属性权限(permissions), 控制是否该Attribute可读、可写、属性值是否通过加密链路发送! ATT分为两个角色:Server/Client
19)GATT:蓝牙通用属性协议
GATT(Generic Attribute Profile),描述了一种使用ATT的服务框架 ,该框架定义了服务(Server)和服务属性(characteristic)的过程(Procedure)及格式 。 Procedure定义了characteristic的发现、读、写、通知(Notifing)、指示(Indicating)及配置characteristic的广播。
GATT可以被Application或其他Profile使用,其协议栈如下图 20)SM: 蓝牙BLE安全管理协议

二. 蓝牙Host(蓝牙协议栈)跟蓝牙Controller(蓝牙芯片)交互格式
蓝牙协议栈跟蓝牙芯片都是使用统一的数据来交互的,由SIG规定(备注:部分芯片有HCI vendor命令),一般交互的有以下几种类型
1) HCI command,由蓝牙协议栈给蓝牙芯片发送命令,来控制芯片行为
2)HCI event,由蓝牙芯片上报事件给蓝牙协议栈的事件
3)HCI acl数据,蓝牙协议栈跟蓝牙芯片双向交互的L2CAP以及上层数据
4)HCI sco,蓝牙协议栈跟蓝牙芯片交互的SCO音频是数据
5)HCI iso,蓝牙协议栈跟蓝牙芯片交互的BLE audio的数据
Wireshark日志过滤查看
| 着色名称 | Wireshark 过滤表达式 | 协议含义 & 调试用途 |
|---|---|---|
| AVRCP | btavrcp | AVRCP 音视频遥控协议(切歌、暂停、音量控制指令),底层基于 AVCTP |
| AVCTP | btavctp | AVCTP 传输层,承载 AVRCP 控制信令 |
| VDP | btvdp | 视频分发协议(较少使用) |
| A2DP | bta2dp | A2DP 高级音频分发 Profile,上层音频业务入口 |
| AVDTP | btavdtp | AVDTP 音视频传输协议,A2DP 底层,区分信令包 / 媒体 RTP 音频包 |
| HCRP | bthcrp | 硬拷贝线缆替代(蓝牙打印) |
| BNEP | btbnep | 蓝牙网络封装协议(PAN 蓝牙局域网) |
| HID | bthid | HID 人机设备协议(经典蓝牙键鼠) |
| OBEX | obex | 对象交换(文件传输、电话本 PBAP、短信 MAP) |
| SAP | btsap | SIM 卡访问协议 |
| HFP | bthfp | HFP 免提通话协议(车载 / 耳机通话) |
| HSP | bthsp | 老式耳机通话协议 |
| DUN | btdun | 拨号网络 |
| GNSS | btgnss | 蓝牙 GNSS 定位 |
| RFCOMM | btrfcomm | 串口仿真协议(SPP 透传、HFP 信令、OBEX 承载) |
| MCAP | btmcap | 医疗设备协议 |
| SDP | btsdp | 服务发现协议,蓝牙建链必查(查询 A2DP/AVRCP 信道 PSM) |
| ATT | btatt | BLE ATT 属性协议(GATT 底层,读写特征、Notify 通知) |
| AMP | btamp | 高速 AMP 射频协议 |
| SMP | btsmp | BLE 安全管理协议(BLE 配对、LTK/IRK 密钥协商) |
| L2CAP | btl2cap | L2CAP 逻辑链路适配层,所有上层蓝牙协议的底座 |
| SCO | bthci_sco | HCI SCO 数据包:通话语音数据(HFP 语音通道,和 A2DP 音乐 ACL 分离) |
| HCI_EVT | bthci_evt | HCI Event:蓝牙芯片 → Host 上报事件(广播、连接完成、加密完成) |
| HCI_CMD | bthci_cmd | HCI Command:Host → 蓝牙芯片下发指令(扫描、创建连接、开启广播) |
更多推荐

所有评论(0)