FireBLE

FireBLE 是一个面向于打造智能生活的开源平台,以BLE(Bluetooth Low Energy)技术为核心,拥有超低的功耗、不俗的处理能力和广泛的应用场合,专注于更智能、高效率的工作模式,让生活在科技中更安全、方便、快捷。也许您一个不经意的想法与FireBLE擦出的火花,会在这片原野上燎出火焰,甚至燃烧整个世界。

协议栈介绍

更新时间:2017-08-08 阅读:3779

前言

昆天科BLE协议栈分为LL、L2CAP、SMP、ATT、GATT、GAP七层。本章分别作了详细介绍。

BLE protocol stack struct.png

协议栈的LL层

  • 无线数据包分组调度
  • 链接确立和维护
  • 频率自适应调节
  • 数据包建立与恢复
  • 加密与解密
  • 链路过程控制
  • 链接更新
  • 信道映射更新
  • 特征交换
  • 版本交换……

BLE LL.png

LL层有五个状态

  1. standby:不活动,不收发和解析数据。
  2. advertising:发送广播数据包、接收扫描请求,返回扫描请求、接收连接请求。
  3. scanning:等待接收广播包,接手扫描请求,等待扫描响应。
  4. initiating:等待接收特定设备的数据包,响应连接请求。
  5. connection:交换数据、定义角色(主从),如果从initiating状态过来,则为主,从advertising状态过来则为从。

L2CAP层

  • 基本模式配置和信道修复
  • 为上层提供定向连接数据
  • 只与BLE信号协议、安全管理协议、属性协议交换信息
  • 不与应用层直接交换信息

SMP层

  • 配对算法支持
  • 密钥产生与算法支持
  • 签名操作
  • 产生和解算随机地址
  • 应用层需保存一下密钥:
  • LTK
  • IRK
  • CSRK


ATT层

  • 设备间交换属性信息
  • 客户端-服务器模型
  • 属性操作
  • 发现属性
  • 可读属性
  • 可写属性
  • 指示属性
  • 通告属性

GATT层

  • 在ATT层基础上建立服务框架,实现Client/server
  • 整合数据构建一个特定的功能或者特征
  • 特征定义
  • 服务配置
  • 服务发现
  • 特征发现
  • 特征描述
  • 读特征值
  • 写特征值
  • 指示或者通告特征

GAP层

  • 对所有GAP角色支持
  • 主机
  • 外设
  • 观察者
  • 广播者
  • 设备发现
  • 连接建立和维护
  • 配置安全模式和等级
  • 加密

数据收发

如果你对以上的介绍和迷糊,没有关系,这只是一个了解,其实使用中我们无须关心这么多东西,对于LE profile只能通过GATT与ATT层通信,具体ATT的操作已经完全被封闭了,所以我们只需关心LE profile与GATT的数据收发。数据帧格式如下图所示,我们可以看到,我们在GATT中给定parameters和传输条件,系统会在底层自动给我们封装成无线数据包传输出去。
BLE frame strcuture.png

我们可以先了解parameters。首先我们要明白什么是属性与数据库。

属性与数据库

在ATT层中,实现了client/server的框架(与主从关系无关,这个框架定义的是建立链接设备间的工作分配)。作为client,不提供数据库,所有的数据都是从server提供的属性中获取,其主要的任务有访问属性、发现服务、请求数据以及处理数据,作为主动的一方。作为server,提供数据库,负责采集数据、存储数据,通过属性提供数据给Client,主要的任务是采集数据、监控数据、定时推送等等,作为响应的一方。

在ATT层中,采用属性的提供和封装数据。Server提供属性,而Client访问属性。
属性包含以下:

  • type: 用uuid作为标识,代表了value的实际意义。
  • value:使用一个8-bit数组来存储属性的值。
  • handle:属性16位的标识,用来唯一确定属性。
  • permission:属性的权限开放,拥有rd(读)、wr(写)、notif(通知)、ind(指示)四种权限。

ATT提供的操作有:请求、响应、命令、通告、指示、确认。ATT提供这些操作给GATT以实现LE profile和app与属性的信息交换。
BLE ser-cli.png

服务与特征

GATT是对ATT数据的再次整合封装,GATT给LE profile和APP提供的是服务。说到服务可能很多人会说我啰里啰嗦说了一大堆不懂的终于到实际应用了,因为对于APP来说,看到的就是服务,什么LL、L2CAP、SMP、ATT什么的,统统都不会和APP有任何交集。

服务,就是为了实现某一特定功能或特性而整合的一系列的数据。服务的构成如下:

  • 服务定义
  • 内容定义
  • 特征定义
  1. 特征声明
  2. 特征值声明
  3. 特征描述声明

BLE server struct.png

GATT提供:

  1. MTU(最大传输单元)交换
  2. 发现服务
  • 发现所有服务
  • 根据uuid发现服务
  1. 发现特征
  • 发现服务所有特征
  • 根据特征描述发现特征
  1. 读写取特征值
  2. 监听和指示特征值

服务作为实现某一特定功能的集合,一般希望可以做到比较独立,能完全与其他的服务独立,功能也不能太复杂。APP并不会直接使用服务,还得通过profile进行规范。

profile

profile实现了对服务的整合和规范,用以实现某一更复杂的功能。例如PROXR中包含有三个服务,其中每一个服务下都有其下包含的特征值。由于有一些服务需要相互协作,这样,服务之间的协作交给profile处理,会让服务拥有更好的独立性。