个人主页:董哥聊技术
我是董哥,嵌入式领域新星创作者
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
文章目录
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:标志着链路的终止
下面为抓包数据:
发表评论