-
2022-03-31 12:34:58
1.无限网络数据传输协议对比
比较流行的无线网络数据传输协议有WIFI™、Wireless USB、Bluetooth™、Cellular等
传统蓝牙、ZigBee以及IEEE 802.llb标准都是工作在2.4GHz频段的无限通信标准
数据传输协议
数据速率
数据传输距离/m
典型应用领域
传统蓝牙
1-3Mbps
2~10
无限手持设备、无线鼠标
ZigBee
20-250Kbps
10~100
无限传感器网络
IEEE 802.11b
1-11Mbps
30~100
无限Internet接入()
2.蓝牙4.0BLE
短距离无限网络分类
①无限局域网
②无线个域网
HR-WPLANS
——High-Rate WPLANS
802.15.3
MR-WPLANS
——Medium-Rate WPLANS
BlueTooth
LR-WPLANS——Low-Rate WPLANS
802.15.4
蓝牙4.0BLE涵盖了三种蓝牙技术:传统蓝牙、高速蓝牙和低功耗蓝牙。
蓝牙4.0BLE继承了蓝牙技术在无线连接上的固有优势,同时增加了高速蓝牙和低功耗蓝牙的特点;这三个规格可组合或者单独使用。
蓝牙4.0BLE规范的核心时低功耗技术——超低的运行功耗和待机功耗。
3.蓝牙4.0BLE的特点
(1)高可靠性:自适应跳频技术——减少和其他2.4GHz ISM频段无线电波的串扰。差错检测和校正、进行数据编解码、差错控制、数据加噪。
(2)低成本、低功耗:低功耗蓝牙支持两种部署方式——双模式和单模式;比传统蓝牙降低90%;仅使用3个广播通道(传统的采用16~32个频道),且每次广播时射频的开启时间为0.6~1.2ms(传统的是22.5ms);深度睡眠替换空闲状态。
(3)快速启动,瞬间连接:蓝牙4.0仅需3ms,蓝牙2.1需要6s。
(4)传输距离极大提高:60~100m(传统蓝牙2~10m)。
(5)高安全性:使用AES-128 CCM加密算法进行加密和认证。
4.蓝牙4.0BLE协议简介
规范中定义了GAP(Generic Access Profile)和GATT(Generic Attribute)两个基本配置文件
(1)协议栈中的GAP层负责设备访问模式和进程,包括设备发现、建立连接、终止连接、初始化安全特性和设备配置。
(2)协议栈中的GATT层用于已连接的蓝牙设备之间的数据通信。
更多相关内容 -
通信与网络中的蓝牙技术特点
2020-11-13 05:35:08蓝牙协议结构分为底层硬件模块、中间协议层和高端应用层等3个部分。蓝牙协议允许遵循该规范的所有 应用能够进行互连互通。为了实现互连互通,远程设备上对应的应用程序必须以同一类协议栈运行。每一 协议栈都使用... -
蓝牙协议分析
2021-11-03 14:59:19蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下: 从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护; 在通信实体内部,下层向上层提供...1. 前言
本文是蓝牙协议分析的第二篇文章,在“蓝牙协议分析(1)_基本概念”的基础上,从整体架构的角度,了解蓝牙协议的组成,以便加深对蓝牙的理解。
2. 协议层次
蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:
从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护;
在通信实体内部,下层向上层提供服务,上层是下层的用户;
在通信实体之间,协议仅针对每一层,实体之间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。
蓝牙协议也不例外,其协议层次如下:
从OSI(Open System Interconnection)模型的角度看,蓝牙是一个比较简单的协议,它仅仅提供了物理层(Physical Layer)和数据链路层(Data Link Layer )两个OSI层次。但由于蓝牙协议的特殊性、历史演化因素等原因,其协议层次又显的不简单,甚至晦涩难懂(如上面图片所示的Physical Link、Logical Transport等)。
蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)。
物理层,负责提供数据传输的物理通道(通常称为信道)。通常情况下,一个通信系统中存在几种不同类型的信道,如控制信道、数据信道、语音信道等等。
逻辑层,在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(也称作逻辑链路)。
L2CAP层,L2CAP是逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)的缩写,负责管理逻辑层提供的逻辑链路。基于该协议,不同Application可共享同一个逻辑链路。类似TCP/IP中端口(port)的概念。
APP层,理解蓝牙协议中的应用层,基于L2CAP提供的channel,实现各种各样的应用功能。Profile是蓝牙协议的特有概念,为了实现不同平台下的不同设备的互联互通,蓝牙协议不止规定了核心规范(称作Bluetooth core),也为各种不同的应用场景,定义了各种Application规范,这些应用层规范称作蓝牙profile。
在以上四个层次的基础上,蓝牙协议又将物理层和逻辑层划分了子层,分别是Physical Channel/Physical Links和Logical Transports/Logical Links,这一划分,相当使人崩溃,要多花费大量的脑细胞去理解它们,具体请参考下面的分析。
2.1 物理层
物理层负责提供数据传输的物理信道,蓝牙的物理层分为Physical Channel和Physical Links两个子层。我们先介绍Physical Channel。
2.1.1 Physical Channel(物理信道)
一个通信系统中通常存在多种类型的物理信道,蓝牙也不例外。另外,由“蓝牙协议分析(1)_基本概念”的介绍可知,蓝牙存在BR/EDR、LE和AMP三种技术,这三种技术在物理层的实现就有很大的差异,下面让我们一一介绍。
首先是相同点,BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 频段,频率范围是2.400-2.4835 GHz。
注1:不同国家和地区蓝牙的频率和信道分配情况是不同,本文所有的描述都以中国采用的“欧洲和美国”标准为准。
除了相同点,剩下的都是不同点了。
BR/EDR是传统的蓝牙技术,它这样定义物理信道:
1)ISM频率范围内被分成79个channel,每一个channel占用1M的带宽,在0 channel和78 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。
2)采用跳频技术(hopping),也就是说,某一个物理信道,并不是固定的占用79个channel中的某一个,而是以一定的规律在跳动(该规律在技术上叫做"伪随机码",就是"假"的随机码)。因此蓝牙的物理信道,也可以称作跳频信道(hopping channel)。
3)BR/EDR技术定义了5种物理信道(跳频信道),BR/EDR Basic Piconet Physical Channel、BR/EDR Adapted Piconet Physical Channel、BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel和BR/EDR Synchronization Scan Channel。
4)BR/EDR Inquiry Scan Physical Channel用于蓝牙设备的发现操作(discovery),即我们常用的搜索其它蓝牙设备(discover)以及被其它蓝牙设备搜索(discoverable)。
5)BR/EDR Page Scan Physical Channel用于蓝牙设备的连接操作(connect),即我们常用的连接其它蓝牙设备(connect)以及被其它蓝牙设备连接(connectable)。
6)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel主要用在处于连接状态的蓝牙设备之间的通信。它们的区别是,BR/EDR Adapted Piconet Physical Channel使用较少的RF跳频点。BR/EDR Basic Piconet Physical Channel使用全部79个跳频点,而BR/EDR Adapted Piconet Physical Channel是根据当前的信道情况使用79个跳频点中的子集,但是跳频数目也不能少于20个。这个主要是因为蓝牙使用ISM频段,当蓝牙和WIFI共存的时候,部分跳频点被WIFI设备占用而使得蓝牙设备在这些跳频点上的通信总是失败,因此,需要避过那些WIFI设备占用的频点。
7)BR/EDR Synchronization Scan Channel可用于无连接的广播通信,后续文章会详细介绍。
8)同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。
LE是为蓝牙低功耗而生的技术,为了实现低功耗的目标,其物理信道的定义与BR/EDR有些差异:
1)ISM频率范围内被分成40个channel,每一个channel占用2M的带宽,在0 channel和39 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。
2)LE技术定义了2种物理信道,LE Piconet channel和LE Advertisement Broadcast Channel。
3)LE Piconet Channel用在处于连接状态的蓝牙设备之间的通信,和BR/EDR一样,采用调频技术。和BR/EDR不一样的地方是,只会在40个频率channel中的37个上面跳频。
4)LE Advertisement Broadcast Channel用于在设备间进行无连接的广播通信,这些广播通信可用于蓝牙的设备的发现、连接(和BR/EDR类似)操作,也可用于无连接的数据传输。
8)和BR/EDR一样,同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。
AMP是为高速数据传输设计的技术,其物理层规范直接采用802.11(WIFI)的PHY规范,主要有如下特点:
AMP物理信道只有一种,即AMP Physical Channel,主要用于已连接设备之间的数据通信,和BR/EDR技术中的BR/EDR Adapted Piconet Physical Channel位于一个级别,可以互相切换使用。
2.1.2 Physical Links(物理链路)
由2.1.1的描述可知,蓝牙协议为BR/EDR、LE和AMP三种技术定义了8种类型的物理信道,包括:
AMP physical channel
BR/EDR Basic Piconet Physical Channel
BR/EDR Adapted Piconet Physical Channel
BR/EDR Page Scan Physical Channel
BR/EDR Inquiry Scan Physical Channel
BR/EDR Synchronization Scan ChannelLE Piconet Channel
LE Advertisement Broadcast Channel而物理链路,则是对这些物理信道(主要是BR/EDR技术中的Basic Piconet Physical Channel和Adapted Piconet Physical Channel)的进一步封装,其主要特征是(可参考2.5中的图片以辅助理解):
1)Physical Link是一个虚拟概念,不对应协议中任何的实体,数据包封包/解包的过程中不被体现。
2)AMP Physical Channel、LE Piconet Channel、LE Advertisement Broadcast Channel均有一个一一对应的Physical Link,分别是AMP Physical Link、LE Active Physical Link、LE Advertising Physical Channel。
3)BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel、BR/EDR Synchronization Scan Channel只在特定时间段使用,且无法控制任何属性,因此不需要再Physical Link中体现。
4)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel是BR/EDR技术中已连接设备之间进行数据通信的通道,且同一时刻只能根据应用场景选择一种channel进行数据传输。因此这两个channel被map到BR/EDR Active Physical Link、BR/EDR Parked Physical Link和BR/EDR Connectionless Slave Broadcast Physical Link三个物理链路上。
5)BR/EDR Active Physical Link和BR/EDR Parked Physical Link的抽象主要有两个方面的意义:
5-1)屏蔽底层的Basic/Adapted Piconet Physical Channel之间的差异,统一使用Physical Link取代。在需要的时候,可以通过上层的链路管理协议,指定使用哪一种physical channel(Basic or Adapted)。
5-2)可以通过Physical Link的抽象,控制Physical Channel的一些属性(如发射功率、收发周期等),以达到节省功耗的目的。而上面的层次(如逻辑层)不需要对这些动作知情。6)BR/EDR Active Physical Link定义了连接状态的蓝牙设备在链路处于active状态时的物理链路,该物理链路对应的设备的发射功率是可修改的。
7)BR/EDR Parked Physical Link定义了连接状态的蓝牙设备在链路处于parked状态时的物理链路。parked状态是一种特殊的连接状态,连接双方没有正在进行的数据传输,所有的链路消耗,都是为保持连接所做的事情。此时可以通过降低在物理信道上的收发频率而降低功耗。该物理链路和BR/EDR Active Physical Link使用相同的物理信道。
8)BR/EDR Connectionless Slave Broadcast Physical Link使用BR/EDR Adapted Piconet Physical Channel,用于一点到多点的广播通信。
9)由上面的描述可知,物理链路这一层抽象,实在是可有可无,希望大家不要纠结,知道怎么回事即可。
2.2 逻辑层
逻辑层的主要功能,是在已连接(LE Advertisement Broadcast可以看做一类特殊的连接)的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:
一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等。
这里的车道(逻辑信道),从物理角度看,并没有什么分别,只是为了方便交通(数据传输),人为的抽象出来的。和车道类似,蓝牙逻辑信道的划分依据是传输类型,主要包括下面3类(即Logical Link):
1)用于管理底层物理链路的控制类传输,包括AMP-C、ACL-C、PSB-C、LE-C、ADVB-C。
2)传输用户数据的用户类传输,包括AMP-U、ACL-U、PSB-U、LE-U、ADVB-U。
3)其它比较特殊的传输类型,包括流式传输(stream)、PBD(Profile Broadcast Data)。
以上每种Logic Link都会在下层对应一个Logical Transport,这些Logical Transport具有一些属性值,如流控、应答/重传机制等。如下:
AMP ACL(Asynchronous Connection-Oriented Link),基于AMP技术的、面前连接的、异步传输链路,为AMP-U提供服务。
BR/EDR ACL,基于BR/EDR技术的ACL链路,为ACL-C、ACL-U提供服务。
SCO/eSCO(Synchronous Connection-Oriented/Extended SCO),基于BR/EDR技术的、面向连接的、同步传输链路,为stream类型的Logical Link提供服务。
ASB(Active Slave Broadcast)、PSB(Parked Slave Broadcast),基于BR/EDR技术的、面向连接的广播传输链路,为ACL-U、PSB-U、PSB-C提供服务。
CSB(Connectionless Slave Broadcast),基于BR/EDR技术的、无连接的广播链路,为PBD提供服务。
LE ACL,基于LE技术的、面前连接的、异步传输链路,为LE-U、LE-C提供服务。
ADVB(Advertising Broadcast),基于LE技术的、广告/广播链路,为ADVB-U、ADVB-C提供服务。
注2:AMP-C没有对应的Logical Transport,而是直接控制AMP Physical Link完成所需功能。
注3:蓝牙逻辑层的抽象也是让人醉了!还是那句话,不要逼自己去理解一个疯子的行为,不然自己也会疯的。
2.3 L2CAP Channels
L2CAP是Logical Link Control and Adaptation Protocol(逻辑链路控制和适配协议)的缩写,蓝牙协议到这个层次的时候,就清爽多了:
对下,它在用户类XXX-U Logical Link的基础上,抽象出和具体技术无关的数据传输通道(包括单播和广播两类),至此用户就不再需要关心繁杂的蓝牙技术细节。
对上,它以L2CAP channel endpoints的概念(类似TCP/IP中的端口),为具体的应用程序(profile)提供独立的数据传输通道(当然,也是一个逻辑通道)。
2.4 Profiles
profile是蓝牙Application的代指,也可以翻译为服务,为了实现不同平台下的不同设备的互联互通,蓝牙协议为各种可能的、有通用意义的应用场景,都制定的了规范,如SPP、HSP、HFP、FTP、IPv6/6LoWPAN等等。
Profiles基于L2CAP提供的L2CAP channel endpoints实现,在它们对应的层次上进行数据通信,以完成所需功能。有关蓝牙profile的介绍,会在后续文章中陆续给出,这里就不再详细说明了。
2.5 总结
下面图片包含上面各个层次(除了APP layer)中涉及到的一些实体、概念以及相互关系,供大家参考。
摘录自:Core_v4.2.pdf---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->3 DATA TRANSPORT ARCHITECTURE---->3.2 TRANSPORT ARCHITECTURE ENTITIES
3. 蓝牙核心框架
蓝牙规范有两类:一类是蓝牙核心规范,由Bluetooth Core Specification定义,囊括到L2CAP层,以及相关的核心profile;另一类是蓝牙Application规范,包含了各种各样的profile规范(具体可参考“Specifications | Bluetooth® Technology Website”中的列表)。
蓝牙核心规范所定义的框架如下:
正在上传…重新上传取消摘录自:Core_v4.2.pdf ---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->2 CORE SYSTEM ARCHITECTURE
经过第2章协议层次的介绍,蓝牙核心框架已经比较容易理解了,这里对层次中各个模块做一个简单的说明,更为详细的分析,请参考后续的文章。
1)BR/EDR Radio & LE Radio & AMP PHY
蓝牙RF层(物理层),包括BR/EDR、LE以及AMP三种。负责在物理channel上收发蓝牙packet。
对BR/EDR和LE RF来说,还会接收来自Baseband的控制命令来控制RF频率的选择和timing。
AMP PHY使用802.11(WIFI)的规范,本文不再详细介绍,后续有关AMP的内容,也不过多涉及。
2)Link Controller & Baseband resource management
Link Controller和Baseband resource management组成了蓝牙的基带(baseband)。
Link Controller负责链路控制,主要是根据当前物理channel的参数、逻辑channel的参数、逻辑transport的参数将数据payload组装成bluetooth packet。另外,通过Link Control Protocol(对LE来说是LL Layer Protocol),可以实现流控、ack、重传等机制。
Baseband resource management,主要用于管理RF资源。
3)Link Manager
Link Manager主要负责创建、修改、释放蓝牙逻辑连接(Logical Link),同时也负责维护蓝牙设备之间物理连接(Physical Link)的参数。它的功能主要是通过Link Management Protocol(LMP,for BR/EDR)和Link Layer Protocol(LL,for LE)完成。
4)Device Manager
Device Manager主要负责控制蓝牙设备的通用行为(蓝牙数据传输除外的行为),主要是:
搜索附近的蓝牙设备
连接到其他的蓝牙设备
使得本地的蓝牙设备connectable和discoverable
控制本地蓝牙设备的属性(例如本地蓝牙设备的名字、link key等)
5)HCI(Host Controller Interface)
我们在“蓝牙协议分析(1)_基本概念”介绍过,蓝牙系统分为Bluetooth Controller和Bluetooth Host两个大的block。它们之间通过HCI接口以HCI协议进行通信。
6)L2CAP
L2CAP位于Bluetooth Host中,包括两个子模块:
Channel Manager主要负责创建、管理、释放L2CAP channel。
L2CAP Resource Manager负责统一管理、调度L2CAP channel上传递的PDU(Packet Data Unit),以确保那些高QoS的packet可以获得对物理信道的控制权。
7)SMP(Security Manager Protocol)
SMP是一个点对点的协议,基于专用的L2CAP channel,用于生成加密(encryption)和识别(identity)用的密匙(keys)。
8)SDP(Service Discover Protocol)
SDP也是一个点对点的协议,基于专用的L2CAP channel,用于发现其它蓝牙设备能提供哪些profile以及这些profile有何特性。在了解清楚了其他蓝牙设备的profile以及特性之后,本蓝牙设备可以发起对自己感兴趣的蓝牙profile的连接动作。
9)AMP Manager
基于L2CAP channel,和对端的AMP manager交互,用于发现对方是否具备AMP功能,以及收集用于建立AMP物理链路的信息。
10)GAP(Generic Access Profile)
GAP是一个基础的蓝牙profile,用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。
GAP 是所有其它应用模型的基础,它定义了在 Bluetooth 设备间建立基带链路的通用方法。还定义了一些通用的操作,这些操作可供引用 GAP 的应用模型以及实施多个应用模型的设备使用。GAP 确保了两个 蓝牙设备(不管制造商和应用程序)可以通过 Bluetooth 技术交换信息,以发现彼此支持的应用程序。
-
蓝牙核心技术介绍(蓝牙协议、架构、硬件和软件笔记)
2019-07-15 11:16:00原文地址:http://www.cnblogs.com/zjutlitao/p/4742428.html 声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于...原文地址:http://www.cnblogs.com/zjutlitao/p/4742428.html
声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。由于有些文章只做参考或统计不足,如涉及版权请在下面留言~
主要参考资料的来源:xubin341719[下面是该前辈的BT系列文章]
下载连接:Bluetooth PROFILE SPECIFICATIONS (基本涵盖所有蓝牙协议)、buletooth core 2.1-4.0 SPECIFICATION(三蓝牙版本的核心协议v2.1\v3.0\v4.0)、蓝牙核心技术与应用 马建仓 版(蓝牙协议相关初学者必读,开发者参考)蓝牙核心技术概述(一):蓝牙概述
蓝牙核心技术概述(二):蓝牙使用场景
蓝牙核心技术概述(三): 蓝牙协议规范(射频、基带链路控制、链路管理)
蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)
蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)有道笔记分享链接:http://note.youdao.com/share/?id=950d00cefa9b7fd3c559eec349805b24&type=note
下面是摘抄笔记内容:蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。
Bluetooth的系统构成
1、无线射频单元(Radio):负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线。
2、基带或链路控制单元(LinkController):进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
3、链路管理单元(LinkManager):负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作。
4、蓝牙软件协议实现:如上图紫色部分,这个后面我们做详细说明。低耗电蓝牙相关规范(二)蓝牙协议组成2.1 蓝牙协议架构蓝牙协议体系中的协议按SIG的关注程度分为四层:
1.核心协议:BaseBand、LMP、L2CAP、SDP;
2.电缆替代协议:RFCOMM;
3.电话传送控制协议:TCS-Binary、AT命令集;
4.选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。
蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。
蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。
蓝牙应用程序活动图,如下:
2.1.1 串口仿真RFCOMM介绍
找到服务,RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的,就是SDP,服务发现协议
2.2 蓝牙profile
2.2.1 蓝牙profile概述从3.0版本开始(据说2.1也是支持的?TBD),蓝牙才开始支持BluetoothProfile。BluetoothProfile是蓝牙设备间数据通信的无线接口规范。想要使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件,配置文件定义了可能的应用.
蓝牙配置文件表达了一般行为,蓝牙设备可以通过这些行为与其他设备进行通信.蓝牙技术定义了广泛的配置文件,描述了许多不同类型的使用安全.按蓝牙规格中提供的指导,开发商可创建应用程序以用来与其他符合蓝牙规格的设备协同工作.在最低限度下,各配置文件规格应包含下列主题的相关信息.
① 与其他配置文件的相关性
② 建议的用户界面格式
③ 配置文件使用的蓝牙协议堆栈的特定部分.为执行其任务, 每个配置文件都使用堆栈各层上的特定选项和参数.若需要,也可包括必需的服务记录概要。ProfilesAPI层则分别对Audio、Data、Control等提供了不同的模块。目前已规范有四大类、十三种协议规格。Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。 Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者应用层协议。❤ 常用的profile介绍请参考“蓝牙Profile的概念和常见种类”,几种种最基本的配置文件为:1.通用访问配置文件(Generic Access Profile, GAP)GAP是所有其他配置文件的基础,它定义了在蓝牙设备间建立基带链路的通用方法.除此之外,GAP还定义了下列内容:① 必须在所有蓝牙设备中实施的功能
② 发现和链接设备的通用步骤
③ 基本用户界面术语.GAP确保了应用程序和设备间的高度互操作性,还允许开发人员利用现有的定义更加容易地定义新的配置文件.GAP处理未连接的两个设备间的发现和建立连接过程.此配置文件定义了一些通用的操作,这些操作可供引用GAP的配置文件,以及实施多个配置文件的设备使用.GAP确保了两个蓝牙设备可通过蓝牙技术交换信息,以发现彼此支持的应用程序.不符合任何其他蓝牙配置文件的蓝牙设备必须与GAP符合以确保基本的互操作性和共存.2.服务发现应用配置文件(Service Discovery Application Profile, SDAP)
SDAP描述了应用程序如何使用SDP发现远程设备上的服务.由于GAP的要求,任何蓝牙设备都应能够连接至其他蓝牙设备.基于此,SDAP要求任何应用程序都应当能够发现它要连接的其他蓝牙设备上的可用服务.此配置文件可承担搜索已知和特定服务及一般的任务.SDAP涉及了称为“服务发现用户应用程序”的一个应用程序,这是蓝牙设备查找服务所必需的.此应用程序可与向/从其他蓝牙设备发送/接收服务查询的SDP相接.SDAP依赖于GAP,并可以重新使用部分GAP.3.串行端口配置文件(Serial Port Profile, SPP)
SPP定义了如何设置虚拟串行端口及如何连接两个蓝牙设备.SPP基于ETSI TS 07.10规格,使用RFCOMM协议提供串行商品仿真.SPP提供了以无线方式替代现有的RS-232串行通信应用程序和控制信号的方法.SPP为DUN,FAX,HSP和LAN配置文件提供了基础.此配置文件可以支持最高128kb/s的数据率.SPP依赖于GAP.4.通用对象交换配置文件(Generic Object Exchange Profile, GOEP)
GOEP可用于将对象从一个设备传输到另一个设备.对象可以是任意的.如:图片,文档,名片等.此配置文件定义了两个角色:提供拉提或推送对象位置的服务器及启动操作的客户端.使用GOEP的应用程序假定链路和信道已按GAP的定义建立.GOEP依赖于串行端口配置文件.
GOEP为使用OBEX协议的其他配置文件提供了通用蓝图,并为设备定义了客户端和服务器角色.对于所有的OBEX事务.GOEP规定应由客户端启动所有事务.但是此配置文件并没有描述应用程序就如何定义要交换的对象或如何实施交换.这些细节留给属于GOEP的配置文件.即OPP,FTP和SYNC去完成.通常使用此配置文件的蓝牙设备为笔记本电脑,PDA,手机及智能电话.注意:蓝牙1.1版本规范所有蓝牙设备的最小实现必须支持通用访问配置文件,服务发现应用配置文件和串行端口配置文件.在两台电脑或者Labtop之间就可以建立这种连接,如下图所示:SPP是基于RFCOMM的,spp 协议处于rfcomm的上层,spp的应用需走rfcomm层。如果你使用RFCOMM能够实现,那么也就不需要使用SPP,而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等。不过,还是推荐采用SPP来做,兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFP,HSP,SPP,OPP等诸多具体应用profile的原因。
2.2.2 蓝牙profile框架每个attribute属性被UUID(通用唯一标识符)唯一标识 ,UUID是标准128-bit格式的ID用来唯一标识信息。attributes 被 ATT 格式化characteristics和services形式进行传送。
特征(Characteristics)— 一个characteristics包含一个单独的value值和0 –n个用来描述characteristic 值(value)的descriptors。一个characteristics可以被认为是一种类型的,类似于一个类。
描述符(descriptor)—descriptor是被定义的attributes,用来描述一个characteristic的值。例如,一个descriptor可以指定一个人类可读的描述中,在可接受的范围里characteristic值,或者是测量单位,用来明确characteristic的值。
服务(service)—service是characteristic的集合。例如,你可以有一个所谓的“Heart RateMonitor”service,其中包括characteristic,如“heart rate measurement ”。你可以在 bluetooth.org找到关于一系列基于GATT的profile和service。
如上图所示:蓝牙设备可以包括多个Profile,一个Profile中有多个Service,一个Service中有多个Characteristic,一个Characteristic中包括一个value和多个Descriptor。
2.3 蓝牙4.0和4.1♪ 蓝牙4.0实际是个三位一体的蓝牙技术,它将传统蓝牙、低功耗蓝牙和高速蓝牙技术融合在一起,这三个规格可以组合或者单独使用。也就是说 BLE是蓝牙4.0增加的,之前没有?(TBD)蓝牙4.0专门面向对成本和功耗都有较高要求的无线方案,其主打特性就是省电、省电、省电。极低的运行和待机功耗使得一粒纽扣电池甚至可连续工作一年之久。它有低功耗、经典、高速三种协议模式。其中:高速蓝牙主攻数据交换与传输;经典蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙以不需占用太多带宽的设备连接为主。这三种协议规范能够互相组合搭配,从而适应更广泛的应用模式。正因为有了三种可以互相组合搭配的协议,蓝牙4.0因此成为唯一一个综合协议规范。它有着极低的运行和待机功耗。此外,低成本和跨厂商互操作性,3毫秒低延迟、AES-128加密等诸多特色,可以用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。♪ 蓝牙4.1主打IOT(Internet Of Things全联网),最新的蓝牙4.1标准是个很有前途的技术,其智能、低功耗、高传输速度、连接简单的特性将适合用在许多新兴设备上。蓝牙4.1设备可以同时作为发射方和接受方,并且可以连接到多个设备上。举个例子,智能手表可以作为发射方向手机发射身体健康指数,同时作为接受方连接到蓝牙耳机、手环或其他设备上。蓝牙4.1使得批量数据可以以更高的速率传输,当然这并不意味着可以用蓝牙高速传输流媒体视频,这一改进的主要针对的还是刚刚兴起的可穿戴设备。例如已经比较常见的健康手环,其发送出的数据流并不大,通过蓝牙4.1能够更快速地将跑步、游泳、骑车过程中收集到。因为新标准加入了对IPv6专用通道联机的支持,通过IPv6连接到网络,实现与Wi-Fi相同的功能,解决可穿戴设备上网不易的问题。
蓝牙4.0和蓝牙4.1的比较2.3.1 蓝牙4.0低功耗(BLE)① 低功耗蓝牙Bluetooth Low Energy(BLE)是蓝牙4.0增加的。(?TBD) ,苹果系列都支持4.0.
② Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics。与传统蓝牙( ClassicBluetooth)不同,蓝牙低功耗(BLE)的目的是提供更显著的低功耗。这使得Android应用程序可以和具有低功耗的要求BLE设备,如接近传感器,心脏速率监视器,健身设备等进行通信。
③ BLE低功耗蓝牙软件有2个主要组成: OSAL操作系统抽象层和 HAL硬件抽象层,多个Task任务和事件在OSAL管理下工作,而每个任务和事件又包括3个组成:BLE 协议栈,profiles和应用程序。BLE蓝牙协议栈结构附图1 BLE蓝牙协议栈结构图分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有profile(姑且称为剧本吧,用来定义设备或组件的角色)和应用都建构在GAP或GATT之上。下面由结构图的底层组件开始介绍。附图 2 BLE低功耗蓝牙系统架构图,图中的Task用附图1BLE蓝牙协议栈结构图来描述通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被称为“属性(attributes)”的数据片。目前所有的低功耗应用 profile都是基于GATT。
蓝牙SIG定义了许多profile用于低功耗设备。Profile(配置文件)是一个规范,规范了设备如何工作在一个特定的应用场景。注意:一个设备可以实现多个profile。例如,一个设备可以包含一个心脏监测仪和电池电平检测器。
主从机连接建立过程:
2.3.2 蓝牙4.0(BLE)主从通信透传模块低功耗蓝牙模块主透传协议是针对低功耗蓝牙模块从透传协议设计的,通过本协议模块可替代手机设备与从透传协议模块连接,实现透传功能或直驱控制功能。此协议模块可用作从透传协议模块开发过程中的辅助工具。
BLE主透传协议模块(以下简称MTTM)可以工作在透传模式(TTM)或指令模式(CM)。
MTTM上电启动后,处于待机模式(SBM),此时处于空闲状态,无睡眠,需要用户通过AT指令控制模块连接从设备。在成功与从设备建立链接后,MTTM会自动查找从设备的透传通道,如果从设备属于BLE从透传协议模块(以下简称STTM),MTTM默认进入透传模式,否则默认进入指令模式。
透传模式下,用户CPU可以通过模块的通用串口与STTM进行双向通讯。从MTTM串口输入的数据将转发到STTM,并从STTM的串口输出;从STTM输入的数据将转发到MTTM,并从MTTM的串口输出,从而实现透明传输功能,用户数据的具体含义由上层应用程序自行定义。
透传中数据的格式也是profile,或蓝牙标准profile或自定义simple profile。基本结构依然是:
1、profileprofile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。2、serviceservice可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据3、characteristiccharacteristic特征值,ble主从机的通信均是通过characteristic来实现,可以 理解为一个标签,通过这个标签可以获取或者写入想要的内容。4、UUIDUUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。实际产品中, 每个蓝牙4.0的设备都是通过服务和特征来展示自己的,服务和特征都是用UUID来唯一标识的。一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征。特征是与外界交互的最小单位。 蓝牙设备硬件厂商通常都会提供他们的设备里面各个服务(service)和特征(characteristics)的功能,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等。比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来与收发数据等。?4.0中profile的存在是干嘛用的呢,只是一种组织形式存在?服务和特征都是用UUID来唯一标识的,UUID的概念如果不清楚请自行google,国际蓝牙组织为一些很典型的设备(比如测量心跳和血压的设备)规定了标准的service UUID(特征的UUID比较多,这里就不列举了)
(三)Android Bluetooth 架构
1、面向库的架构视图2、面向进程的架构视图iOS 有两个框架支持蓝牙与外设连接。
一个是 ExternalAccessory。从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Accessory需要拿到苹果公司的MFI认证。
另一个框架则是本文要介绍的CoreBluetooth,在蓝牙4.0出来之后(注意,硬件上要4s以上,系统要ios6以上才能支持4.0),苹果开放了BLE通道,专门用于与BLE设备通讯(因为它的API都是基于BLE的)。这个不需要MFI,并且现在很多蓝牙设备都支持4.0,所以也是在IOS比较推荐的一种开发方法。现CoreBluetooth在的开发几乎全部基于该框架,本节只介绍CoreBluetooth。
1,CoreBluetooth介绍
CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心。对应他们分别有一组相关的API和类,如下图所示:
如果你要编程的设备是手机的central,那么你大部分用到peripheral API。反之亦然,设备是peripheral,iphone手机是central,所以将大部分使用central API。使用peripheral编程的例子也有很多,比如像用一个ipad和一个iphone通讯,ipad可以认为是central,iphone端是peripheral,这种情况下在iphone端就要使用上图右边部分的类来开发了。
作为一个中心(central)要实现完整的通讯,一般要经过这样几个步骤:
(1)建立中心角色—
(2)扫描外设(discover)(通过接收从设备广播来扫描、发现设备,获得peripheral ID)—
a, 如果数据中已经和某些蓝牙设备绑定,可以使用BluetoothAdapter.getBondedDevices();方法获得已经绑定的蓝牙设备列表。通过指定特定的peripheral的UUID,central只会discover这个特定的设备。
b, 搜索周围的蓝牙设备受用BluetoothAdapter.startDiscovery()方法
c, 搜索到的蓝牙设备都是通过广播返回,so..。需要注册广播接收器来获得已经搜索到的蓝牙设备(3)连接外设(connect)(根据peripheral ID连接指定的外设)—
(4)扫描外设中的服务和特征(discover)(一个设备里的服务和特征往往比较多,一般会在发现服务和特征的回调里通过service、characteristic UUID去匹配我们关心那些)—
(5)与外设做数据交互(explore and interact)—
(6)断开连接(disconnect)。2, 设备ID描述DID
每个与苹果设备兼容的蓝牙接入都必须:支持蓝牙设备ID描述,1.3版本或者更高;使用蓝牙SIG分配的Assigned Numbers文档中的公司标识作为他的Vendor ID值,也就是VID,如果生产商没有蓝牙SIG公司标识,那么蓝牙HID描述接入可能会使用USB Implementers Forum分配的VID;使用他的VID值来标识最终的产品生产商;使用版本值来唯一标识软件的版本;使用ProductID值唯一标识产品。Device ID描述使得苹果产品能够识别远程的蓝牙接入,该信息可以用来在与远程接入交互的时候连接蓝牙描述间的交替互操作。因此Device ID中的信息记录非常重要。
理想情况下,这两个设备应该有不同的产品ID。但是,当他们拥有完全相同的硬件、软件和特性的时候拥有相同的ProductID也是可以允许的。如果他们有任何的不同,就都应该有不同的Product ID。
3,IOS的蓝牙低功耗
蓝牙4.0标准引入了蓝牙低功耗,一种针对有限电池资源的蓝牙接入的无线技术。如果支持蓝牙低功耗的话,接入点需要支持下面的这些特性。(这里更多的是蓝牙芯片商要做的事情)
角色
蓝牙接入需要实现蓝牙4.0标准中定义的外围角色
广告通道
蓝牙接入需要在所有三个广告通道中针对每个广告事件进行广告
广告PDU
蓝牙接入需要使用如下广告PDU中的一个:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND。其中ADV_DIRECT_IND不推荐使用。
广告数据
由蓝牙接入发送的广告信息应该至少包含蓝牙4.0标准中包含的如下信息:Flags;TX Power Level;Local Name;Services。如果需要降低电量消耗或者并不是所有的广告数据都适合放入到广告PDU中的时候,接入点可能将Local Name和TX Power Level数据方知道SCAN_RSP PDU中。需要注意的是根据它的状态,苹果产品可能不会总是执行激活扫描。主要的服务应该总是放在广告PDU中进行广告。次要的服务不应该进行广告。对于接入点不重要的服务信息可能会因为广告PDU中的空间不足而被忽略。广告数据和SCAN_RSP PDU中的扫描响应数据应该遵循蓝牙4.0标准中的格式。
广告间隔
蓝牙接入的广告间隔应该慎重考虑,因为他会影响到发现和连接的性能。对于低功耗的接入,电池资源也应该被考虑在内。为了能够被苹果产品发现,蓝牙接入应该首先使用推荐的广告间隔20ms,并持续至少30秒。如果在这30秒内没有被发现,那么接入点可能会选择节省电池电量然后增加广告间隔,苹果推荐使用如下依次延长的事件间隔来发现蓝牙接入点:645 ms;768 ms;961 ms;1065 ms;1294 ms
连接参数
蓝牙接入负责用来LE连接的连接参数。接入点需要请求合适的连接参数来在合适的时候发送一个L2CAP连接参数跟新请求。如果他没有符合如下规则,那么连接参数请求可能会被拒绝:Interval Max * (Slave Latency + 1) ≤ 2 seconds;Interval Min ≥ 20 ms;Interval Min + 20 ms ≤ Interval Max;Slave Latency ≤ 4;connSupervisionTimeout ≤ 6 seconds以及Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout。苹果设备不会读取或者使用Peripheral Preferred Connection Parameters特性中的参数。
隐私
蓝牙接入应该在任何情况下都能够满足Resovable Private Address。因为私隐方面的考虑,苹果设备将会使用蓝牙4.0标准中定义的随机设备地址。
授权
蓝牙接入不需要请求特殊的授权,如配对、认证或加密等来发现服务和特性。只有在获取特性值或者描述值的时候可能会需要特殊的授权。9
配对
蓝牙接入不应该请求配对。如果处于安全考虑,接入点需要与Central建立绑定关系,外围可以使用Insufficient Authentication错误码在必要的时候拒绝ATT请求。因此苹果设备可能会需要按照既定的安流程程来执行过程。配对可能会需要基于苹果产品的用户认证。
服务
通用接入描述服务:蓝牙接入应该实现按照蓝牙标准4.0中的Device Name特性
通用属性描述服务:只有当接入有能力在生命周期内更改他的服务的时候,该接入点才需要实现Service Changed特性。苹果产品可以使用Service Changed服务特性来决定它是否可以使用之前读取的或者缓存的来自设备的信息。
设备信息服务:蓝牙接入应该实现设备信息服务。服务的UUID不应该包含在广告数据当中。如下的特性需要被支持:Manufacturer Name String;Model Number String;Firmware Revision String;Software Revision String
4,IOS APP开发 的蓝牙操纵API
手机APP要想获得蓝牙设备的一些额外的信息如电量或者操作蓝牙设备,必须通过IOS API。那么IOS底层必然有某种方式来与蓝牙设备交互。 那么电量通过什么来读写呢?自定义 service characteristic?
任何免提的蓝牙耳机都可以在iOS设备的状态栏中显示一个用来标识他电池电量的图标。这个特性被所有的iOS设备所支持,包括iPhone、iPod和iPad。耳机的蓝牙知识通过两个iOS蓝牙HFP AT命令:HFP Command AT+XAPL
HFP命令AT+XAPL
- 描述:允许通过耳机自定义AT命令
- 发起者:耳机
- 格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
- 参数:
- vendorID: 标识生产商的vendor ID的十六进制表示,但是没有0x前缀
- productID: 标识生产生的product ID的十六进制表示,但是没有0x前缀
- version: 软件的版本
- features: 用10进制标识的位标识:
- 1 = 耳机支持电池电量报告
- 2 = 耳机暂停或者正在充电
- 其他值保留
- 例子: AT+XAPL=ABCD-1234-0100,3
- 响应: +XAPL=iPhone,[features]
HFP命令AT+IPHONEACCEV
- 描述:报告耳机的状态变更
- 发起者:耳机
- 格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],...
- 参数:
- Number of key/value pairs : 接下来参数的数量
- key: 被报告状态变化的类型
- 1 = 电量等级
- 2 = 暂停状态
- val: 更改的值
- Battery events:0-9之间数字的字符串 A string value between '0' and '9'.
- Dock state: 0 = undocked, 1 = docked.
- Example: AT+IPHONEACCEV=1,1,3
(五)硬件接口
一般蓝牙芯片通过UART、USB、SDIO、I2S、PcCard和主控芯片通信。如下图所示,通过UART和主控芯片通信。
-
BLE低功耗蓝牙协议栈
2022-03-14 17:52:42BLE低功耗蓝牙协议栈 (1)蓝牙核心协议(Bluetooth Core) (2)蓝牙应用层协议(Bluetooth Application) (3)BLE低功耗蓝牙核心协议层详解(Bluetooth Core) ① 物理层(PHY) ② 链路层(LL) ③ 主机...目录
(2)蓝牙应用层协议(Bluetooth Application)
(3)BLE低功耗蓝牙核心协议层详解(Bluetooth Core)
Profile
Service
Characteristic
UUID
经典蓝牙(BT):一般用于数据量比较大的传输,如:语音、音乐等较高数据量的传输。
低功耗蓝牙模块(BLE):最大的特点就是成本和功耗的降低,可应用于实时性要求较高的产品当中,比如:智能家居类(蓝牙锁、蓝牙灯)、传感设备的数据发送(血压计、温度传感器)、消费类电子(电子烟、遥控玩具)等。
BT和BLE两者物理层调制解调方式是不一样的,所以BLE设备和BT设备两者之间是不能相互通信的,选型的时候千万不要搞混,如果主设备是BLE设备,从设备也必须是BLE设备;同样,BT的从设备也只能和BT的主设备进行通信。
不过市场上还有一种双模蓝牙设备,即同时支持BLE和BT,比如我们天天用到的手机,手机可以和BT设备通信,也可以和BLE设备通信,但这不代表BLE设备可以和BT设备通信。其实是手机使用了分时机制来达到同时和BLE设备以及BT设备通信的目的,即手机让双模蓝牙芯片不断地在BLE模式和BT模式之间进行切换,以同时支持BLE设备和BT设备。
一. BLE低功耗蓝牙协议栈
BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包。也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。
蓝牙协议规定了两个层次的协议:
(1)蓝牙核心协议(Bluetooth Core)
蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制。
蓝牙核心协议又包含BLE Controller和BLE Host两部分。
- Controller:负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);
- Host:负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。
(2)蓝牙应用层协议(Bluetooth Application)
蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,百花齐放,定义出各种各样的策略,如FTP、文件传输、局域网等等。
(3)BLE低功耗蓝牙核心协议层详解(Bluetooth Core)
① 物理层(PHY)
PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
② 链路层(LL)
LL层是整个BLE协议栈的核心。
LL层要做的事情非常多,比如具体选择哪程度 个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。
LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。
③ 主机控制接口层(HCI)
HCL是可选的,主要用于两个芯片实现BLE协议栈的场合,用来规范两者之间的通信协议、通信命令等。
④ 通用访问配置文件层(GAP)
主要用来进行广播、扫描和发起连接等。
⑤ 逻辑链路控制及自适应协议层(L2CAP)
L2CAP对LL进行了一次简单封装。LL层只关心传输的数据本身,L2CAP就要区分加密通道还是普通通道,同时还要对连接间隔进行管理。
⑥ 安全管理层(SM)
用来管理BLE连接的加密和安全的。
⑦ 属性协议层(ATT)
简单来说,ATT层用来定义用户命令及命令操作的数据,比如读/写某个数据。
开发者接触最多的就是ATT。BLE引入了attribute(属性)概念,用来描述一条条数据,attribute除了定义数据,还定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
⑧ 通用属性配置文件层(GATT)
用来规范attribute中的数据内容,并用group(分组)的概念进行分类管理。
(4)ATT协议层中的属性(attribute)
ATT(Attribute Protocol)属性层是GATT和GAP的基础,它定义了BLE协议栈上层的数据结构和组织方式。
属性(Attribute)概念是ATT层的核心,ATT层定义了属性的内容,规定了访问属性的方法和权限。以编程的眼光来看,属性是一个数据结构,它包括了数据类型和数据值,就如同C语言结构体的概念,开发者可以设计独特的结构,来描述外部世界实体。
属性包括三种类型:服务项(service)、特征值(characteristic)和描述符。三者之间存在树状包含关系:服务项包含一个或多个特征值,特征值包含一个或多个描述符,多个服务项组织在一起,构成属性规范(Attribute Profile)。
对于常用的属性规范,比如体重计、心率计,SIG(蓝牙技术联盟)做了具体定义,这样的话,只要BLE主从设备均遵守某个Profile来进行设计,那么二者就能够优雅的通信。
(4.1)属性的组成(数据结构)
属性主要由以下四部分组成:
属性句柄(Attribute Handler):
犹如指向属性实体的指针,可通过属性句柄来访问该属性。它是一个2字节长度的十六进制码,起始于0x0001,系统初始化时各个属性的句柄逐步加1,最大不超过0xFFFF。
属性类型(Attribute Type):
用以区分当前属性是服务项或是特征值等,用UUID来表示。
UUID(universally unique identifier,通用唯一识别码)是一个软件构建标准,并非BLE独有的概念,一个合法的UUID,一定是随机的、全球唯一的,不应该出现两个相同的UUID。
BLE的属性类型是有限的,有四个大类:
- Primary Service(首要服务项)
- Secondary Service(次要服务项)
- Include(包含服务项)
- Characteristic(特征值)
这些属性类型分别对应了指定的UUID,BLE对这些UUID与属性类型的映射关系做了规定:
- 0x1800 – 0x26FF :服务项类型
- 0x2700 – 0x27FF :单位
- 0x2800 – 0x28FF :属性类型
- 0x2900 – 0x29FF :描述符类型
- 0x2A00 – 0x7FFF :特征值类型
假如UUID=0x1800,就表示它是一个首要服务项。
标准的UUID是一串16字节十六进制字符串,但对于一些常用的UUID,为了减少传输的数据量,BLE协议做了一个转换约定,给定一个固定的16字节模板,只设置2个字节为变化量,其他为常量,2字节的UUID在系统内部会被替换,进而转换成标准的16字节UUID。
UUID模板为:
0000XXXX-0000-1000-8000-00805F9B34FB
其中 xxxx 就是变化位,其他为固定位。
如:UUID=0x2A00在系统内部会转换成00002A00-0000-1000-8000-00805F9B34FB。
属性值(Attribute Value):
用于存放数据。
如果该属性是服务项类型或者是特征值声明类型,那么它的属性值就是UUID等信息。如果是普通的特征值,则属性值是用户的数据。
操作特征值里的用户数据,就是对那块内存空间进行读写。
属性权限(Attribute Permissions):
主要有以下四种:
- 访问权限(Access Permission)- 只读、只写、读写
- 加密权限(Encryption Permission) – 加密、不加密
- 认证权限(Authentication Permission) – 需要认证、无需认证
- 授权权限(Authorization Permission) – 需要授权、无需授权
注:
加密:就是对数据进行加密;
认证:是指相互确认对方身份,BLE中,认证过程就是配对;
授权:授权要求设备为Trusted Device(可信任设备)。在实际使用中,经过配对以后设备即为Untrusted Device——认证,在代码中调用API可以设置设备为Trusted Device——授权。
二. BLE中的GAP和GATT:
蓝牙BLE: GATT Profile 简介(GATT 与 GAP) - 夜行过客 - 博客园
1. 引言:
低功耗蓝牙(BLE)连接都是建立在GATT(Generic Attribute Profile)协议之上。
GATT是一个蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
2. GAP:
介绍GATT之前,需要了解GAP(Generic Access Profile),它用来控制设备连接和广播。GAP使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与其他设备进行交互。
2.1 设备角色
GAP给设备定义了若干角色,主要的两个是:
① 外围设备(Peripheral):比如手环。一般是小、简单、低功耗设备,用来提供数据,并连接到一个强大的中心设备上。
② 中心设备(Central):比如手机。用来连接其他外围设备。
2.2 广播数据
在 GAP 中外围设备通过两种方式向外广播数据: Advertising Data Payload(广播数据)和 Scan Response Data Payload(扫描回复),每种数据最长可以包含 31 byte。这里广播数据是必需的,因为外设必需不停的向外广播,让中心设备知道它的存在。扫描回复是可选的,中心设备可以向外设请求扫描回复,这里包含一些设备额外的信息,例如设备的名字。
从图中我们可以清晰看出广播数据和扫描回复数据是怎么工作的。外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,同时也不太容易扫描到。
大部分情况下,外设通过广播自己来让中心设备发现自己,并建立GATT连接,从而进行更多的数据交换。
也有些情况是不需要连接的,只要外设广播自己的数据即可。
用这种方式主要目的是让外围设备把自己的信息发送给多个中心设备。因为基于GATT连接方式的,只能是一个外设连接一个中心设备。
3. GATT
GATT 连接,必须先经过GAP协议。
一旦两个设备建立起了连接,GATT 就开始起作用了。
中心设备和外设需要双向通信的话,唯一的方式就是建立GATT 连接。
GATT 定义两个BLE设备通过Service和Characteristic进行通信。
GATT使用ATT协议,把Service、Characteristic以及对应的数据保存在一个查找表中,次查找表使用16bit ID作为每一项的索引。
GATT 连接需要注意的是:GATT 连接是独占的,即一个BLE外设同时只能被一个中心设备连接,一旦外设被连接,它就会立马停止广播,这样它就对其他设备不可见了。
一旦建立了连接,通信就是双向的了。而前边的GAP广播通信则是单向的(外设进行广播)。
如果要让两个外设进行通信,就只能通过中心设备中转。
3.1 GATT通信事务
GATT通信的双方是C/S关系。
外设作为GATT服务端(Server),维持了ATT的查找表以及service和characteristic的定义。
中心设备是GATT客户端(Client),它向Server发起请求。
需要注意,所有的通信事件,都是由客户端(也叫主设备,Master)发起,并且接收服务端(也叫从设备,Slave)的响应。
一旦建立连接,外设会给中心设备建议一个连接间隔(Connection Interval),这样中心设备就会在每个间隔尝试去重新连接,检查是否有新数据。这个连接间隔只是个建议。
下图展示一个外设(GATT服务端)和中心设备(GATT客户端)之间的数据交流流程,可以看到的是,每次都是主设备发起请求:
3.2 GATT结构
GATT事务是建立在嵌套的Profiles,Services和Characteristics之上的,如下所示:
Profile
一种规范,一种标准的通信协议。每个profile中会包含多个service服务,每个service代表该从机的一种能力。
Service
一种服务,也就是从机的能力。例如,蓝牙从机的电量信息服务、系统信息服务等。每个service中又包含多个characteristic特征值,每个具体的characteristic才是BLE通信的主题。
Characteristic
特征值,BLE主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
举个例子,Heart Rate Measurement Characteristic。
这个 Characteristic 是Heart Rate Service必须实现的,它的UUID为0x2A37。它的数据结构是,开始8bit定义心率数据格式,后边的是对应格式的实际心率数据。
UUID
统一标识码,service 和 characteristic 都需要一个唯一的UUID来标识。
三. 一些常见术语概念
1. ATT PDU(属性协议)
在ATT层协议框架内,拥有一组属性的设备称为服务端(Server),读写该属性值的设备称为客户端(Client),Server和Client通过ATT PDU进行交互。属性协议共有6种:
属性PDU 方向 触发响应 Command Client -> Server – Request Client -> Server Response Response Server -> Client – Notification Server -> Client – Indication Server -> Client Confirmation Confirmation Client -> Server – 解释:
- 客户端发送Request,服务器需要返回一个Response,表明服务器收到了。
- 服务器发送Indication,客户端需要返回一个Confirmation,表明客户端收到了。
- 以上两种方式,均是单线程操作,即下一个Request/Indication操作需要在上一个操作收到Response/Confirmation之后才能开始。
- 客户端发送Command,服务器无需任何返回。
- 服务器发送Notification,客户端无需任何返回。
2. GAP Bond管理
gap_bond_manager_and_le_secure_connections
GAP Bond Manager 是一个可配置模块,使用Bond Manager后应用程序可以减少大部分安全机制。
术语 描述 配对(Pairing) 交换密钥的过程 加密(Encryption) 0x02 认证(Authentication) 使用中间人(MITM)保护完成的配对 Bonding 将密钥存储在非易失性存储器中 授权(Authorization) 除了认证之外,还需要额外的应用级密钥交换 OOB(Out of band) 密钥不是通过空中交换,而是通过串行端口或NFC等其他来源进行交换。这也提供了MITM保护。 MITM(Man in the Middle protection) 这可以防止攻击者收听通过空中传输的密钥来破坏加密。 只是工作(Just work) 配对方法,其中密钥在没有MITM的情况下通过空中传送 在程序中使用GAPBondMgr实现,过程如下:
- 配对过程通过选择配对模式中描述的方法交换密钥。
- 使用步骤1的密钥加密连接。
- 绑定过程将密钥存储在安全闪存(SNV)中。
- 重新连接时,使用存储在SNV中的密钥来加密连接。
使用GAPBondMgr
使用GAPBondMgr模块的一般步骤:
1. 配置堆栈以包括GAPBondMgr功能,如果需要安全连接。
2. 堆栈还必须配置为使用1或2个SNV界面。
3. 如果使用安全连接,则PDU大小必须大于等于69,可用于安全连接的最小堆大小为3690。
4. 根据需要初始化其参数来配置GAPBondMgr。
5. 使用GAPBondMgr注册应用程序回调,以便应用程序可以与GAPBondMgr通信并通知事件。
//Register with bond manager after starting device GAPBondMgr_Register(&bondmanager_callbacks);
一旦GAPBondMgr被配置,它主要从应用程序的角度自主运行。当建立连接时,根据初始化期间设置的配置参数启动配对和绑定,并根据需要通过定义的回调与应用程序通信。
GAPBondMgr与应用程序之间的大多数通信都是通过在步骤5中注册的回调发生的。
GAPBondMgr与此应用程序之间的大多数通信都是通过在步骤5中注册的回调发生的。 下图是GAPBondMgr的流程图示例,通知应用程序配对已经完成。对于各种其他事件的发生也是用相同的方法,并将在后面部分进行扩展。
四. 如何通过无线发送一个数据包
深入浅出低功耗蓝牙(BLE)协议栈_iini的博客-CSDN博客
下面以如何发送一个数据包为例来讲解BLE协议栈各层是如何紧密配合,以完成发送任务的。
假设有设备A、B,A要把自己当前的电量值83%(十六进制表示为0x53)发给设备B,该怎么做呢?对开发者而言,他希望调用一个简单的API就能完成这件事,比如 send(0x53),实际上BLE协议栈就是这样设计的。开发者只需调用API,其余事情BLE协议栈帮你搞定。
很多人会想,BLE协议栈是不是直接在物理层就把0x53发出去了,就像下图所示:
实际不是这样的。
首先他没有考虑用哪一个射频信道来进行传输。在不更改API的情况下,我们只能对协议栈进行分层,因此引入 LL层,开发者还是调用 send(0x53),send(0x53) 里再调用send_LL(0x53, 2402M)(注:2402M为信道频率)。
这里还有一个问题,设备B怎么知道这个数据包是发给自己的还是其他人的,为此BLE引入access address 概念,用来指明接受者身份。(其中,0x8E89BED6这个access address比较特殊,它表示要发给周边所有设备,即广播)。如果要一对一进行通信(BLE称其为连接),即设备A的数据包只能设备B接收,同样设备B的数据包只能设备A接收,那么就必须生成一个独特的随机access address 以标识设备A和设备B两者之间的连接。
广播方式
我们先来看一下简单的广播情况,这种情况下,我们把设备A叫advertiser(广播者),设备B叫scanner或者observer(扫描者)。广播状态下设备A的LL层API将变成 send_LL(0x53,2402M, 0x8E89BED6)。由于设备B可以同时接收到很多设备的广播,因此数据包还必须包含设备A的device address(0xE1022AAB753B)以确认该广播包来自设备A,为此send_LL参数需要变成(0x53,2402M, 0x8E89BED6, 0xE1022AAB753B)。LL层还要检查数据的完整性,为此引入CRC24对数据包进行校验(假设为0xB2C78E)。同时为了调制解调电路工作更高效,每一个数据包的最前面会加上1个字节的帧头(一般为0x55或0xAA)。
这样,整个空中包就变成:(空中包用小端模式表示)
上面这个数据包还有如下问题:
- (1)没有对数据包进行分类组织,设备B无法找到自己想要的数据0x53。为此需要在access address之后加入两个字段:LL header和长度字节。LL header用来表示数据包的LL类型,长度字节用来指明payload的长度。
- (2)设备B什么时候开启射频窗口以接收空中数据包呢?如上图所示,只有case3的情况,通信才能成功,即设备A的数据包在空中传输时,设备B正好打开射频接收窗口,此时通信才能成功,换句话说,LL层还必须定义通信时序。
- (3)当设备B拿到数据0x53后,该如何解析这个数据呢?这就是GAP层要做的工作,GAP层引入了LTV(Length-Type-Value)结构来定义数据。比如020105, 02-长度,01-类型,05-值。由于广播包最大只能为31个字节,它能定义数据类型极其有限,像上边说的电量,GAP就没有定义,因此要通过广播方式把电量数据发出去,只能使用供应商自定义数据类型0xFF,即04FF590053(小端表示),其中04-长度,FF-自定义数据类型,0x0059-供应商ID(自定义数据中的强制字段,),0x53-数据(设备双方约定0x53就是表示电量)。
最终,空中传输的数据包变为:(小端表示)
AA D6BE898E 60 0E 3B75AB2A02E1 02010504FF5900 53 8EC7B2
- AA – 前导帧(preamble)
- D6BE898E – 访问地址(access address)
- 60 – LL帧头字段(LL header)
- 0E – 有效数据包长度(payload length)
- 3B75AB2A02E1 – 广播者设备地址(advertiser address)
- 02010504FF590053 – 广播数据
- 8EC7B2 – CRC24值
经过上边过程的封装(PHY、LL和GAP),就可以发送广播包了,但广播包携带的信息极其有限,而且还有如下几大限制:
(1)无法进行一对一通信;
(2)由于不支持组包和拆包,因此无法传输大数据;
(3)通信不可靠。广播信道不能太多,否则将导致扫描效率低下。为此,BLE只使用37(2402MHz)、38(2426MHz)、39(2480MHz)三个信道进行广播和扫描,因此广播不支持跳频。由于广播是一对多,所以广播也无法支持ACK,这些都使得广播通信变得不可靠。
跳频:收发双方按照同一时序不同变换频率,这个频率的变化规律一般由一个伪随机的序列控制,通信前要先同步,使得双方的序列同步。
(4)扫描端功耗高。由于扫描端不知道设备端何时广播,也不知道设备端选用哪个频道进行广播,扫描端只能拉长扫描窗口时间,并同时对37/38/39三个通道进行扫描,这样功耗就会比较高。
而连接则可以很好解决上述问题。
连接方式
所谓设备A和设备B建立蓝牙连接,就是指A、B两者“同步”成功,具体包含以下几方面:
- A、B对接下来要使用的物理通道达成一致;
- A、B双方建立一个共同的时间锚点,也就是说把双方的时间原点变为同一个点;
- A、B两者时钟同步成功,即双方都知道什么时候发送/接收数据;
连接成功后,A、B通信流程如下所示:
如上图所示,一旦设备A和设备B连接成功(此种情况下,我们把设备A称为Master或者Central,把设备B称为Slave或者Peripheral),设备A将周期性以CI(connection interval)为间隔向设备B发送数据包,而设备B也周期性地以CI为间隔打开射频接收窗口以接收设备A的数据包。同时按照蓝牙spec要求,设备B收到设备A数据包150us后,设备B切换到发送状态,把自己的数据发给设备A;设备A则切换到接收状态,接收设备B发过来的数据。由此可见,连接状态下,设备A和设备B的射频发送和接收窗口都是周期性地有计划地开和关,而且开的时间非常短,从而大大减低系统功耗并大大提高系统效率。
现在我们看看连接状态下是如何把数据0x53发送出去的,从中大家可以体会到蓝牙协议栈分层的妙处。
(1)对开发者,很简单,他只需调用 send(0x53);
(2)GATT层定义数据的类型和分组,我们假设用 0x0013 来表示电量这种数据类型,这样GATT层就把数据打包成 :130053(小端);
(3)ATT层用来选择具体的通信命令,比如read/write/notify/indicate等,这里选择notify命令0x1B,这样数据包就变成了:1B130053;
(4)L2CAP用来指定CI(connection interval,连接间隔),比如每10ms同步一次(CI不体现在数据包中),同时指定逻辑通道编号0004(表示ATT命令),最后把ATT数据长度0x0004加在包头,这样数据就变成:040004001B130053;
(5)LL层要做很多事。
① 首先LL层需要指定用哪个物理信道进行传输(物理信道不体现在数据包中),
② 然后再给此连接分配一个Access address(0x50655DAB)以标识此连接只为设备A和设备B直连服务,
③ 然后加上LL header和payload length字段,LL header标识此packet为数据packet,而不是control packet等,payload length为整个L2CAP字段的长度,最后加上CRC24字段,以保证整个packet的数据完整性,
所以数据包最后变成:
AAAB5D65501E08040004001B130053D550F6
- AA – 前导帧(preamble)
- 0x50655DAB – 访问地址(access address)
- 1E – LL帧头字段(LL header)
- 08 – 有效数据包长度(payload length)
- 04000400 – ATT数据长度,以及L2CAP通道编号
- 1B – notify command
- 0x0013 – 电量数据handle
- 0x53 – 真正要发送的电量数据
- 0xF650D5 – CRC24值
虽然开发者只调用了 send(0x53),但由于低功耗蓝牙协议栈层层打包,最后空中实际传输的数据将变成下图所示的模样,这就既满足了低功耗蓝牙通信的需求,又让用户API变得简单,可谓一箭双雕!
上面只是对BLE协议栈实现原理做了一个简单概述。对很多开发者来说,他们也不关心BLE协议栈是如何实现的,他们更关心的是BLE协议栈的使用,即怎么开发一个BLE应用。
-
蓝牙协议BT&BLE
2022-05-18 15:32:39目录 基本概念 概述 Basic Rate(BR) Low Energy(LE) 系统组成 BR/EDR vs LE vs AMP 芯片架构 协议架构 协议层次 物理层 ...蓝牙规范 基本概念 前言 自1994年由爱立信推出至今,蓝... -
蓝牙协议学习笔记
2020-12-25 10:49:42蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的! 厂商要么实现这两种技术中的一种,这时就只能... -
蓝牙协议分析(2)_协议架构
2021-04-01 10:59:05蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下: 从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护; 在通信实体内部,下层向上层提供... -
蓝牙:蓝牙协议
2019-03-14 09:46:25蓝牙协议学习整理(一)蓝牙的概述 转自: https://blog.csdn.net/guoxiaolongonly/article/details/78414870 传送门:(一)蓝牙的概述(二)蓝牙协议规范(射频、基带链路控制、链路管理)(三)蓝牙协议规范... -
蓝牙协议体系结构
2020-11-20 13:33:57蓝牙技术特点 工作频段:2.4GHz的工科医(ISM)频段,无需申请许可证。大多数国家使用79个频点,载频为(2402+k)MHz(k=0,1, 2…78),载频间隔1MHz。采用TDD时分双工方式。 传输速率:1Mb/s(V2.0以上版本吗) ... -
zigbee协议的简介和技术特点说明
2021-07-07 07:13:52在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有这很多的有点,但是任然存在很多的缺陷。对于工业,家庭自动化控制和遥测遥控领域而言,蓝牙的技术就显得过为复杂,功耗大,距离近而且组网规模太小等,而工业自动... -
蓝牙协议(1)-- 基本协议
2018-11-30 11:56:36蓝牙协议分析(1)基本概念 蓝牙4.1,是一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;... 蓝牙协议包括两种技术:经典蓝牙(简称BT)和低功耗蓝牙(简称BLE)。这两种技术,都包括搜... -
蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)
2019-10-21 10:50:26声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。...蓝牙核心技术概述(三): 蓝牙协议规范... -
蓝牙BLE(协议栈、OSAL、蓝牙APP工具)
2021-12-18 09:33:42参考:千锋教育嗨哥_JDY-10M蓝牙模块教学视频 ...seid=539420550276958520&spm_id_from=333.337.0.0 JDY-10M蓝牙模块 ...使用AT指令,隐藏了底层的蓝牙通信协议栈 控制功能数据AT指令 手机APP通信 ... -
蓝牙协议学习整理(一)蓝牙的概述
2017-11-01 15:45:51第一章 蓝牙的概述一、蓝牙版本信息蓝牙共有六个版本1.1/1.2/2.0/2.1/3.0/4.01、1.1版本传输率约在748~810kb/s,因是早期设计,容易受到同频率之产品所干扰下影响通讯质量。2、1.2版本同样是只有748~810kb/s 的传输... -
TWS耳机及相关蓝牙协议
2021-01-30 18:13:54劣势:关键是蓝牙的传输方案不稳定: 1、传输稳定性差,容易受到外界干扰; 2、主副耳机信号不同步; 3、音质差,蓝牙传输对音频进行了压缩; 4、续航能力差,主耳机功耗大; 主要功能: 音乐控制 语音唤醒、播放、... -
蓝牙协议规范--L2CAP
2021-06-09 14:04:10L2CAP 全称为逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol),位于基带层之上,将基带层的数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。 L2CAP 是基于... -
【从零开始学习低功耗蓝牙(一)】蓝牙介绍及协议结构
2021-11-20 10:34:49二、低功耗蓝牙协议 1.协议组成图 2.控制器(Controller) 2.1 PHY物理层 2.2 链路层(LL) 2.3主机控制接口(HCI) 3.主机(HOST) 3.1 逻辑链路控制和适配协议(L2CAP) 3.2 通用属性规范(GATT)和属性... -
蓝牙技术|蓝牙音频LE Audio的技术特点
2021-08-17 10:06:562020年蓝牙技术联盟(SIG)宣布即将发布新一代蓝牙音频技术标准—低功耗音频LE Audio,新一代蓝牙音频技术打破了经典蓝牙音频的市场垄断地位,开创了蓝牙无线音频新市场。新一代蓝牙音频技术低功耗音频(LE Audio)将... -
蓝牙协议基础知识学习
2020-10-23 15:48:17与开放系统互联(OSI)模型一样,蓝牙技术的协议体系也采用了分层结构,从底层到高层形成了蓝牙协议栈,各层协议定义了所完成的功能和使用数据分组格式,以保证蓝牙产品间的互操作性。 一、首先来看一下蓝牙的架构... -
1、蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)
2017-07-11 16:13:08声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。由于有些文章只做参考或统计不足,如涉及版权请在下面留言~。... -
蓝牙协议分析(一)--转
2018-07-08 20:48:33一、蓝牙核心协议 蓝牙支持点对点和点对多点的通信。蓝牙最基本的网络结构是匹克网(Picnet)。匹克网实际上是一种个人网络,它以个人区域(即办公室区域)为应用环境。需要指出的是,匹克网并不能够代替局域网,它... -
Linux 蓝牙协议栈的USB+设备驱动
2010-12-28 15:16:53摘 要:基于对Linux 下蓝牙协议栈BlueZ 源代码的分析,给出BlueZ的组织结构和特点。分析蓝牙USB 传输驱动机制和数据处理过程, 给出实现蓝牙设备驱动的重要数据结构和流程,并总结Linux 下开发蓝牙USB 设备驱动的... -
蓝牙耳机的两种通讯协议及奥秘
2020-12-23 11:24:02蓝牙耳机的两种通讯协议及奥秘现象两种常见的蓝牙音频协议使用上的尴尬境地 以下内容翻译整理节选自Reddit上面一篇详细的文章,有兴趣的同学可以翻看原文(英文,较长) ...现象 随着TWS(True Wireless Stereo真无线... -
蓝牙协议栈-笔录一
2022-04-16 10:47:32蓝牙分为传统蓝牙、高速蓝牙、低功耗蓝牙(BLE),是物联网常见无线应用通讯协议之一。 与其他常用无线通讯对比 特性 协议栈功能框图 PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调... -
蓝牙4.0BLE协议栈(简述)
2021-01-02 17:47:49蓝牙的技术特点 简单地说,蓝牙是一种短程宽带无线电技术,是实现语音和数据无线传输的全球开放性标准。它使用跳频扩谱(FHSS)、时分多址(TDMA)、码分多址(CDMA)等先进技术,在小范围内建立多种通信与信息系统... -
Zigbee,esp8266(wifi),蓝牙协议三种通信方式
2018-01-18 21:42:06ZigBee简介 Zigbee是IEEE 802.15.4协议的简称,它来源于蜜蜂的八字舞,蜜蜂(bee)是通过飞翔和“嗡嗡”(zig)抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,而ZigBee协议的方式特点与其类似便更名为ZigBee。...