[BLE--Link Layer]Link Layer状态及其之间的切换

简述

BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分在实现的。Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的。Link层使用了状态机,即通过不同的事件的发生来切换BLE的不同状态,这样使整个蓝牙通信的实现显得更加清晰。

Link层状态

一共有5个状态,Standby, Advertising, Scanning, Initiating, Connection。先看如下一张图,对各个状态一个初步了解:
[BLE--Link Layer]Link Layer状态及其之间的切换_第1张图片
该状态机只能有一个状态在激活状态,当然这只是对于单链路的情况。多链路的情况,可能一个设备的link1是处于Connection状态,而同时它在link2处于Advertising的状态。因此这里的状态机只是对一条链路的示意。
对Advertising状态而言,Advertiser会通过Advertising data以广播的方式将数据发送出去,Advertising data中可以放服务UUID相关数据,也可以是Apperance或者是其他(这部分的详细描述是在蓝牙协议的补充协议当中给出的),这样的好处是,即使在没有建立连接时,其余的侦听设备也可以从Advertising数据中获取一定的信息。而且Advertising的方式也有多种,像undirected, directed, high duty等,这些都是根据不同的应用场景而做的。
这里在建立连接前,可以看到,一般设备是处于Advertising, Initiation和Scanning中一种。其使用场景是,Advertising向外广播一些必要的信息,它可能期望有人能连接它,或者它只是想通过广播发一些数据而已。而Scanner则会侦听来自不同Advertiser的广播,如果发现有兴趣的可以发一个Scan Request过去,这样就可以从Advertiser那里得到Scan Response数据,可能要比Advertising的数据要略不同点。这时要是觉得有连接的必要了,那Scanner可以先切换到Standby, 然后切换为Initiator,结合刚才拿到的一些数据像有意向的Advertiser发起Connection Request,这就促成了连接建立过程的第一步咯。连接建立后,两者自然都处于Connection的状态啦。

Connection State

处于连接状态的设备,可以是master,或者是slave。master和slave是相对于link来说的,master一般在许多协商过程有决定作用。slave是由前面的Advertisor切换来的。master和slave的概念,应当在多链路的使用时,像scatternet,mesh中比较重要。其实蓝牙中不同的协议层可能都有自己的独特的Role,这里master和slave和GATT的server, client应当是没有什么关系的,不过跟GAP的角色还是有关系。像GAP里面的peripheral和broadcaster,都主要是用Advertiser的功能,peripheral还能建立连接,因此连接后就是作为slave咯。central和observer呢,主要是用scanner功能了,而central由于也可以建立连接,因此initiator自然不可少,而且连接建立后也就变成master了。

你可能感兴趣的:(Net-Bluetooth)