蓝牙技术自1998年问世以来,已经成为现代通信技术中不可或缺的一部分。它允许不同设备之间通过无线信号进行通信,极大地方便了我们的日常生活。在蓝牙技术中,设备发现(Inquiry)是一个重要的概念,它涉及到设备如何相互识别和建立连接。本文将对蓝牙设备发现过程进行解析,帮助读者更好地理解这一技术。
1
什么是设备发现?
我们在日常使用手机去连接其它如蓝牙耳机等蓝牙设备前,一般需要先在手机上搜索到需要的设备,这一步就是设备发现,也叫查询(inquiry)。而相应的蓝牙设备也需要进入被查询模式,也就是查询扫描(inquiry scan),只有这样才会被手机等设备搜索到。
图1. windows的蓝牙设备发现界面
2
设备发现工作原理
在设备发现过程中,查询设备会每隔312.5us选择一个新的频点来发送查询,也就是说在一个tx slot(625us)中,查询设备会以不同的频点发送两次查询,而被查询设备会每隔1.28秒选择一个新的监听频点,所以只要查询一段时间就总会有两者频点相同的时候,查询和被查询设备使用通用查询接入码(GIAC,General Inquiry Acess Code)LAP(Low Address Part),作为查询地址,GIAP LAP为0x9E8B33。蓝牙标准规定不允许任何蓝牙设备使用与GIAP LAP一样的地址。产生的32个查询跳频序列(Inquiring hopping sequence) 均匀分布在79个频率信道上。
查询设备会通过发送ID包来进行查询,ID包由查询访问码(IAC)组成,固定68bits长,在上文也提到查询和被查询设备使用通用查询接入码(GIAC),因此可以和配对时发出的ID包区分开。在标准模式下,当被查询设备接收到一个ID包后,会在一个slot(625us)后回复一个FHS包,这个包包含了设备类型、设备地址和发送者的时钟,如果查询模式为返回带RSSI格式或者额外查询结果模式,那么被查询设备就会在FHS包之后2 slot(1250us)发送一个Extended_inquiry_response_packet包,其中会包含设备名字、RSSI等信息。
图2. 收到第一个或第二个ID包进行响应的时序
我们以一块泰凌B91开发板为例来直观地看一下设备发现的过程。
图3. B91开发板
我们先给开发板烧录提前编译好的测试固件,然后用手机去搜索附近的蓝牙设备,并用蓝牙抓包器抓取空中包,通过抓包器我们可以清楚地看到,在开发板收到ID包625us后发出了FHS包,之后跟着又发出了一个EIR包,与图2协议规定的时序完全一致。
图5. 抓包器抓取到的inquiry过程
通过解析包内容可以发现,FHS包中包含了设备类型,时钟等信息,而EIR包则包含了设备名称。
图6. FHS包内容
图7. EIR包内容
3
HCI指令
在蓝牙中host通过HCI指令来控制controller的行为,在设备发现流程中也需要用到多条HCI指令。
3.1
HCI_inquiry
查询设备可以使用这条指令来启动inquiry,这个指令需要填入三个参数,分别是LAP:一般为0x9e8b33(GIAC),inquiry_length:搜索多长时间,num_response:可以搜索多少个设备,范围0~255,如果是0,就是没有限制,搜索多少个就上报给host多少个。
3.2
HCI_Inquiry_Cancel
host可以发送这条指令来提前停止搜索。
3.3
HCI_Write_Inquiry_Mode
host使用这条指令来设置inquiry的模式,这将会决定搜索到的设备是否返回RSSI、设备名等信息。
3.4
HCI_Write_Scan_Enable
被搜索设备使用这条指令来开启或关闭scan状态,这条指令不仅可以开启inquiry scan还可以开启page scan,开启page scan后设备将允许被连接。
3.5
HCI_Write_Inquiry_Scan_Activity
这条指令用来设置inquiry scan的窗口时间和窗口间隔,controller会自动隔一段时间打开一次窗口,只有在打开窗口期间才能收到对方发来的inquiry ID包,因此窗口时间越长,窗口间隔越短越容易被其它设备搜索到,需要注意的是,窗口时间必须要小于等于窗口间隔。
3.6
HCI_Write_Extended_Inquiry_Response
被查询设备的host下发这个指令后,查询设备就可以在搜索到后拿到设备名字等信息,否则后续就只能通过HCI_Remote_Name_Request指令来获取slave的名字。
设备发现是蓝牙连接过程中的重要一步,它允许我们查找周围可被连接的设备,并且可以灵活地配置查询的参数,从而使我们下一步方便地在不同设备之间建立连接。泰凌基于TLSR951x和TLSR952x系列SoC芯片自研的蓝牙协议栈,得益于芯片本身具备的超低功耗工作模式,实现了带低功耗的Inquiry和Inquiry Scan模式,可以将设备发现过程芯片整机功耗降低到3mA以下,能够满足对功耗极度敏感的应用场景。
全部0条评论
快来发表一下你的评论吧 !