目录
1. BLE概述
如图1.1所示,低功耗蓝牙体系结构可分为3部分,分别为控制器、主机和应用程序。控制器用来发送和接收携带信息的数据包,主机为BLE协议栈,管理设备间如何通信,获取各种服务数据等,应用程序则使用主机提供的协议栈来实现用户需求,比如添加电池服务获取电池电量,添加自定义服务实现私有数据通信。控制器与外界通过天线相连,与主机通过UART或USB传输数据。
1.1 控制器
控制器是发送和接收无线电信号的物理设备,并将这些信号对应的数据传递给主机进行处理,负责广播、扫描、建立和维护连接。
1.2 主机
主机是 管理设备间如何通信,如何同时管理多种不同服务的协议栈,包含3个协议:L2CAP、安全管理器和属性协议。其中L2CAP是一个双向数据通道,通向对端设备上的某一特定协议或规范;安全管理器处理用于所有认证和安全连接等事务,定义了配对和密钥分发协议,配对是一个获取对方设备信任的过程,采用认证的方式实现;属性协议用于公开设备上的状态数据,是规则,规定了6种类型的信息来供双方设备传递属性信息,这6种规则让client和server可以互相发起通信,发送需要对方回复或者无需回复的消息。设备间传递的业务数据都是通过属性信息实现的,这些属性信息排列为一个服务供对端设备获取,如图1.2描述。
手机与BLE设备的通信过程举例:
① 设备处于广播模式且为一般可发现模式,角色是广播者或外围设备,手机对应处于观察规程来主动扫描周围设备,角色是扫描者和中心设备。
② BLE设备通过LL层发出广播包,手机根据数据包中的访问地址识别出广播包(对于广播包,访问地址是固定的0x8E89BED6),随后请求建立连接,连接成功后,双方便可以互传数据包。
③ 手机想去读取某个属性(如自定义服务的私有数据:设备的三轴加速度值),首先需要利用ATT层来发出请求,请求的数据要经过L2CAP、LL、PHY到达对端设备的L2CAP,设备的L2CAP通过Channel ID知道自己要将手机侧ATT发出的请求传到上层ATT,假如设备要更新连接参数,便可通过L2CAP将数据传给手机的L2CAP层,手机响应连接参数更新请求并起作用。
2. BLE协议各层作用及数据格式介绍
2.1 物理层
保证数据正常传输,关键词为跳频。
2.2 链路层
BLE协议手册(vol 6, Part B)定义了两个设备如何通过无线电传输信息,包含了报文、广播、数据信道的详细定义,规定了发现其他设备的流程、广播的数据、连接的建立、连接的管理及连接中的数据传输。链路层的状态及如下图所示,设备上电后,链路层进入并保持就绪态,做从设备时随后可由就绪态进入广播态,做主设备时可进入扫描态,注意发起态中,链路层会向对方设备发送连接请求并进入连接态,并假设广播者也进入了连接态,如果收到了对方的响应则真正的建立了连接。为何要假设对方也进入了连接态,因为要进入数据通道来发送数据,假如能收到对端的回复,则证明真正成功建立了连接,比如在用蓝牙调试宝调试的过程中,会出现连接成功,随后又显示连接超时的提示,这里的连接成功其实就是假象,广播者其实并没有进入连接状态。
如图2.2所示,每一个广播事件会包含3个广播包,在37、38、39这3个广播信道中同时广播信息(LL层经过解析传递的数据包格式就会区分出是广播包还是数据包)设备会不断发送广播信号给主机,若主机不开启扫描窗口则收不到设备的广播包,只有主机的射频接收窗口跟广播发送的发射窗口匹配成功,主机才能收到设备的广播信号。由于这种匹配成功是一个概率事件,因此主机扫到设备也是一个概率事件,也就是说,主机有时会很快扫到设备,比如只需要一个广播事件,主机有时又会很慢才能扫到设备,比如需要10个广播事件甚至更多。发现设备的效率和从设备的广播间隔与主设备的扫描间隔也有关系。广播间隔为20ms~10.24s之间,为0.625ms的整数倍。
当一个广播事件完成后150us(T_IFS),从设备必须要开启一段射频接收窗口,接收主设备的信号,此时主设备便可以发送连接请求。连接请求中可以告诉从设备,将在Transmit Window期间发送第一个同步包P1,提醒从设备在此期间一定要打开射频接收窗口,从设备在T_IFS时间后将P2回复给主机,主机一旦接收此回复,双方便成功建立连接了。随后主机会以连接间隔周期性地发送数据包给从设备。