蓝牙

蓝牙

1. 蓝牙概述

蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在包括移动电话、PDAQ、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4 GHz(2.4 至 2.485 GH)ISM(即工业、科学、医学)频段,使用IEEE802.11协议。

2. 蓝牙发展历程

自1994年由爱立信推出至今,蓝牙技术已经走过了30个岁月,发展为当前的状况。

  • 第一代蓝牙:关于短距离通讯早期的探索,使用的是BR(Basic Rate)技术,此时蓝牙的理论传输速率,只能达到721.2Kbps。
  • 第二代蓝牙:新增的EDR(Enhanced Data Rate)技术,使得蓝牙设备的传输率可达3Mbps。
  • 第三代蓝牙:核心是AMP(Generic Alternate MAC/PHY),这是一种全新的交替射频技术,支持动态地选择正确射频,传输速率高达24Mbps。
  • 第四代蓝牙:主推Low Energy低功耗,BLE(Bluetooth Low Energy)低功耗功能。
  • 第五代蓝牙:开启物联网时代大门,在低功耗模式下具备更快更远的传输能力。

3. 蓝牙技术类型

蓝牙协议包括两种技术:BR(Basic Rate)和LE(Low Energy)。

这两种技术都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是相互独立的,不能互通的技术!

厂商如果只实现了一种,那么只能与同样实现该技术的设备互通。如果厂商要确保能和所有的蓝牙设备互通,那么就只能同时实现两种技术,而不去管是否真的需要。

3.1 经典蓝牙(BR/EDR和AMP)

Basic Rate是正宗的蓝牙技术,可以包括可选的EDR(Enhanced Data Rate)技术,以及AMP(Alternate MAC and PHY layer extension)。

  • BR:最早期的蓝牙技术,速度只能达到721.2Kbps,在那个年代,已为高大上了。
  • EDR:随着技术的提升,使用EDR技术的蓝牙,理论速率可以达到2.1Mbps。
  • AMP:使用AMP技术的蓝牙,理论速率可以达到54Mbps。蓝牙自身的物理层和AMP技术差异明显,BR/EDR和AMP是不能同时使用的。简单的说,就是:BR和EDR是可以同时存在的,但BR/EDR和AMP只能二选一。

3.2 低功耗蓝牙(BLE)

3.1所讲的BR技术的进化路线,就是传输速率的加快、加快、再加快。但能量是守恒的,你想传得更快,代价就是消耗更多的能量。而有很多的应用场景,并不关心传输速率,反而非常关心功耗。这就是Bluetooth LE(称作蓝牙低功耗)产生的背景。

低功耗蓝牙与经典蓝牙使用相同的2.4GHz无线电频率,因此双模设备可以共享同一个天线。低功耗蓝牙使用的调制系统更简单。BLE技术相比BR技术,差异非常大,或者说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已。目前BLE主要广泛应用于IoT(Internet of Things:物联网)产品领域。

4. 常见蓝牙架构

4.1 SOC蓝牙单芯片方案

image-20250414165534441

一般是半导体厂商半开源协议栈,把开发的蓝牙协议栈直接烧写到蓝牙芯片中(比如CSR BC4/5、CSR8670、CSR8675、T1CC2540、NRF51xXx、NRF52XXx、乐鑫ESP32等等)。

此类芯片一般可以直接做为MCU用,这类产品一般用于消费类电子,集成度很高,调一调参数可以直接使用,常见的有蓝牙耳机等产品。

4.2 SOC蓝牙 + MCU方案

image-20250414170057502

在集成好的蓝牙芯片基础上,通过特定的接口(UART居多),发送自定义的command来达到想要的功能,比如发送0x01代表搜索周围设备。

外设一个单芯片方案,其自定义指令包含蓝牙芯片(BT Controller)、微控制单元(MCU)以及蓝牙协议栈(BT Host)。

此部分的应用,将蓝牙作为一个外设使用,用于远程通信,例如网上卖的一些蓝牙串口。

4.3 蓝牙host + controller分开方案

image-20250414170442124

这种应用算是蓝牙最复杂的应用,客户需要使用蓝牙的场景有很多,涉及的蓝牙协议也有很多,需要将Host与Controller分开,集成更多的蓝牙协议,比如蓝牙电话(HFP)、蓝牙音频(A2DP)、蓝牙音乐控制(AVRCP)、蓝牙电话本(PBAP)、蓝牙短信(MAP)等。

此部分应用,将定制蓝牙的各种服务,实现蓝牙多功能需求。

4.4 使用场景

  • 手机。手机的蓝牙复杂应用,注定要用第3种方案,也就是蓝牙协议栈在主芯片中,蓝牙芯片为HC架构。
  • 蓝牙音响、蓝牙耳机此种应用。一般用单芯片方案就能搞定,好处在于开发便捷。
  • 蓝牙手表。手表要看功能复杂性,如果仅仅有时间显示、传感器交互、蓝牙,那么可以选择单芯片方案(也就是方案1),如果有网络等比较复杂的功能就要使用MCU+蓝牙芯片方案。
  • 蓝牙手环、蓝牙心率带等。基本上是单芯片方案

5. 蓝牙协议栈

5.1 蓝牙芯片架构

蓝牙的核心系统,由一个Host和一个或多个Controller组成。

  • BT Host:逻辑实体,在HCI(Host Controller Interface)的上层。
  • BT Controller:逻辑实体,在HCI(Host Controller Interface)的下层。
  • 根据Host与Controller的组成关系,常见的蓝牙芯片也分为以下几种:
    • 单模蓝牙芯片:单一传统蓝牙的芯片,单一低功耗蓝牙的芯片。即1个Host结合1个Controller。
    • 双模蓝牙芯片:同时支持传统蓝牙和低功耗蓝牙的芯片。即1个Host结合多个Controller。

image-20250414171332504

蓝牙协议是通信协议的一种,一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码。

5.2 BLE低功耗蓝牙协议栈框架

要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用

可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。

简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。

蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。

蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;

蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,百花齐放,定义出各种各样的策略,如FTP、文件传输、局域网等等。

image-20250414172527322

而蓝牙核心协议(Bluetooth Core)又包含BLE Controller和BLE Host两部分。

  • Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link)。
  • Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。

image-20250414173428018

  • 物理层(Physical Layer,PHY)

    • PHY 层主要负责在物理信道上发送和接收信息包。Bluetooth LE 使用 40 个射频信道。频率范围:2402 MHz 到 2480 MHz。
  • 链路层(Link Layer,LL)

    • LL 层主要负责创建、修改和释放逻辑链路(如果有需要,还包括与之相关的逻辑传输),同时负责更新与设备之间物理链路相关的参数。它控制链路层状态机处于准备、广播、监听 / 扫描、发起连接、已连接这五种状态中的一种。
  • 主机控制接口层(Host Controller Interface,HCI)

    • HCI 层向主机和控制器提供一个标准化的接口。该层可以由软件 API 实现或者使用硬件接口 UART、SPI、USB 来控制。
  • 逻辑链路控制及自适应协议层(Logical Link Control and Adaptation Protocol,L2CAP)

    • L2CAP 层负责对主机和协议栈之间交换的数据进行协议复用能力、分段和重组操作。
  • 安全管理层(Security Manager,SM)

    • SMP 层用于生成加密密钥和身份密钥。SMP 还管理加密密钥和身份密钥的存储,并负责生成随机地址并将随机地址解析为已知设备身份。
  • 通用访问配置文件层(Generic access profile,GAP)

    • GAP 层代表所有蓝牙设备通用的基本功能,例如传输、协议和应用程序配置文件使用的模式和访问程序。GAP 服务包括设备发现、连接模式、安全、身份验证、关联模型和服务发现。
  • 属性协议层(Attribute protocol,ATT)

    • 简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE引入了Attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
  • 通用属性配置文件层(Generic Attribute profile,GATT)

    • GATT 层表示属性服务器和可选的属性客户端的功能。该配置文件描述了属性服务器中使用的服务、特征和属性的层次结构。该层提供用于发现、读取、写入和指示服务特性和属性的接口。

6. BLE角色划分

在 Bluetooth LE 协议栈中不同的层级有不同的角色划分。这些角色划分互不影响。

  • LL:设备可以划分为主机和从机,从机广播,主机可以发起连接。
  • GAP:定义了4种特定角色:广播者、观察者、外围设备和中心设备。
  • GATT:设备可以分为服务端和客户端。

7. BLE地址

分为公共地址和随机地址。

  • 公共地址:该类型的地址是全球唯一且固定的,理论上重复的概率基本为0,因为它们是由IEEE组织分配给买家的,适用于为保证BLE设备地址的唯一性,方便其他人辩别。

  • 随机地址:说白了就是厂商白嫖,因为地址是免费的。当然也提高了隐私。随着隐私和安全性的关注增加,越来越多的蓝牙设备开始使用随机地址来减少被追踪的风险。这在蓝牙低功耗(BLE)技术中尤为常见。

7.1 公共地址

BLE的公共地址,就类似于我们日常的身份证号码,是全球唯一的且不可改变的。为了保证BLE公共地址的全球唯一性,其需要向IEEE购买,然后IEEE组织就会对应地分配公共地址给买家。BLE的公共地址是全球唯一的,且在BLE设备的整个生命周期都不会改变。总长度为6个字节,共48位。

image-20250414181402981

7.2 随机地址

除了公共地址类型之外,还有一个随机地址类型,提供额外的隐私保护,其又分为静态地址(Static Address)和私有地址(Private Address),它们之间主要通过最高的2位有效位来区分。

  • 静态地址。总长度也是48位,但是最高位的2位必须是0b11。随机部分至少有一个位是0和1。也就是说不能全部是0或全部是1。设备重启之前不会改变。

image-20250414181903417

  • 私有地址。总长度也是48位。最高位是00/01。随机部分至少有一个位是0和1。也就是说不能全部是0或全部是1。定时更新改变。

image-20250414181923708

8. 广播

广播是指从机(服务器)每经过一个时间间隔发送一次广播数据包,这个时间间隔称为广播间隔,这个广播动作叫做广播事件,只有当从机处于广播状态时,主机(客户端)才能发现该从机(服务器)。

在每个广播事件中,广播包会分别在37、38和39三个信道上依次广播,如下图所示。

image-20250414182927138

广播数据包一般包含可读的设备名称、设备是否可连接等信息。

9. 扫描

扫描是主机监听从机广播数据包和发送扫描请求的过程,主机通过扫描,可以获取到从机的广播包以及扫描回应数据包,主机可以对已扫描到的从机设备发起连接请求,从而连接从机设备并通信。

10. 通讯

主从之间的通信是通过GATT的Profile来完成的,Profile可以理解为配置、数据格式等。

从机作为GATT的Server端,用来定义和存储Profile。Profile包含一个或者多个Service,每个Service又包含一个或者多个Characteristic,Characteristic是主从通信的最小单元。

主机作为GATT的Client端,用来发现和获取从机的Service和Characteristic,从而与之通信。

image-20250414183147237

关于服务 Service和特征值Characteristic的概念。每个服务和特征值都有自己的唯一标识 UUID,标准UUID为128位,蓝牙协议栈中一般采用16位,也就是两个字节的UUID格式。

一个从机设备包括一个或者多个服务;一个服务中又可以包括一条或者多条特征值,每个特征值都有自己的属性 Property,属性的取值有:可读 Read、可写 Write、通知 Notify、指示Indicate。

11. 透传模式

蓝牙透传模式是蓝牙通信中的一种重要工作模式,也被称为透明传输模式。在这种模式下,蓝牙模块就像一条无形的数据管道。从一端输入的数据,会原封不动地传输到另一端,而不需要对数据进行复杂的解析或者处理(除了蓝牙协议栈自身必要的处理)。例如,设备 A 发送一串字节流,通过蓝牙透传模式,设备 B 接收到的就是完全相同的字节流,就如同这两个设备直接用一根线连接起来进行数据传输一样。

就相当于蓝牙不存在一样,两个设备直接交流。