低功耗蓝牙的体系结构比较简单,从下到上分别为控制器、主机和应用层。
控制器主要包含物理层、直接测试模式、链路层和主机控制接口(HCI)的下半部分,能够收发无线电信号,并将这些无线电信号翻译成带信息的数据包。
主机通常为协议栈,管理设备间如何通信以及如何提供服务。包含主机控制机接口的上半部分、逻辑链路控制和适配协议、属性协议、安全管理器、通用属性规范和通用访问规范。
应用层就是我们嵌入式开发人员所做的各种应用。
下面概述下各个模块的功能,在以后的章节中会详细介绍各个模块的具体功能和实现。
物理层
物理层采用2,4GH在无线电,完成接收和传输的工作。无线电传输信息主要是通过调制和解调来实现的,通过将0和1调制成不同的波形,发送出去,在接收端收到无线电信号后解调,就完成了信息的传输。当然,物理层还会包含滤波、放大等一系列的操作,但对于嵌入式软件工程师来说,可以将这一部分当做一个黑盒子,只要知道物理层是用来收发数据的就可以。
低功耗蓝牙技术中,将2.4GHz划分为40个RF信道,每个信道的宽度为2MHz。物理层每微妙传输1bit的数据。
直接测试模式
直接测试模式是一种测试物理层的新方法。它允许测试者控制物理层发送和接收一系列的数据包,而后测试者分析接收到的数据包,可以判断出物理层是否遵循RF规范。
链路层
链路层是低功耗蓝牙体系中最复杂的部分。它负责广播、扫描、连接的建立和保持。确保数据按正确的方式组织,正确的计算校验值和加密序列等。链路层有两种信道和两种报文。
信道分为广播信道和数据信道,报文分为广播包和数据包。
广播信道有3个,设备利用该信道进行广播,并且扫描和发起连接。数据信道有37个,由一个自适用调频引擎控制以实现鲁棒性。
无论广播包还是数据包,都是小包,这有助于降低功耗。广播包和数据包的基本格式均相同。
可以发送的最短的报文是空报文,总共80bit,时长为80us。
主机/控制器接口
主机/控制器接口提供了主机和控制器之间通信的标准接口。它允许主机将命令和数据发送给控制器,也允许控制器将事件和数据发送给主机。
主机/控制器接口实际上分为物理接口和逻辑接口。逻辑接口主要定义事件和名利以及相关的行为,而物理接口指的就是USB、UART、SDIO的接口。
另外,主机/控制器接口会将数据分割和重组。
逻辑链路控制和适配协议
L2CAP是低功耗蓝牙的复用层,它定义里两个基本的概念:L2CAP信道和L2CAP信令。
低功耗蓝牙中只使用固定信道:一个用于信令信道,一个用于属性协议,一个用于安全管理器。
安全管理器协议
定义了配对和密匙分发协议。配对完成后,双方就保存了密匙,当两台设备下次重连时,可以迅速的认证彼此的身份。
属性协议
定义了访问对端设备数据的一组规则。所有的数据都存储在属性服务器的属性里,供客户端执行读写操作。
属性是被编址并被打上标签的一小块数据。每个属性包含一个唯一的句柄、一个表示存储数据的类型以及一个值。
属性协议定义了6中类型的信息:
客户端到服务器的请求;
服务器对客户端请求的应答;
客户定对服务器的命令;
服务器到客户端的通知;
服务器到客户端的指示;
客户端对服务器指示的应答;
通用属性规范
GATT位于属性协议之上,定义了属性的类型和使用方法。通用属性规范引入了一些概念,包括“特性”、“服务”、服务之间的包含关系、特性描述符等。它还定义了一些规程,用来发现服务、特性、服务之间的关系,以及用来读取和写入特性值。
服务之间的关系是的低功耗蓝牙体系具有巨大的灵活性和活力。
通用访问规范
GAP定义了设备如何发现、连接。它还定义设备之间如何建立长久的联系——绑定。规范定义了设备如何实现可发现、可连接和可绑定。