蓝牙技术的起源
蓝牙的创始人是瑞典爱立信公司1994年开始研发
1998 年 2 月,5 个跨国大公司,包括爱立信、诺基亚、IBM、东芝及 Intel 组成了一个特殊兴趣小组(SIG) ,他们共同的目标是建立一个全球性的小范围无线通信技术,即现在的蓝牙。
蓝牙技术是以10 世纪的一位丹麦国王命名的。“蓝牙(Bluetooth)”一词来源于 10 世纪的丹麦国王 Harald Blåtand(英文姓名为 Harold Bluetooth) 。这位国王将四分五裂的局面统一起来的行为,与这种传输技术将各种设备无线 连接起来,有相似的地方。为了纪念他,SIG 将自己的无线技术取名“蓝牙” 。
蓝牙低功耗(BLE)
从一开始就设计为超低功耗(ULP)无线技术。
低成本,低功耗。
快速启动,瞬间连接。最快 3ms低延迟。
传输距离的提高。
高安全性。使用 AES-128加密算法进行数据报加密认证。
蓝牙版本及 4.0 和BLE 的关系
- 蓝牙技术联盟 : (Bluetooth Special Interest Group, SIG),是蓝牙核心规格版本及蓝牙技术的管理者,本身不负责具体的蓝牙产品的设计和生产等。蓝牙技术的发展经历了下面几个主要的版本:
- 蓝牙1.0:基本码率,Basic Rate,BR。
- 蓝牙2.0:增强码率,Enhanced Data Rata,EDR。
- 蓝牙 3.0:引入全新的交替射频技术(AMP: Alternate MAC/PHY),允许蓝牙协议栈针对任一任务动态地选择正确射频,通过瞬间使用消费者设备中已存在辅助无线电提供更快的吞吐量。
- 蓝牙 4.0 是第一个综合性规范,其加入了全新的蓝牙低功耗技术,即蓝牙 4.0 集三种规格于一体,最重要的特点就是省电,可以使一粒纽扣电池连续工作数年。

- 各个版本蓝牙的对比
1.蓝牙4.0包括三个子规范,即传统蓝牙技术、高速蓝牙技术和新的蓝牙低功耗技术。 BLE是蓝牙4.0的一部分。最常见的两种蓝牙核心规格:BR/EDR 和BLE。
2.蓝牙 4.2 提升了 BLE 数据传输速度,支持长包传输,单个数据包最大可传输 255 个字节。同时改善了隐私保护程度。
3.蓝牙5.0相对于蓝牙4.2,具有2倍的数据速率、4倍的覆盖范围和 8 倍的广播能力:
高速模式:支持 2Mbps数据速率,实现了数据吞吐量翻倍。
远距模式:通过 500kbps 和 125kbps 速率的全新编码物理层 (PHY) 实现远距离覆盖。
广播扩展:蓝牙BLE 有3个广播信道,之前的蓝牙BLE 版本中广播载荷通过全部
三个广播通道进行发送,蓝牙 5.0中这三个通道仅用于发送指针,显示发送载荷的时间和地点,广播载荷仅在一个数据通道上传输一次。
蓝牙的三种标志和设备类型

双模蓝牙:一般用于手机(可以传输音频和数据)
单模蓝牙:智能手环、手表(可以传输数据低功耗),如nRF51822
传统蓝牙:车载蓝牙播放器(可以传输音频功耗高)
双模蓝牙包含单模蓝牙和传统蓝牙,这两种技术使用同一个射频前端和天线,双模设备一般都有足够的供电能力,对低功耗的要求不高。
- 兼容型

BLE的体系结构
蓝牙低功耗包含三个部分:控制器、主机和应用程序。

物理层 – 控制器
- 调制方式:GFSK,高斯频移键控。
- 工作在2.4GHz ISM 频段。频率范围:2.400-2.4835 GHz
- 2.4G 被划分为 40个RF信道(f=2402+k*2 MHz, k=0, „ ,39),信道间隔 2MHz,其中: 广播信道:3个,固定。 数据信道:37个,自适应跳频。
- 无线速率:普通模式1Mbps、高速模式2Mbps。
ISM频段:(Industrial Scientific Medical Band)主要是开放给工业、科学和医用3个主要机构使用的频段。ISM频段属于无许可(Free License)频段。2.4G ISM 频段是唯一一个在所有国家都无需授权的频段,只需要遵守一定的发射功率即可。我们熟知的无线局域网、蓝牙、ZigBee 等无线网络,均可工作在2.4GHz ISM频段上。
链路层(LL) – 控制器
链路层负责广播、扫描、建立和维护连接,以及确保数据包按照正确的方式组织、正确地校验值和加密序列等。
- 链路层状态机(非整个系统)

- 就绪态:上电后,链路层进入并保持就绪态,直到接收到主机的命令。状态机的中心状态,处于其它状态下都可以进入到此状态。
- 广播态:发送广播报文和扫描响应。
- 扫描态:侦听广播设备。
- 发起态:发起连接。
- 连接态:唯一一个用到数据信道的状态,两个设备只有在连接态中才能互相传送数据。
- 链路层可能同时存在多个链路,同时拥有多个独立的状态机,但是链路层永远不能同时成为主从机。
就绪态、广播态、扫描态、发起态都只会用到广播信道,只有连接态会用到数据信道。
- 链路层信道映射
广播信道:37 、38、39,对应的中心频率是 2402MHz,2426MHz,2480MHz。

广播信道之间至少相差 24MHz。每次广播,都会在 3 个信道上将广播数据发送一次,这能有效地避免干扰,即使一个信道存在干扰,另外的信道也可以很好地工作,而三个信道同时被干扰的情况极少。
- 为什么广播信道是 3个,而不是更多?
广播信道越多,各个信道同时受到干扰的几率越小,抗干扰性越强。但是广播信道越多,发射数据占用的时间就越长,功耗也就越高。所以,在综合考虑抗干扰性和功耗的情况下,SIG 将广播设定为3 个。
主机控制器接口(HCI) – 连接主机和控制器
主机控制器接口:处于主机和控制器之间充当适配器的作用,在两个层之间提供一个标准化的接口。控制器通过HCI发送数据和事件给主机,主机通过HCI发送命令和数据给控制器。
该层可以由应用程序接口 API实现或者使用硬件接口UART、 SPI或 USB来控制。
逻辑链路控制和适配协议(L2CAP) – 主机
- L2CAP 层向上层提供数据封装服务,从而使逻辑上允许端到端的数据通信。
- L2CAP 提供可复用,分割和重组的面向连接或者无连接的数据服务。L2CAP 数据包可以达到64K。L2CAP 允许每个L2CAP 通道流控和重传。
和TCP/IP协议一样,从下往上一层一层不断封装协议头,上一层把下层送来的数据整个当做数据正文并添加本层自己的协议头。
安全管理层(SM) – 主机
安全管理层SM(Security Manager)提供配对和密钥的分发。
属性协议(ATT) – 主机
属性协议(ATT)规定了怎样去访问对端设备的数据,数据存储在属性服务器的“属性”
里,供属性客户端进行读写操作。
对端设备:连接后另一方。
通用属性配置文件(GATT) – 主机
通用属性配置文件(GATT)建立在属性协议的基础上,GATT 通过使用ATT 协议层定义
了如何发现与使用服务、特征和描述符的标准方法。
- 客户端与服务器架构:GATT定义了两个角色:服务器和客户端
- 服务器:客户端提供数据服务,就是数据中心。 (从机)
- 客户端:从服务器读写应用数据,就是访问数据者。 (主机)
客户端去服务器取数据(主机去从机取数据)
客户端和服务器:是GATT层的概念。
主机从机:是针对链路层来说的。
外围设备、中央设备:GAP层的概念。
通用访问配置文件(GAP)
GAP 层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止以及实现绑定。
GAP服务包含了5个特征:设备名称、外观特征、外围设备首选连接参数、中心设备地址解析和可解析私有地址。
- Device Name特征 – 设备名
Device Name(设备名称)特征应包含 UTF-8字符串的设备名称,一个设备只允许有一个设备名称,长度范围是 0~248 字节。如果设备是可发现的,设备名称特征应不需认证或授权即可读,如果设备是不可发现的,设备名称特征在没有认证或授权时应不可读。

- Appearance特征 – 外观
外观是一个16位的数值,外观由SIG 定义,用来列举设备的外观样式,一个设备只允许有一个外观特征。 通过图标向用户展示设备。

如何获取外观的编码?可以在 SIG网站上查到,网址如下: https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.gap.appearance.xml 也可以在BLE 工程的“ble_types.h”头文件中查到。
- PPCP特征 – 外围设备首选连接参数
外围设备首选连接参数(The Peripheral Preferred Connection Parameters (PPCP))特征包含了外围设备倾向的连接参数,一个设备只允许有一个外围设备首选连接参数。外围设备首选连接参数必须可读,而且必须不可写。

- Central Address Resolution特征 – 中心设备地址解析
蓝牙4.2为了提高蓝牙的安全性,增加了随即地址,Central Address Resolution(中心设备地址解析)用来定义设备是否支持地址解析隐私,一个设备只允许有一个中心设备地址解析特征。

0:该设备不支持地址解析,1:该设备支持地址解析
- Resolvable Private Address Only特征 – 可解析私有地址
设备应通过读取Resolvable Private Address Only特性来检查对端设备是否仅在绑定后使用可解析私有地址(RPA)。 Resolvable Private Address Only特性定义设备是否仅将 Resolvable Private Addresses(RPA)用作本地地址,如下表所示。

0:绑定后,只有可解析私有地址用作本地地址
应用层
应用层定义了三种种类型:特征(characteristic)、服务(service)和配置文件(profile)。
特征:采用已知格式、以通用唯一识别码(UUID)作为表示的一个小块数据,由于特征要求能够重复使用,因而设计时没有涉及行为,特征被定义为计算机的可读格式,当计算机遇到一个从未接触过的特征时,计算机可以去更新这个特征的读取规则,从而正确读取特征,并向用户展示读取的特征。
服务:服务是人类可读的一组特征及其相关的行为规范,只定义了位于服务器上的相关特性和行为,而不定义客户端的行为。服务有两种类型,首要服务和次要服务,一个服务是首要服务还是次要服务取决于服务的定义,首要服务表征一个给定的设备主要做些什么。正是通过这些服务,用户才了解到该设备是做什么的。次要服务是那些协助主要业务或其他次要服务的服务。
配置文件:是用例或应用的最终体现。配置文件是描述一个或多个设备的说明,每一个设备提供一个或多个服务,配置文件描述了如何发现和连接设备,从而为每台设备确定了拓展结构,配置文件还描述的客户端的行为,用于发现服务和服务特性。
这里可以用面向对象的思想来理解这些概念:

服务是服务器特有的,客户端不会有服务。
小结:
1.蓝牙4.0以前的叫传统蓝牙,功耗高。
2.蓝牙4.0后叫低功耗蓝牙,只搭载低功耗蓝牙的叫单模蓝牙BLE。
3.将传统蓝牙和低功耗蓝牙合并搭载在一个设备的叫双模蓝牙。
4.低功耗BLE分三部分:控制器、主机、应用。主机和控制器之间通过HCI主机控制器接口适配。
5.BLE广播信道道37、38、39,每个信道相隔24MHZ(为了防止一时刻同时被干扰),其余都是数据信道。
6.链路层状态机的状态,只有连接态使用了数据信道,其他的状态都是使用广播信道。
7.应用层:包含有特征、服务、配置文件三个概念。
8.主机、从机是链路层的概念,服务器、客户端是GATT通用属性配置文件层的概念、外围设备、中央设备是GAP通用访问配置文件的概念。
LE:Low Energy
ATT属性配置文件主要向应用提供特征、GATT访问配置文件主要向应用提供服务。
BLE广播、扫描和连接事件
广播事件 – 连接前
- 通用广播:常用。可以被扫描,接收到连接请求时可作为从设备进入一个状态机的连接态。
- 定向广播:快速连接指定设备。广播占满整个广播信道,数据净荷:广播者和发起者地址,发起者收到这个定向广播后,会立即发送连接请求。
- 不可连接广播:只向外广播数据,不能被连接。
- 可发现广播:不可连接,但可以响应扫描。
广播的设备在(接受连接请求)连接后成为从机,扫描的设备在(发起连接请求)连接后成为主机。
BLE 广播间隔:是指两次广播事件之间的最小时间间隔,一般取值范围在20ms-10.24S
之间,链路层会在每次广播时间期间产生一个随机广播延时时间(0ms-10ms)。
扫描事件 – 连接前
每次扫描,设备打开接收器去监听广播设备,这称为一个扫描事件,扫描事件有两个时
间参数扫描窗口和扫描间隔:
- 扫描窗口(scan window):一次扫描进行的时间宽度。
- 扫描间隔(scan interval):两个连续的扫描窗口的起始时间之间的时间差,包括扫描休息
的时间和扫描进行的时间。

连接事件 – 连接后
- 一个连接事件是指主设备和从设备之间相互发送数据包的过程。
- 所有的数据交换都是通过连接事件来完成。
- 每个事件发生在某个数据通道(0~36) 。
- 一个连接中,主从设备依靠连接事件交换数据。
- 设备连接后,无论有无数据收发,连接事件都在按照设置的连接参数周而复始的进行着,
直到一方停止响应。 - 主机与从机可在单次连接事件进行多次数据传输。

主机和从机通过连接事件发生数据交换,所以它们大部分时间在休息,只有发生连接事件的时候工作一会,这就是BLE能保证低功耗的一个原因。
连接参数 – 在主从机连接后协商
- 连接间隔:必须是 1.25ms 的倍数,范围是从最小值 6(7.5ms)到最大值 3200(4.0s)。间隔参数包括两个 16位的值,第一个为最小连接间隔,第二个为最大连接间隔。
- 从机延迟:这个参数描述了从机跳过连接事件的次数。。这使外围设备具有一定的灵活性,
如果它不具有任何数据传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些
积蓄力量。这一决定取决于外围设备。 - 监督超时:这是两个成功的连接事件之间间隔的最大值。如果超过这个时间还未出现成
功的连接事件,那么设备将会考虑失去连接,返回一个未连接状态。这个参数值使用
10ms 的步进(10ms 的倍数)。监督超时时间从最小 10(100ms)到最大 3200(32.0s)。
同时超时时间必须大于有效连接事件。
连接参数在主机和从机进入连接态后,主机向从机发送,从机可以接收或者拒绝主机的连接参数,从机拒绝后会断开连接。
连接间隔越短代表主从机处于工作的时间越频繁,这样数据传输的实时性越高,同时功耗也越高。再不严格要求实时性的情况下,增加连接间隔和设置从机延时可降低从机的功耗。
| 短连接间隔 | 高功耗,高数据吞吐量,发送等待时间短 |
|---|---|
| 长连接间隔 | 低功耗,低数据吞吐量,发送等待时间长 |
| 低或者0潜伏值 | 从机在没有数据发送的情况下高功耗,从机可以快速的收到主机的数据 |
| 高潜伏值 | 从机在没有数据发送的情况下可以低功耗;从机无法及时收到主机的数据,但主机能及时收到从机的数据 |
Profile、Service 、Characteristic 和UUID 解释
profile(配置文件)
profile是 Service 的集合,它是预定义的,并不是实际存在于设备中,所以在外围设备
的代码中,我们看不到 profile 的实现代码。Profile 分为标准的和自定义的,标准的 profile
是由 SIG 定义和发布的,如心率 profile、防丢 profile,自定义的 profile 是由开发者自己定
义,如SDK中的蓝牙串口透传的 profile。标准的 profile可以在 SIG的网站上查到,网址如
下:
https://www.bluetooth.com/specifications/gatt
一个profile文件可以包含一个或者多个服务,如心率profile包含了Heart Rate Service
(心率服务)和Device Information Service (设备信息服务),从 SIG网站上下载心率 profile,打开后可以看到心率传感器服务需求表格,由表中可以看到心率 profile规定必须包含Heart Rate Service和Device Information Service

M:强制要求的。
Service(服务)
服务是一组特征和它们公开的行为的集合,一个服务可以包含一个或多个特性。Service
也分为标准的和自定义的,标准的 Service 是由 SIG 定义和发布的,如心率 Service、防丢
Service,自定义的 Service 是由开发者自己定义,如 SDK 中的蓝牙串口透传的 Service。标
准的Service可以在SIG 的网站上查到(网址同 profile)
Characteristic(特征)
特征是具有特定意义的数值,如心率、温度值等等。BLE 主从机之间的数据传输实际
传输的就是特征值。
UUID
UUID(Universally Unique Identifier)是一个 128位的数字,用来标志属性的类型。Service
和Characteristic都是一种属性,都需要一个唯一的UUID 来标识。
- 既然UUID 是128 位的数字,那么为什么有 16位的UUID?
因为128位的UUID相当长,设备间为了识别数据的类型需要发送长达16字节的数据。
为了提高传输效率,蓝牙技术联盟(SIG)定义了一个“UUID 基数”,结合一个较短的 16位数
使用。二者仍然遵循通用唯一识别码的分配规则,只不过在设备间传输常用的 UUID时,只
发送较短的16位版本,接收方收到后补上蓝牙 UUID 基数即可。
profile(配置文件)是一个抽象的东西,在实际中并不存在,是多个服务的集合。
Service(服务)、Characteristic(特征)、UUID都是具体存在的东西。
小结:
1.主从机进入连接态之前有:广播间隔(20ms-10.24s)、扫描间隔(包含扫描窗口、休息时间)
2.扫描间隔的时间不能大于10.24s,扫描窗口等于扫描间隔代表主机一直在扫描,没有休息时间。
3.主从机进入连接态之后有:连接间隔(1.25ms的倍数,7.5-4.0s),主从机只有在连接事件时交换数据,其余时间休息。
3.profile是一个抽象的东西,Service和Characteristic都需要一个唯一的UUID来标识。

第二个说明符,











