个人主页:董哥聊技术

我是董哥,嵌入式领域新星创作者

创作理念:专注分享高质量嵌入式文章,让大家读有所得!

文章目录

9.1 初始化蓝牙控制器9.2 设置蓝牙控制器为广播状态9.3 设置蓝牙控制器为扫描态9.4 发起连接请求9.5 数据交互9.6 断开连接

上文已经了解了

HCI接口,至此,已经可以去学习抓包,并且分析蓝牙通信流程了。该部分主要介绍一些

Host与

Controller之间的

HCI通信流程图,重点关注消息序列表。

下文仅仅提供 一部分,不能代替所有的方案。

Core5.0 P2709

 

9.1 初始化蓝牙控制器

两个设备均需要初始化蓝牙Controller

该流程主要有几个HCI命令:

Reset:重置控制器和链路管理器Read Local Supported:读取一些特性,检查是否支持低功耗Set Event Mask:使能控制器返回给主机的EventRead Buffer Size:检查是否有可用的缓存空间Read BDADDR:都设备地址

命令流程可以参考我的抓包数据:

 

9.2 设置蓝牙控制器为广播状态

初始化蓝牙控制器后,发起广播的流程

主要涉及以下几个HCI包:

LE Set Advertising Parameters:设置广播相关参数,包括:广播间隔,广播类型,广播通道等LE Set Advertising Data:设定广播数据包LE Set Scan Response Data:设定扫描响应数据,一般蓝牙的名称在这里设置。LE Set Advertising Enable:开启/关闭广播

 

下面为抓包数据:

 

9.3 设置蓝牙控制器为扫描态

一般为手机端设置,设置为扫描状态,扫描设备端发出的广播:

主要涉及以下几个HCI包:

LE Set Scan Parameters:设置扫描参数LE Set Scan Enable:设定扫描使能SCAN_REQ:SCAN_RSP:LE Set Advertising Report:获取广播报告

 

9.4 发起连接请求

Device B设置为广播,Device A发起连接

主要涉及以下几个HCI包:

LE Create Connection:建立连接LE Connection Complete:标志着连接链路建立完成

下面为抓包数据:

 

9.5 数据交互

一旦两个设备建立连接,就可以发送数据了。

9.6 断开连接

一旦两个设备不需要去保持连接,两个设备都可以主动关闭连接链路。

Device A主动关闭:

Device B主动关闭:

主要涉及以下几个HCI包:

HCI_Disconnect:终止一个存在的链接Disconnection Complete:标志着链路的终止

下面为抓包数据:

 

查看原文