日期:2024-01-31 16:57:05 编辑: 浏览:
BLE(Bluetooh Low Energy)蓝牙低功耗技术是短距离、低成本、可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗。
BLE技术的工作模式非常适合用于从微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常少(通常几个字节),而且发送次数也很少(例如每秒几次到每分钟一次,甚至更少)。
那么有人要问了,BLE蓝牙模块是怎么建立通信连接的呢?下面是BLE蓝牙模块建立连接的过程详解。
1.BLE蓝牙模块广播与扫描
设备B不断发送广播信号给手机(Observer),如果手机不开启扫描窗口,手机是接收不到设备B的广播的,如下图所示。不仅手机要开启射频接收窗口,且手机的射频接收窗口要跟广播发送的发射窗口能匹配成功,还要广播射频通道与手机扫描射频通道是同一个通道,手机才能收到设备B的广播信号。通俗来讲,如果设备B在37通道发送广播包,而手机在扫描38通道,那么尽管他们俩的射频窗口很匹配,两者也是无法进行通信的。由于这种匹配成功是一个概率事件,因此手机能扫到设备B也是一个概率事件,举个例子,手机有时会很快扫到设备B,只需要一个广播事件就够了,但手机有时又会很久才能扫到设备B,可能需要10个广播事件甚至更多。
(图一)
2.BLE蓝牙模块建立连接(connection establishment)
根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求CONN_REQ(CONN_REQ又称为CONNECT_IND)。
(图二)
(图三)
注:图中M代表手机,S代表设备B,M→S表示手机将数据包发给设备B,即手机开启Tx窗口,设备B开启Rx窗口;S→M正好相反,表示设备B将数据包发给手机,即设备B开启Tx窗口,手机开启Rx窗口。
如上图所示,手机在收到A1广播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS时间后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:
Transmit window offset,定义如上图示
Transmit window size,定义如上图所示
connect_req数据包完整定义如下所示
connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包(P1)给你,请在这段时间里把你的射频接收窗口打开。设备B收到P1后,T_IFS时间后将给手机回复数据包P2(ACK包)。
一旦手机收到数据包P2,连接即可认为建立成功。当然,实际情况会比较复杂,手机有可能收不到P2,这个时候手机将持续发送同步包直到超时时间(supervision timeout)到,在此期间只要设备B回过一次ACK包,连接即算成功。所以一旦P1包发出,主机(手机)即认为连接成功,而不管有没有收到设备的ACK包。
这也是为什么在Android或者iOS系统中,应用经常收到连接成功的回调事件(该回调事件就是基于P1包有没有发出,只要P1包发出,手机即认为连接成功,而不管有没有收到设备的ACK包),但实际上手机和设备并没有成功建立连接。
后续手机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送数据包(Packet),Packet除了充当数据传送功能,它还有如下两个非常重要的功能:
同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。
告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。
BLE蓝牙模块通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能在规定的时间把自己的数据回传给Master。
3.蓝牙模块连接失败
有如下几种典型的连接失败情况:
如步骤2图所示,如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。
如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去或者没有在超时时间内把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去
如果master把P1发出来了,slave也把P2回过去了,此时主机或者从机还是报连接失败,这种情况有可能是软件有问题,需要仔细排查master或者slave的软件。
还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。
MesoonRF美迅物联网是工业物联网无线通信模块生产厂商,提供WiFi模块,低功耗(BLE)蓝牙模块,Mesh组网模块,UWB模块,NFC模块等产品,并通过了BQB,FCC,CE,ROHS,REACH等认证。产品包括蓝牙串口透传模块,蓝牙双模,低功耗蓝牙4.2/5.0/5.1/5.2/5.3,hc05/06,BM77/78,蓝牙mesh组网等工业级、车规级物联网方案。