一、低功耗蓝牙
1、简介
低功耗蓝牙是当前功耗最低的无线技术,有别于传统的标准蓝牙。
1.0版蓝牙最大 的物理层数据速率为1Mbps,2.0版本为3Mbps,3.0引入了交替射频技术速率高达百兆。低功耗蓝牙并非只是增加速率,尽可能的降低功耗。
低功耗设备分为两类:单模设备、双模设备。双模设备支持经典蓝牙又支持低功耗蓝牙,单模设备只支持低功耗蓝牙。第三种类型,只支持经典蓝牙。单模设备只能与单模设备或者双模设备不能与经典蓝牙通信,单模设备不支持头戴式耳机、立体声音乐和较高的文件传输速率,无法再大部分领域使用。
跳频:两个节点之间通信,使用多个频率,某一时刻只使用一个频率,各频率按照确定的顺序依次使用。
自适应跳频:使用某个频率子集的技术,使设备可以避免其他非自适应技术使用的频率。
层:系统中一个具体功能部分。每一次都是根据上层或者下层抽象而来。
1.2、时间即能力
鲁棒的设备发现至少两个模块:一个模块寻找其他设备,一个模块处于可发现状态。低功耗蓝牙中,一个设备如果想被发现就必须每个几秒发送三次短消息;如果想与发现它的设备通信,在广播短消息之后立即进入监听。寻找其他设备时,设备打开它的接收器并帧听其他设备的广播。三次传输利用三个不同的频率,防止某一个频率被阻塞。
1.3 无连接模型
低功耗蓝牙大约3ms可快速的建立连接,这意味着发送完成后可断开连接节约能量,下次发送数据时重新建立连接。
低功耗蓝牙架构:客户端—服务器(客户端发送请求,服务器响应),面向服务。
二、蓝牙的体系结构
2.1、低功耗蓝牙结构分为三个部分:控制器、主机、应用程序。控制器通常是无力设备,能够发送和接收无线信号,并能将无线信号解码成数据包。主机通常是软件栈,管理多个设备间通信。应用程序则使用软件栈使控制器实现
协议栈包括两个部分:主机和控制器。任何的规范和应用都以协议栈的GAP(通用访问规范)、GATT(通用的属性规范)为基础。
物理层:1Mbps的GFSK,2.4G ISM频段。
数据链路层(LL):控制射频的状态,设备的5中状态:待机(就绪)、扫描、广播、发起、链接。没有连接的设备广播数据,扫描中的设备如果接收到广播数据如果想连接广播设备,那么给广播设备发送发连接请求,如果广播设备接收连接请求了,那这两个设备就会进入连接状态。广播设备是从机,扫描设备是主机。
HCI层为主机和控制器进行数据交互提供了标准的接口。这个层可以通过软件API或者硬件接口比如UART,SPI,USB实现。
L2CAP层:为上一层提供数据封装服务,允许合理的端对端的数据交互。
SM层:安全管理层定义校验和密匙分发的方法,为协议栈其他层的安全连接和交换数据提供方法。
GAP层:面向应用或者规范,解决设备发现,为设备连接相关设备。GAP层掌握安全特征的发起。
ATT协议:允许一个设备明文发送确定的数据片到另一个设备。也就是“属性”
控制器包含物理层和链路层还有和协议栈的接口HCI。协议栈包含三个协议:逻辑链路控制和适配协议(L2CAP)、属性协议(Attribute Protocol)、安全管理协议(Security Manager Protocol),还包括通用属性规范(GATT )、通用访问规范(GAP)、模式(mode).
物理层采用2.4G无线电,完成传送和接收数据。无线电波可以在给定的某一个频段给改变幅值、频率、相位来携带信息。低功耗蓝牙采用高斯频移键控GFSK。从中心频率发出超过185khz的正向偏移代表1,超过185k的负向偏移表示0。2.4G频段被划分为40个RF信道,每个宽度2M。
2.2、链路层
链路层负责广播、扫描、建立和维护链接,以及确保数据包按照正确的方式组织、校验和加密。与链路相关概念:信道、报文、过程。
链路层信道分为两种:广播信道、数据信道。未建立链接的设备使用广播信道发送设备,广播信道有三个,设备利用广播信道通知其他设备自己是可发现或可链接的。建立连接后,用数据通道通信,数据信道有37个,由自适应跳频引擎控制。
任意信道上的数据(广播信道和数据信道)均为小数据包,且格式相同。数据链路层数据格式:
介入地址在广播信道中是固定的,在数据信道中是随机的私有值。
2.3 协议栈和控制器接口HCI
HCI为协议栈提供了一个与控制器通信的标准接口。它允许协议栈和控制器相互发送数据和命令。HCI由逻辑接口和物理接口组成。逻辑接口定义了命令和事件相关的行为;物理接口包括USB、SDIO和两个uart的变种。
2.4、主机
主机包括复用层、协议和实现许多功能。
逻辑链路控制和适配协议(L2CAP)是一个复用层。复用层定义两个基本概念:L2CAP信道和LCAP信令。L2CAP信道是一个双向的数据通道。每个通道都是独立的,可以由自己的流量控制和配置信息。经典蓝牙使用了大部分功能包括动态信道标示符,协议服务多路复用器、增强的重传、流模式等,低功耗蓝牙使用了少部分功能。
低功耗蓝牙只使用固定信道:一个用于信令信道,一个用于安全管理,还有一个属性协议。低功耗蓝牙只用一种侦格式,B侦,包含两个字节长度字段和两个字节的信道识别符。
2.4安全管理协议
安全管理器定义了一个简单的配对协议和密匙分发协议。配对是一个获取对方设备信任的过程,采取认证方式实现。配对之后接着是链路加密和密匙分发过程。密匙分发通常是从设备发给主设备。两个设备在未来某个时候进行重连时,可以使用先前分发的共享密匙进行加密,迅速完成认证。安全管理器提供一个工具箱,生产数据哈希值、确认值以及配对过程使用的短期密匙。
2.5、属性协议
属性协议定义了对端设备的数据规则,数据存储在属性服务器的“属性”里,供属性客户端执行读写操作。客户端将请求发送至服务器,服务器回复响应消息。客户端可以使用这些请求在服务器上找到所有的属性并进行读写属性。属性协议的六种信息:客户端发到服务器的信息、服务器回复给客户端的请求信息、客户端到服务器的无需响应的命令、服务器到客户端的无需确认的通知、服务器到客户端的指示、客户端给服务器回复指示确认。
2.6、通用访问规范
通用访问规范定义了设备如何发现、连接以及为用户提供信息。它还定义了如果建立长久的连接。
2.7、应用层
应用层定义了三种类型:特性(characteristic)、服务(service)、规范(profile).
四、新的使用模型
新的模型都是基于广播模式,包括存在检测、数据广播、无连接模型等。
4.1、存在检测
“存在”是指当前发生的或某处出现的状态和事实。使用广播模型,设备在后台被动扫描那些正在广播的设备。广播设备仅仅通告地址,也有少量数据。
广播是数据链路层的模式。有了它,设备周期性的发送身份信息和少量数据。
扫描模式分为两类:主动扫描、被动扫描。主动扫描,扫描者从广播者请求更多的信息以获取额外的静态数据;被动扫描,扫描者仅仅帧听广播数据,并不发送请求。链路层收到广播数据包后交给主机(协议栈)。
数据广播:广播模式下发送少量数据。
4.2、无连接模型
无连接是低功耗蓝牙与经典蓝牙比较大的区别。无连接,设备无线为数据交换始终保持连接,每次在发送数据时重新建立连接。
无连接定义的是设备的状态而不是连接到 状态。经典蓝牙定义了简单的状态机和配置系统用于建立连接,明确定义了所有 的链接状态,并对状态进行了完整描述。
五、物理层
两个蓝牙设备通过无线电波收发信息。无线电从最简单的火花隙式发射机开始到幅度调制、频率调制、到相移键控以及其他调制方案。
火花隙式调制信道利用率低。
5.1、调制
低功耗蓝牙采用高斯频移键控,高斯滤波器通过增加一个值到另一个值的频率转换时间,过滤噪声。低功耗蓝牙物理层比特率为1Mbps。负频偏代表比特0,正频偏代表1,最小频偏约为180khz。如果中心频率选取2402M,比特0位2401.820Mhz,比特1 位2402.180Mhz。
5.2、射频信道
经典蓝牙用跳频来实现,经典蓝牙在79个窄带信道间切换进行信息传输。低功耗蓝牙使用40个信道,每个信道的中心频率为f=2402+2K Mhz。
2.4G ISM频段最大发射功率+10dbm即10mw,最小不低于-20dbm功率为10uw。
5.3 容限
中心频率可以偏离 的最大限制。比如无线电设计为2402MHz发射,实际的工作频率可能是2401.850Mhz或者2402.150Mhz,报文中心频率的容限是±150KHz。中心频率偏移的原因可能是外部晶振的偏差或者芯片发热。
报文发送过程中中心频率的偏移,发送过程中心频率的偏移不超过50KHz。如果发送报文时中心频率是2402MHz,发送过程中中心频率在2401.950Mhz—2402.050Mhz。
5.4、接收灵敏度
低功耗蓝牙灵敏度高于-70dbm即接收机收到0.000 000 1mW的电磁能量时要正常工作。
六、链路层
链路层 定义了两个设备如何利用无线电传输信息。包含了报文、广播、信道的详细信息、发现其他设备到流程、广播的数据、连接建立、连接管理以及连接中的数据传输。
6.1、链路层的状态机
链路层的5种状态:就绪态、广播态、扫描态、发起态、连接态。扫描有两个状态:被动扫描和主动扫描。连接太有两个子状态:主、从。
就绪态:上电后链路层进入就绪态,直到接到主机命令从就绪态进入广播、扫描或者发起态。
广播态可以发送广播报文也可以发送扫描响应用于回复主动扫描的设备。可被发现和可被连接的设备处于广播状态,广播数据也需要处于广播状态。广播态的设备停止广播后进入就绪态,收到发起者的链接请求后进入连接态。
扫描状态的设备能够接收广播信道的报文,帧听哪些设备正在广播。被动扫描仅接收广播报文,主动扫描则发送扫描请求给广播态设备,并获取扫描响应的设备。主动扫描中,链路层一旦发现新的广播设备,都会发送扫描请求。
发起态,为了发起连接链路层需要处于发起状态,发起态的发起者,其接收机用于帧听自己试图连接的设备。如果收到了该设备的广播报文,链路层向目标设备发送连接请求并进入连接态。如果发起者不再试图连接,可以进入就绪态。
连接态,从广播态和发起态都可以进入连接态。两种情况都是发起者向广播者发送连接请求报文。连接态的两个子状态:主和从。连接态中两个设备相互传送数据报文,唯一一个用到数据通道的状态,其他各状态均使用广播信道。主连接状态只能从发起态进入,它必须向端设备发起连接。主设备定期向从设备发送报文,从设备只能通过回复这些报文发送自己的数据。从连接只能从广播态进入。
设备不能成为主从设备。成为主设备后,不能发送可用于连接的广播报文,不过还可发送不可连接的广播报文或者是可发现的广播报文。从设备也不能发起连接,因为这会导致其成为主设备。一个设备也不能同时成为两个设备的从设备。经典蓝牙支持。
6.2、报文
报文是链路层的基石。报文很简单,带有标签的数据,一个设备发送,一个或多个设备接收。标签指明了数据由谁发出,要哪个设备接收。报文的基本结构:
低功耗蓝牙报文有两类:广播报文和数据报文。广播报文用于发现、连接其他设备,一旦建立连接后,开始使用数据报文(用于连接建立后的设备)。是广播报文还是数据报文由信道决定。低功耗蓝牙规定了3个广播信道和37个数据信道。数据信道中的是数据报文,广播信道中的是广播报文。
6.3、 白化
频移键控(FSK)接收机连续接收相同比特的能力很差,为避免这一情况,低功耗蓝牙使用了“白化器”来随机化数据。对于给定的报文,“0”、“1”的顺序是确定的。
前导:报文最开始的8个比特是01010101或者是10101010.
接入地址:接入地址的第一个比特决定了前导是01010101还是10101010,如果接入地址的第一个比特是0,则使用01010101如果是1则使用10101010,保证报文的前9个比特都是交替的。
32位的接入地址有两种类型:广播接入地址、数据接入地址。广播接入地址在广播数据或者是扫描、发起连接时使用。数据接入地址在两个设备建立连接后发送数据时使用。
当控制器试图接收一个报文是,它要事先知道接收报文的接入地址。对于广播信道,接入地址是固定值0x8E89BED6,这意味着广播报文的前导是01010101.对于数据信道,接入地址是一个随机值,但是要符合规则,符合规则的数据通道接入地址大概有231个。
报头的内容取决于是广播报文还是数据报文,广播报文有7种报头类型:
ADV_IND 通用广播指示
ADV_DIRECT_IND 定向连接指示
ADV_NONCONN_IND 不可连接指示
ADV_SCAN_IND可连接指示
SCAN_REQ主动扫描请求
SCAN_RSP主动扫描响应
CONNECT_REQ连接请求
信道:广播信道37/38/39,0-36是数据信道。低功耗蓝牙信道间隔2M,经典蓝牙信道间隔是1M。
6.4、跳频
跳频算法用于数据连接中,数据信道共有37个是一个质数,因此调频算法很简单f(n+1)=(f(n)+hop)mod37;
hop范围5~16.也可以先加hop如果大于36则减去37.
自适应调频能够将一个已知的坏的信道映射到一个好的信道。
6.5 设备发现
一个设备广播,另一个设备扫描。共有四种不同类型的广播:通用的、定向的、不可连接的及可发现的。每次广播都会同时在三个信道上发送相同报文。除了定向广播,其他广播事件都会选择20ms-10.28s的间隔。扫描用于接收广播事件。
通用广播能被扫描设备扫描到或者接收到连接请求时成为从设备,通用广播的设备可以在没有链接的情况下发出。也就是还没有主从之分。
定向广播:为了快速的建立连接,报文包含两个地址:广播者的地址和发起者的地址。发起设备收到发给自己的定向报文后,可以立即发送连接请求作为响应。
数据接入地址由主设备提供。
6.6、逻辑链路标示符
逻辑链路标示符来判断数据报文属于哪种类型:
链路层控制报文(11) — 用于管理连接
高层报文开始(10) — 也可用于一个完整报文
高层报文延续(01)
如果数据包为链路层控制报文,那么逻辑链路标示符为11,并被直接交给链路层控制实体。所有其他的数据包都要经过主机——要么来自主机,要么发给主机。主机可以发送大于27个字节的数据,但是无法放入单个链路层的数据包,因此必须支持分段;具体做法是给数据包贴上"高层报文开始"、"高层报文延续"LLID
七、逻辑链路控制和适配协议(logic link control and adaptation protocol )
L2CAP是个复用层,可以让低功耗蓝牙复用三条不同的通道,它也支持数据的分割和重组功能。经典蓝牙L2CAP层更复杂。
低功耗蓝牙的基本概念在于无连接模式,用户只有在需要发送数据时才建立链接。L2CAP只支持固定的信道,信道是指一个数据包序列连接两个设备上的一对服务,两个设备可以同时开启多个信道。
低功耗L2CAP层使用了三条信道:信道标识符0x0004用于属性协议,0x0005用于低功耗蓝牙信令信道,0x0006用于安全管理。0x0007~0x003E为保留,0x0040~0xffff 用于面向连接。
数据包的操作码如下:命令拒绝(command reject)、连接参数更新请求(connetciton parameter updata request)、连接参数更新响应(connection paramerter updata reponse).
标识符用于匹配请求和响应,如果请求的标识符为0x35,则响应该请求的数据包标识符也必须使用0x35.每个请求有不同的标识符,多个请求便能同时发送。
八、属性
低功耗蓝牙的三种协议:逻辑链路控制与适配协议(L2CAP)、安全管理协议(SM)、属性协议(AP).属性就是带标签的数据。