经典蓝牙(BR/EDR)设备连接过程分析
一、Inquiry过程
Host发送HCI Inquiry命令,等控制器收到远程设备的Inquiry Response之后,发送HCI Event给Host。Host对Event数据进行分析,待Host 收到Inquiry Complete响应后,整个Inquiry过程结束。
Host收到应答后可以发送HCI inquiry cancel取消Inquiry或等待Inquiry时间到达自动结束。
Inquiry过程,截图来自Core_V5.0.pdf
二、连接过程
在蓝牙核心文档中,连接过程如下:
上图表示Connection establishment 和 detachment 过程,总共需9个不同的过程。有些过程不是必须的比如授权和加密过程。有些过程是必须的,比如ConnectionRequest 和Setup Complet过程。
接下来将具体介绍每个流程:
1、create connection(必选)
Host发送HCI_Create_Connection命令给Controller,然后Controller通过指定的蓝牙地址去page设备。
2、FeaturesExchange(可选)
LM将会去进行exchange feature,获取对方的特性信息,Controller之间的交互。
3、ConnectionRequest(必选)
主Controller LM发送LMP_host_connection_req请求,远程设备LM确认请求,远程设备可能接受也可能拒绝请求。
4、根据设备情形分类
a.远程Host拒绝连接,连接将会被终止
b、远程设备接受连接
c、远程设备接收连接,并请求为Master
5、交换特性
和远程设备交换特性,当AFH(Adaptive FrequencyHopping 自适应跳频)被确认可用后。主设备将会发送LMP_set_AFH 和LMP_channel_classification_req请求。
6、授权
若需要授权,控制器将会为这个连接向host请求Link Key。在HCI中能看到Link key request的事件。
7、Link key
a、如果链接需要授权且没有公用的link key
接下来将会是pairing过程。LM会向host请求link key,如果host给的是Negative 回复,LM将会向host请求PIN。Host端请求结束后,随后远程端也会产生PIN请求。链接的授权都是基于请求到的PIN。最后两端都会将link Key通知到各自的host保存,为以后的链接使用。所以配对过程实际上是获取Link Key的过程!
在HCI中能看到Link key获取结束时,Link key Notification事件。紧跟着的就是授权完成的事件:Authentication Complete。
Note:在配对音箱时HCI中也是negative的回复,但是没有pincode的请求?在另一篇博客中将会单独介绍,加深印象。 如下HCI:
b、两端有共用的link key
如果两端有共用的link key存在,那么不需要配对过程!LM向host请求link key时,如果得到的是positive回复,将会直接使用回复的link key进行授权。
8、加密
一旦完成配对和授权,就会开始加密。下图显示的是设置一个加密的点对点连接。
9、连接建立完成
两端的LM都会向各自的host发送LMP_setup_complete事件。通过LMP_setup_complete事件将底层的连接handle发送给上层,到此为止建立的链接才可以用来发送上层的数据。
在我的测试平台中发现没有此项消息,handle是通过Authentication Complete Event上传上来的。
至此蓝牙设备已经在物理通道上建立了链接,但上层应用若需要在设备之间通信,那么还需要在L2CAP层次建立连接,L2CAP 的CID(通道ID)好比是计算机的端口号,在访问网络时每个应用程序会对应不同的端口号。在L2CAP层中也类似,对应过来的是每个协议/profile实列对应L2CAP层的一个CID。
三、L2CAP层的连接
下图为从其它博客上截图,具体找不到了,挺火的一篇:
HCI log如下,主要就这几条交互:
接下来就是SDP服务发现协议了。
前面文件描述蓝牙设备在物理通道上建立了链接,但上层应用若需要在设备之间通信,那么还需要在L2CAP层次建立连接,L2CAP 的CID(通道ID)好比是计算机的端口号,在访问网络时每个应用程序会对应不同的端口号。在L2CAP层中也类似…
如下词汇表是蓝牙技术中最常用到的词汇,以便你快速查找。该词汇表的部分词汇源自网站Motorola Bluetooth website。而此处的词汇表则包含了更多的低层信息,精简掉了不必要的、次要的词汇,并对许多关键词汇作了精确的表述。实际上,这已
请参考原文
前言
从蓝牙设备状态转换可以知道,蓝牙设备连接需经过Inquiry,page过程,本文主要从HCI角度分析连接过程。解析抓包文件用到的工具为Frontline 的Capture File Viewer。
HCI简介
HCI(Host Contro…
物理射频层的典型的操作是,一组设备工作在相同的时钟(clock)和跳频模式(frequency hopping pattern)。
其中,提供同步参照物的设备叫主设备(Master)。
其他设备去同步master的时钟和跳频模式,这些设备叫从设备(Slave)。 …
我们可以将sco比喻为tcp/ip的udp传输模式,他的数据传输具有实时性
sco可在不被选中的情况下发送sco数据包
当数据发生错误时,不提供错误重传机制
异步链路(ACL): 主要用于传输对实时性要求不是很高的场景,比如听歌,所以a2dp就是使用的是acl的传输方
可以将acl比喻为tcp/ip的tcp传输,主要运用于对数据的实时性要求不是很高
在合并BR/EDR和LE系统的实现中,体系结构模块可以在系统之间共享,或者每个系统都有自己的模块实例化。
1、设备管理器(device manager)
设备管理器是基带中控制蓝牙设备的一般行为的功能块。负责蓝牙系统中与数据传输没有直接关系的所…
Android中的蓝牙
说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数…
root@android:/data/misc/bluetoothd/7C:8E:E4:99:8F:6F # cat linkkeys
cat linkkeys
94:CE:2C:44:4A:7C FF047
作用:让蓝牙芯片进入发现周围蓝牙设备的模式,它的返回值是周围蓝牙设备的信号。
对应的HCI命令:HCI_inquiry
输入的参数有如下三个:一个是LAP(蓝牙地址分为三部分:
LAP(24位地址低端部分)、UAP(8位地址高端部分)和NAP(16位无意义地址部分)。
其中,NAP和UAP是生产厂商的唯一标识码,必须由蓝牙权威部门分配给不同的厂商。
而LA…
ACL建立连接的流程:
一共9个步骤。
Step1:建立连接过程
1 Create Connection Command
底层收到这条指令之后就携带BD_ADDR去做Page。
Step2:交换特征,这一步可选。
Step 3:主机的Link Manager向从机发送连接请求,从机响应连接请求
…
为什么不配对便无法建立连接?
任何无线通信技术都存在被监听和破解的可能,蓝牙SIG为了保证蓝牙通信的安全性,采用认证的方式进行数据交互。同时
content :10A78A4B1F6A0F490D84205DC865F6F74