蓝牙4.0BLE协议栈以及分层概述

一、蓝牙4.0协议概念
协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现形式, 通俗的理解就是用代码实现的函数库,以便于开发人员调用。BLE协议栈将各个层定义的协议都集合在一起,以函数库的形式实现,并给用户提供一些应用层 API,供用户调用。

二、BLE协议栈
在 Bluetooth-LE 低功耗蓝牙中有四种设备类型:Central主机、Peripheral从机、Observer观察者、Broadcaster广播者。
通常Central和Peripheral一起使用。
然后Observer和 Broadcaster一起使用。
Central和Peripheral 连接后交换数据,我们平时使用到的基本上都是这个模式,而像多个温度采集器(一般用于智能家居),通常采用 Observer 和 Broadcaster 这种无需连接的方式。

三、GATT层
初始化 GATT Client,GATT有Service和Client之分,Service 作为服务端,GATT Client提供 read/write 接口,Central 作为 Client,对一般情况下,Peripheral 作为 Service ,所以主机 Central会调用GATT_WriteCharValue 或者GATT_ReadCharValue 来和作为Service端的 Peripheral从机通信, 而Peripheral 需要通过notify的方式,也就是调用GATT_Notification 发起和主机的通信,在后面我们会详细介绍他们,一般来说,Peripheral notify的方式,速度要比直接读写的速度要慢 。

四、BLE协议栈各个层简介
PHY层:
1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学、医疗)频段。
LL 层:
链路层,RF 控制层,用于控制设备的射频状态,控制芯片工作在standby(准备)、advertising(广播)、scanning(监听/扫描), initiating(发起连接)、connected(已连接) 这五个状态中的一种。五种状态的切换描述为: advertising(广播)不需要连接就可以发送数据(告诉所有人,我来了), scanning(监听/扫描)来自广播的数据,initiator(发起人)将携带 connection request(连接请求)来响应广播者,如果advertiser(广播者)同意该请求, 那么广播这和发起者都会进入已连接状态, 发起连接的设备变为 master(主机),接收连接请求的设备变为 slave(从机)。
HCI 层
主机控制接口层,通信层,向host和controller提供一个标准化的接口。该层可以由软件API实现或者使用硬件接口 uart、spi、usb来控制。
L2CAP 层
逻辑链路控制及自适应协议层,相当于快递,将数据打包,为上层提供数据封装服务,可以让客户点对点的通信。
SM 层
安全管理层,提供配对和密钥的分发,实现安全连接和数据交换。
ATT 层
属性协议层,ATT 环境中,允许设备向另外一个设备展示一块特定的数据,称之为“属性”,展示“属性” 的设备称为服务器,与之配对的设备称为客户端。链路层状态(主机和从机)与设备的ATT 角色是相互独立的,也就是说,主机设备可以是 ATT 服务器,也可以是 ATT客户端,从机也一样。
GATT 层
通用属文件健配置层,从名字就能看出,GATT 是在 ATT 上面的一层结构,定义了使用 ATT的服务框架,GATT规定了配置文件(鼎鼎有名的 profile)的结构,在BLE中,所有被profile或者服务用到的数据块都称为“特性, characteristic”两个建立连接的设备之间的所有数据通信都是通过 GATT 子程序处理,应用程序和 profile 直接使用 GATT层,在后面具体的代码中,我们会经常见到 GATT,数据交互也是再GATT层。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Mr_fdyong/article/details/80425609