目录
1. BLE的框架结构
2. BLE的Controller和Host
就如同前文的BLE框架图,BLE自下而上分成controller,host和profiles。其中Profiles可以理解为对应于各种不同应用场景的应用层协议的集合。而真正体现在硬件上就是Controller和Host。蓝牙的官方协议文档,也正是按照Host和Controller的功能划分来阐述蓝牙规范(注,蓝牙协议文档中也将HCI单独作为一个部分来介绍)。
2.1. 控制器(Controller)
Controller,顾名思义就是控制器。
控制谁?控制BLE的物理层信号。
通过谁来控制?通过主机(Host)来控制。
Controller包含物理层(PHY,也是BLE的射频部分)、链路层(LL)和主机命令接口(HCI)。
物理层PHY就不多说了,主要集成在Controller中提供符合BLE规范的射频信号。从软件的角度看,链路层(LL)和主机命令接口(HCI)才是Controller中的大部头。
首先介绍链路层。
按照OSI七层模型的定义,链路层(LL)的任务是:负责在两个相邻结点间的线路上,无差错的传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。和物理层相似,数据链路层要负责建立、维持和释放数据链路的连接。在传送数据时,如果接收点检测到所传数据中有差错,就要通知发方重发这一帧。
那么BLE的链路层(LL)的作用是什么?BLE的链路层(LL)的作用和OSI七层模型中的定义相吻合。BLE的链路层(LL)详细定义了链路层的帧结构,并且进行差错检测、数据白化、时间同步、地址过滤等处理。这些功能笔者将会用专门文章来详细介绍。
接下来介绍主机命令接口HCI。
在蓝牙中,控制器(Controller)并不能独立工作,它的必须接收来自上层主机(Host)的数据包和对链路的配置。主机命令接口(HCI)就是一套用于主机(Host)和控制器(Controller)之间,用于配置和数据交换的命令接口协议。
主机(Host)和控制器(Controller)之间用什么物理总线通信呢?目前蓝牙主机命令接口(HCI)支持UART、USB、SDIO几种物理接口。
2.2. Host
Host,就是蓝牙协议主机部分。主机(Host)主要包括:主机命令接口(HCI)、逻辑链路控制和适配协议(L2CAP:Logical Link Control and Adaptation Layer Protocol)、服务发现协议(SDP:Service Discovery Protocol)、属性协议(ATT:Attribute Protocol)、通用属性配置(GATT:Generic Attribute Profile)、通用访问配置(GAP:Generic Access Profile)以及安全管理等。上面提到的这些协议都会在将来的相关文章中详述。今天,我们只是走马观花简要介绍一下:
主机命令接口(HCI):
这个就是为了和控制器(Controller)中的HCI配合使用。
逻辑链路控制和适配协议(L2CAP):
在经过控制器(Controller)中的Link Layer的抽象之后,两个BLE设备之间可存在两条逻辑上的数据通道:一条是无连接的广播通道;另一条是基于连接的数据通道,是一个点对点(Master对Slave)的逻辑通道。
广播通道暂且不说,这个数据通道(简称逻辑通道,Logical Channel)要怎么使用,还有一些问题需要解决,比如:
【1】Logical Channel只有一条,而要利用它传输数据的上层应用却不止一个,怎么复用?
【2】Logical Channel所能传输的有效payload长度最大只有251bytes,如何让上层应用传输更大的数据包?
【3】Logical Channel仅提供了简单的应答和流控机制,如果传输的数据出错怎么办?
以上问题,都是由L2CAP,一个介于应用程序上层协议和Link Layer之间的protocol负责。它提供的功能主要包括:
【1】协议/通道的多路复用,Protocol/channel multiplexing;
【2】上层数据包的分片与重组:Segmentation and reassembly
【3】基于L2CAP Channel的流控机制;
【4】错误控制和重传机制:Error control and retransmissions,;
【5】对数据流式传输的支持(如音频、视频等,不需要重传或者只需要有限重传);
【6】对QoS(Quality of Service)的支持。
服务发现协议(SDP):
在BLE系统中,客户只有通过服务发现协议(SDP)才能获得设备信息、服务信息及服务特征,才能在此基础上建立相互间的连接。通过这个协议,应用程序可以发现哪些服务可用以及服务的特性是什么
属性协议(ATT):
属性协议(ATT)是定义了BLE协议栈上层的数据结构和组织方式。是后面将于讲述的通用属性配置(GATT)和通用访问配置(GAP)的基础,它定义了BLE协议栈上层的数据结构和组织方式。
属性(Attribute)概念是ATT层的核心,以编程的眼光来看,属性是一个数据结构,它包括了数据类型和数据值,就如同C语言结构体的概念。
属性主要由以下四部分组成:属性句柄(Attribute Handler)、属性类型(Attribute Type)、属性值(Attribute Value)、属性权限(Attribute Permissions)。
通用属性配置(GATT):
通用属性配置(GATT)指定了两个BLE设备的应用层Profile数据交互的结构(Structure) 这个结构体定义了一些基本元素,如服务(Service)、特性(Characteristic)等。这些元素存在于属性(Attribute)中
通用属性配置(GATT)中最上层是Profile。 Profile由一个或多个服务(Service)组成;服务(Service)是由多个特征(Characteristic)组成,也可以包含其他服务的引用(Reference) ;特征(Characteristic)由值(Value)、属性(Property)以及描述符(Descriptor)组成。
通用访问配置(GAP)
BLE协议栈中的通用访问配置(GAP)负责处理设备访问模式,包括:被发现、建立连接、终止连接、初始化安全管理和设备配置。GAP层可以扮演四种角色之一:
Broadcaster 广播者----不可以连接,一直发送广播
Observer 观察者----可以扫描广播,但是不能发起建立连接的设备
Peripheral 外设----可以被连接,在单个链路层连接中作为Server
Central 中央设备----可以扫描广播并发起连接,在单个或多个链路层中作为Client
3. BLE的单芯片方案与多芯片方案
根据蓝牙控制器(Controller)和主机(Host)是不是工作在同一块芯片上,我们可以把BLE的实现方案分成单芯片方案和多芯片方案。
通常在一些简单的蓝牙应用中使用各种蓝牙SOC就是单芯片方案。比如常见的TI公司的CC25xx、CC26xx,Nordic公司的NRF51xxx、NRF52xxx等等。此类芯片一般可以直接做为 MCU 用,集成度很高。常用于产品功能比较单一的情况,如蓝牙耳机、智能手环、防丢器等。
多芯片方案就是把控制器(Controller)和主机(Host)分别放在不同的芯片中实现,适用于蓝牙应用程序较复杂的情况下使用,这里可以使用功能强大的MPU甚至是PC作为蓝牙主机(Host),而单独使用蓝牙芯片做控制器(Controller),两者使用主机命令接口(HCI)进行通信。
版权声明
所有原创文章(未进行特殊标识的均属于原创) 的著作权属于本人
所有转载文章(标题注明[转]的所有文章) 的著作权属于原作者。
所有译文文章(标题注明[译]的所有文章) 的原文著作权属于原作者,译文著作权属于本人。
转载注意事项
除注明外,所有文章均采用 Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)协议发布。
你可以在非商业的前提下免费转载,但同时你必须:
保持文章原文,不作修改。
明确署名,即至少注明 作者:BoatOnMCU 字样以及文章的原始链接,且不得使用 rel="nofollow" 标记。
商业用途请电话联系本人。
微信公众号转载一律不授权,除非联系本人并获得授权。
欢迎访问本人公众号