蓝牙通信技术基础

蓝牙通信技术基础本文详细介绍了蓝牙通信的基础知识 包括蓝牙的定义 优点 通信流程 发展历史 模块分类 协议栈 GAP GATT L2CAP SMP PHY 以及专业词汇如 profile service 和 charac

大家好,欢迎来到IT知识分享网。

1. 概述

1.1 蓝牙是什么

  • 一种短距离无线通信技术
  • 爱立信公司创建,如今由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。
  • 现在用的都是低功耗蓝牙 Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)
  • 在 5.0 以后才支持外设模式,

1.2 蓝牙的优点

  • 低功率 便于电池供电设备工作
  • 使用方便,点对点连接
  • 短距离,低成本,以及高速
  • 在智能设备的普及性高,应用广。

1.3 蓝牙通信流程

  • 注册适配器打开蓝牙
  • 注册广播监听蓝牙状态
  • 搜索附近设备和已配对设备
  • 选择未配对设备进行配对
  • 选择已配对设备进行连接通信

1.4 蓝牙发展历史

在这里插入图片描述

1.5 蓝牙模块分类

  • 蓝牙技术分为经典蓝牙(BT)和低耗能(LE)两种技术类型。
    其中经典蓝牙(BT)包括基础速率/增强数据率(BR/EDR),BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;LE型则使用点对点(一对一)、广播(一对多)和网格(多对多)等多种网络拓扑结构
  • 蓝牙芯片的三种功能配置:
    蓝牙通信技术基础
  • 蓝牙的详细分类:在这里插入图片描述

在这里插入图片描述

1.6 蓝牙协议栈

蓝牙协议栈由主机 + HCI(可选) + 控制器三大块组成,其中对于单芯片方案是没用HCI的。

  • 主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;
  • HCI:此部分定义了主机和控制器之间通信的接口标准(Vol 4: Host Controller Interface)
  • 控制器(Controller):此部分拆分为低功耗蓝牙(Vol 6: Low Energy Controller)(Vol 2: BR/EDR Controller)
    在这里插入图片描述

GAP规范(通用接入规范)

ATT(属性协议)

定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。

  • Requests:请求报文,客户端发给服务端,且需要服务端的一个应答Responses;(C->S,带ACK的请求报文)
  • Responses :响应报文,和Requests成对出现,服务端对客户端Requests的Responses;
  • Commands :命令报文,客户端发给服务端,不需要应答;
  • Notifications :通知报文,服务端主动发给客户端的通知;
  • Indications :通知报文,相比Notifications,客户端要应答确认Confirmations ,是否收到通知了;
  • Confirmations :和Indications 成对出现;

GATT(通用属性规范)

位于ATT之上,定义了属性的类型及其使用方法。 GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题。

L2CAP层(链路控制和适配协议)

SMP(安全管理协议)

定义了蓝牙设备配对、认证、解密等行为的安全操作。

LLCP/LL (链路层控制)

低功耗蓝牙参考 《Core_v4.2.pdf》中Part B: Link Layer Specification章节部分。

PHY(物理层)

1.7 相关专业词汇

  • profile
    profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。
  • service
    service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据
  • characteristic
    characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
  • UUID
    UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识

注:每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。

2.规范

2.1 通用接入规范 GAP(Generic Access Profile)

GAP(Generic Access Profile)是用来控制设备连接和广播。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。

  • 设备角色
    GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)和中心设备(Central)。
    外围设备:这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如小米手环。
    中心设备:中心设备相对比较强大,用来连接其他外围设备。例如手机等。


  • 广播数据
    在 GAP 中外围设备通过两种方式向外广播数据: Advertising Data Payload(广播数据)和 Scan Response Data Payload(扫描回复),每种数据最长可以包含 31 byte。这里广播数据是必需的,因为外设必需不停的向外广播,让中心设备知道它的存在。扫描回复是可选的,中心设备可以向外设请求扫描回复,这里包含一些设备额外的信息,例如设备的名字。(广播的数据格式我将另外专门写一个篇博客来讲。)
  • 广播流程
    GAP 的广播工作流程如下图所示。
    在这里插入图片描述

    从图中我们可以清晰看出广播数据和扫描回复数据是怎么工作的。外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,同时也不太容易扫描到。

  • 广播的网络拓扑结构
    大部分情况下,外设通过广播自己来让中心设备发现自己,并建立 GATT 连接,从而进行更多的数据交换。也有些情况是不需要连接的,只要外设广播自己的数据即可。用这种方式主要目的是让外围设备,把自己的信息发送给多个中心设备。因为基于 GATT 连接的方式的,只能是一个外设连接一个中心设备。使用广播这种方式最典型的应用就是苹果的 iBeacon。广播工作模式下的网络拓扑图如下:

2.2 通用属性规范 GATT (Generic Attribute Profile)

现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 GATT 的全名是 Generic Attribute Profile(姑且翻译成:普通属性协议),它定义两个 BLE 设备通过叫做 Service 和 Characteristic 的东西进行通信。GATT 就是使用了 ATT(Attribute Protocol)协议,ATT 协议把 Service, Characteristic遗迹对应的数据保存在一个查找表中,次查找表使用 16 bit ID 作为每一项的索引。 一旦两个设备建立起了连接,GATT 就开始起作用了,这也意味着,你必需完成前面的 GAP 协议。这里需要说明的是,GATT 连接,必需先经过 GAP 协议。实际上,我们在 Android 开发中,可以直接使用设备的 MAC 地址,发起连接,可以不经过扫描的步骤。这并不意味不需要经过 GAP,实际上在芯片级别已经给你做好了,蓝牙芯片发起连接,总是先扫描设备,扫描到了才会发起连接。 GATT 连接需要特别注意的是:GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。 中心设备和外设需要双向通信的话,唯一的方式就是建立 GATT 连接。 

GATT 连接的网络拓扑

GATT 通信事务

GATT 结构

- ProfileProfile 并不是实际存在于 BLE 外设上的,它只是一个被 Bluetooth SIG 或者外设设计者预先定义的 Service 的集合。例如心率Profile(Heart Rate Profile)就是结合了 Heart Rate Service 和 Device Information Service。所有官方通过 GATT Profile 的列表可以从这里找到。 - ServiceService 是把数据分成一个个的独立逻辑项,它包含一个或者多个 Characteristic。每个 Service 有一个 UUID 唯一标识。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通过认证的,需要花钱购买,128 bit 是自定义的,这个就可以自己随便设置。 

2.3 GAP和GATT的区别与联系

GAP 和 GATT 有什么不同呢?

  • GAP :定义一个 BLE 网络栈的通用拓扑结构。
  • GATT:描述关于如何数据在连接中如何传输的细节。GATT 尤其关注于数据如何被格式化、打包、然后跟据分发规则去在网络中发送。属性协议(ATT)与GATT紧密相连,那么GATT 处于 ATT 的上层,使用 ATT 去描述数据如何在两个连接的设备中交换。

GAP (Generic Access Profile)

GATT(Generic Attribute Profile)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128639.html

(0)
上一篇 2025-08-30 13:33
下一篇 2025-08-30 13:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信