蓝牙概述及基本架构介绍
1. 概述
1.1 蓝牙的概念
蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在包括移动电话、PDA(掌上电脑)、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段,使用IEEE802.11协议。
1.2 蓝牙的发展历程
自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月。从最初的Bluetooth V1.0,到Bluetooth V5.2,经历了近9个版本的修订后,发展为当前的状况。
“蓝牙”的形成背景:
1998 年 5 月,爱立信、诺基亚、东芝、 IBM和英特尔公司等五家著名厂商, 在联合开展短程无线通信技术的标准化活动时提出了蓝牙技术,其宗旨是提供一种短距离、 低成本的无线传输应用技术。
芯片霸主 Intel 公司负责半导体芯片和传输软件的开发,爱立信负责无线射频和移动电话软件的开发, IBM 和东芝负责笔记本电脑接口规格的开发。
1999 年下半年,著名的业界巨头微软、摩托罗拉、三星、朗讯与蓝牙特别小组的五家公司共同发起成立了蓝牙技术推广组织,从而在全球范围内掀起了一股“蓝牙”热潮。
全球业界即将开发一大批蓝牙技术的应用产品, 使蓝牙技术呈现出极其广阔的市场前景,并预示着 21 世纪初将迎来波澜壮阔的全球无线通信浪潮。
蓝牙版本 | 发布时间 | 最大传输速率 | 传输距离 |
---|---|---|---|
蓝牙1.0 | 1998 | 723Kbps | 10米 |
蓝牙1.1 | 2002 | 810Kbps | 10米 |
蓝牙1.2 | 2003 | 1Mbps | 10米 |
蓝牙2.0+EDR | 2004 | 2.1Mbps | 10米 |
蓝牙2.1+EDR | 2007 | 3Mbps | 10米 |
蓝牙3.0+HS | 2009 | 24Mbps | 10米 |
蓝牙4.0-4.2 | 2010/2013/2014 | 24Mbps | 50米 |
蓝牙5.0-5.2 | 2016/2019/2020 | 48Mbps | 300米 |
- 第一代蓝牙:关于短距离通讯早期的探索,使用的是BR技术,此时蓝牙的理论传输速率,只能达到721.2Kbps。
- 第二代蓝牙:新增的 EDR(Enhanced Data Rate)技术,使得蓝牙设备的传输率可达 3Mbps。
- 第三代蓝牙:核心是 AMP(Generic Alternate MAC/PHY),这是一种全新的交替射频技术,支持动态地选择正确射频,传输速率高达 24Mbps
- 第四代蓝牙:主推” Low Energy”低功耗, BLE(Bluetooth Low Energy)低功耗功能
- 第五代蓝牙:开启「物联网」时代大门,在低功耗模式下具备更快更远的传输能力
1.3 蓝牙技术概述
蓝牙协议包括两种技术:BR:Basic Rate和LE:Low Energy。这两种技术都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的。
厂商如果只实现了一种,那么只能与同样实现该技术的设备互通。
如果厂商要确保能和所有的蓝牙设备互通,那么就只能同时实现两种技术,而不去管是否真的需要。
1.3.1 Basic Rate(BR)
- BR:Basic Rate是正宗的蓝牙技术,可以包括可选(optional)的EDR(Enhanced Data Rate)技术,以及交替使用的(Alternate)的MAC(Media Access Control)层和PHY层扩展(简称AMP(Alternate MAC and PHY layer extension))。
- BR:最早期的蓝牙技术,速度只能达到721.2Kbps,在那个年代,已为高大上了。
- EDR:随着技术的提升,使用EDR技术的蓝牙,理论速率可以达到2.1Mbps。
- AMP:使用AMP技术的蓝牙,理论速率可以达到54Mbps。
AMP的Alternate交替使用体现在:由于蓝牙自身的物理层和AMP技术差异太明显,BR/EDR和AMP是不能同时使用的。
简单的说,就是:BR和EDR是可以同时存在的,但BR/EDR和AMP只能二选一。
1.3.2 Low Energy(LE)
上面所讲的BR技术的进化路线,就是传输速率的加快、加快、再加快。但能量是守恒的,你想传的更快,代价就是消耗更多的能量。而有很多的应用场景,并不关心传输速率,反而非常关心功耗。这就是Bluetooth LE(称作蓝牙低功耗)产生的背景。
从它的英文名字上就可以看出它是一种低功耗蓝牙技术,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。
低功耗蓝牙与经典蓝牙使用相同的2.4GHz无线电频率,因此双模设备可以共享同一个天线。低功耗蓝牙使用的调制系统更简单。
LE技术相比BR技术,差异非常大,或者说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已。
目前BLE主要广泛应用于IoT产品领域。
技术规范 | 经典蓝牙(BT) | 低功耗蓝牙(BLE) |
---|---|---|
无线电频率 | 2.4GHz | 2.4GHz |
距离 | 10米 | 最大100米 |
发送数据所需时间 | 100ms | <3ms |
响应延时 | 约100ms | 6ms |
安全性 | 64/128-bit及用户自定义的应用层 | 128-bit AES及用户自定义的应用层 |
能耗 | 100%(ref) | 1%-50% |
空中传输数据速率 | 1-3Mb/s | 1Mb/s |
主要用途 | 手机 游戏机 耳机 汽车 PC | 手机 游戏机 PC 智能穿戴设备汽车 家用电子 |
2. 蓝牙的基本架构
2.1 芯片架构
蓝牙的核心系统,由一个Host和一个或多个Controller组成。
- BT Host:一个逻辑实体,在HCI(Host Controller Interface)的上层。
- BT Controller:一个逻辑实体,在HCI(Host Controller Interface)的下层。
Bluetooth的主控制器,可能是以下几种:
- BR/EDR Controller:内部包含Radio, Baseband,Link Manager,可选的HCI。
- LE Controller :内部包含LE PHY,Link Layer ,可选的HCI
- BR/EDR & LE Controller:BR/EDR与LE的组合的控制器
- MAC/PHY (AMP) Controller:二级控制器,可替代的,内部包含 802.11 PAL (Protocol Adaptation Layer),802.11 MAC,PHY,可选的HCI。
根据Host与Controller的组成关系,常见的蓝牙芯片也分为以下几种:
- 单模蓝牙芯片:单一传统蓝牙的芯片,单一低功耗蓝牙的芯片。即(1个Host结合1个Controller)
- 双模蓝牙芯片:同时支持传统蓝牙和低功耗蓝牙的芯片。即(1个Host结合多个Controller)
因此,蓝牙芯片就会有以下几种架构:
2.2 协议架构
蓝牙的协议架构我们从两个视角来进行认识。
2.2.1 官方协议中所展示的蓝牙协议架构
2.2.1.1 全局分析
- Controller:
- BR/EDR Controller:由Link Manager、Link Controller、BR/EDR Radio组成
- LE Controller:由Link Manager、Link Controller、 LE Radio 组成
- AMP Controller:由 AMP PAL, AMP MAC, AMP PHY组成
- Host:
- BR/EDR Host:由 L2CAP、SDP 、GAP 组成
- LE Host:由 L2CAP、SMP 、GAP 、Attribute protocol、GATT组成
2.2.1.2 局部分析
- Host层
- Channel Manager:通道管理,主要用于创建、管理、关闭L2CAP通道,用于服务协议和应用数据的传输。
- L2CAP Resource Manage:L2CAP资源管理,主要负责管理分片的PDU的正确提交。
- Security Manager Protocol:SMP安全管理协议,主要负责生成加密密钥和身份密钥。
- Attribute Protocol:ATT,属性协议,主要负责服务端与客户端点到点的数据传输。
- AMP Manager Protocol:直接使用L2CAP与远程设备通信。
- Generic Attribute Profile:GATT,提供更多的功能,概要文件描述了属性服务器中使用的服务层次结构、特征和属性,用于LE设备
- Generic Access Profile:GAP,标识了基础的蓝牙设备的通用功能
- Controller层
- Device Manager:控制蓝牙设备的通用行为,负责与蓝牙通信过程中,所有的与数据无关的操作,如查询设备,连接设备
- Link Manager:链路管理,主要负责创建,修改,释放逻辑链路。
- Baseband Resource Manager:基带资源管理,主要负责所有的访问无线电媒体
- Link Controller:链路控制,主要负责从编码和解码蓝牙数据包
- PHY:物理层,主要负责发送,接收物理通道的信息包
2.2.2 HW层,Transport层,Host层
2.2.2.1 HW层——蓝牙芯片层
HW层,指的是蓝牙芯片层,也就是我们上面说的Controller,包括以下几个部分:
- RF(RADIO):射频层,本地蓝牙数据通过射频发送给远端设备,并且通过射频接收来自远端蓝牙设备的数据。
- BB(BASEBAND):基带层,进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
- LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作
- HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI层在芯片以及协议栈都有,芯片层面的HCI负责把协议栈的数据做处理,转换为芯片内部动作,并且接收到远端的数据,通过HCI上报给协议栈。
- BLE PHY:BLE的物理层
PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。 - BLE LL:BLE的链路层
LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link(连接),就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。
2.2.2.2 Transport——数据传输层
Transport层,主机控制层接口,通过硬件接口UART/USB/SDIO把HOST协议层的数据发送给Controller层,并且接收Controller层的数据。
该部分有几个协议:
- H2:基于USB的传输
- H4:基于UART的传输,最简单的传输方式,只在HCI raw data前面加上一个type
- H5: 基于UART的传输
- BCSP: 基于UART的传输
- SDIO :基于SDIO的传输
H4需要蓝牙芯片的UART_TX/UART_RX/UART_CTS/UART_RTS/VCC/GND接到MCU;
H5只需要蓝牙芯片的UART_TX/UART_RX/VCC/GND接到MCU就可以通信。
2.2.2.3 HOST——协议层
HOST层,此部分就是蓝牙协议栈,该部分包括多个协议:
-
L2CAP(Logical Link Control and Adaptation Protocol):逻辑链路控制与适配协议,将ACL数据分组,对高层应用的数据进行分组,并提供协议复用和服务质量交换等功能。通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务。
L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。
-
SDP(SERVICE DISCOVERY PROTOCOL):服务发现协议,为应用程序提供发现可用服务,并确定服务特征的方法。
-
RFCOMM(Serial Port Emulation):串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP等协议都是直接走的RFCOMM
-
SPP(SERIAL PORT PROFILE):蓝牙串口协议
-
HID(HUMAN INTERFACE DEVICE):人机接口协议,HID还是有很多广泛的用途的,比如蓝牙鼠标,蓝牙键盘,蓝牙自拍杆,蓝牙手柄等。
-
IAP:苹果的特有协议,分为IAP1/IAP2,一般做Carplay或者iPod功能会涉及到该协议
-
PBAP(Phone Book Access):蓝牙电话本访问协议
-
MAP(MESSAGE ACCESS PROFILE):蓝牙短信访问协议
-
OBEX:对象交换协议,蓝牙电话本,蓝牙短信,文件传输等协议都是走的OBEX
-
HFP(Hands-Free):蓝牙免提协议
-
HSP:蓝牙耳机协议,最开始的蓝牙耳机协议,算是一个简化版的HFP。
-
A2DP(Advanced Audio Distribution): 蓝牙音乐协议
-
SM: 蓝牙BLE安全管理协议
SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。 -
GAP(GENERIC ACCESS PROFILE):它定义了蓝牙设备的基本要求。
它联系了所有的不同的层之间的交互,也描述了设备发现、建立连接、安全、认证、关联模型和发现服务的行为和方法。对于BR/EDR,它定义了一个蓝牙设备,包括无线电、基带、链路管理器、L2CAP和服务发现协议(SDP)功能。
对于LE,它定义一个物理层(PHY),链路层,L2CAP,安全管理器,属性协议和通用属性配置文件。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。
-
ATT(Attribute Protocol):蓝牙属性协议,用于发现、读、写对端设备的协议(针对BLE设备),ATT允许设备作为服务端提供拥有关联值的属性集 ,让作为客户端的设备来发现、读、写这些属性;同时服务端能主动通知客户端。
简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。 -
GATT(Generic Attribute Profile):蓝牙通用属性协议,描述了一种使用ATT的服务框架 ,该框架定义了数据交换的格式。
GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。
GATT与ATT的关系:GATT 是脱胎于 ATT ,ATT 是 Attribute Protocol Specification 属性规范协议,注意ATT是协议,而GATT是规范,两者不同点在于 ATT规定了数据格式,而 GATT 则是按照 ATT 的格式将具体数据填充进去。
2.2.3 BLE蓝牙体系架构
3. 市场常见的蓝牙技术方案
3.1 SOC单芯片方案
一般是半导体厂商半开源协议栈,把开发的蓝牙协议栈直接烧写到蓝牙芯片中,(比如CSR BC4/5,CSR8670,CSR8675,TI CC2540,NRF51xxx,NRF52xxx,乐鑫ESP32等等),架构如下:
市场上的常见产品:蓝牙音箱,蓝牙耳机,蓝牙手环,蓝牙心率带
3.2 SOC蓝牙+MCU方案
就是在1)的基础上,通过特定的interface(UART居多),发送自定义的command来达到想要的功能,比如发送0x01代表搜索周围设备,当然在产品中肯定不会定义这么简单的command,一般要加上command id + command len + command para data + command check sum来实现功能。
架构如下:
此部分的应用一般用于外设功能相对于复杂,需要驱动很多外设,但是单芯片方案的性能达不到的情况下一般用这种方案。
3.3 蓝牙host+controller分开方案
这种应用算是蓝牙最复杂的应用,适用于蓝牙使用情景较复杂的情况下使用,比如车载蓝牙等。客户需要有很多蓝牙协议,比如蓝牙电话(HFP),蓝牙音频(A2DP),蓝牙音乐控制(AVRCP),蓝牙电话本(PBAP),蓝牙短信(MAP),BLE,HID,如果你说以上还能用soc做,那么再加上Carplay的IAP/IAP2,Android Auto的RFCOMM BT呢,基本以上就需要这种方案了。
其中Transport是一个协议,H2就是在USB的基础上的协议,H4,H5,BCSP是UART基础上的协议,当然还有SDIO。
市场上常见产品:手机,功能较为复杂的蓝牙手表。
4 Bluez介绍
4.1 Bluez概述
BlueZ 是官方 Linux Bluetooth 栈,由主机控制接口(Host Control Interface ,HCI)层、Bluetooth 协议核心、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、SCO 音频层、其他 Bluetooth 服务、用户空间后台进程以及配置工具组成。
BlueZ 的架构主要分为以下几个组件:
- HCI(Host Controller Interface)层:这是 BlueZ 与蓝牙硬件之间的接口层。它负责与蓝牙控制器进行通信,发送和接收命令、事件和数据包。HCI 层通常由 Linux 内核提供的驱动程序来实现。
- L2CAP(Logical Link Control and Adaptation Protocol)层:L2CAP 是蓝牙协议栈中的一个重要组件,提供了对称的、面向连接的数据通信服务。它在底层的物理链路之上建立逻辑连接,并负责分配信道和数据包的传输。
- SDP(Service Discovery Protocol)层:SDP 提供了一种机制,用于在蓝牙设备之间发现和描述可用的服务和其特性。它允许设备查询其他设备上支持的服务,并获取服务的详细信息。
- RFCOMM(Radio Frequency Communication)层:RFCOMM 是一种在 L2CAP 上运行的协议,它模拟了串行通信接口,使蓝牙设备能够像使用串口一样进行数据通信。
- GAP(Generic Access Profile)层:GAP 定义了蓝牙设备之间的通用访问规范,包括设备发现、连接和身份验证等功能。它定义了设备的角色、广播和扫描行为,以及与配对和安全性相关的规则。
- GATT(Generic Attribute Profile)层:GATT 是蓝牙 Low Energy(LE)模式中的一个重要概念,用于定义蓝牙设备之间的通信协议。它基于客户端-服务器模型,其中服务提供者提供各种服务,并通过 GATT 协议使客户端可以读取和写入服务的属性。
BlueZ 还提供了一组丰富的工具和库,用于在 Linux 系统上开发和管理蓝牙应用程序。这些工具包括 hciconfig(用于配置 HCI 接口)、hcitool(用于执行蓝牙设备和操作的低级别命令)、bluetoothctl(用于交互式地管理蓝牙设备)等。
4.2 Bluez目录介绍
Bluez协议栈下载地址:http://www.bluez.org/
目录架构介绍:
android/ - 用于替代android中bluedroid的android版本bluez源码。
attrib/ - 包含gatttool 源码以及与gatt attribute相关的代码,gatttool程序入口为gatttool.c。
btio/ - 通过的标准socket接口与BlueZ5 kernel模块通信。
client/ - bluetoothctl源码,程序入口为main.c。
doc/ - BlueZ5 API文档。
emulator/ - 与bluetooth虚拟controller工具相关的代码。
gdbus/ - BlueZ5自带的内部gdbus库源码。
gobex/ - Blue5自带的内部gobex库源码。
lib/ - libbluetooth.so 源码,提供BlueZ4 API,用来支持某些第三方应用。
monitor/ - btmon源码, 程序入口为main.c。
obexd/ - obexd源码,程序入口为src/main.c。
peripheral/ - 与蓝牙ble的GATT相关的代码?。
plugins/ - BlueZ5插件源码(neard,autopair等插件)。
profiles/ - BlueZ5蓝牙上层协议(a2dp,hid等)源码。
src/ - bluetoothd源码,程序入口为main.c。
test/ - Bluez5测试脚本。
tools/ - Bluez5测试工具集源码。
unit/ - PTS测试相关的一些代码?。
README / INSTALL - 配置,编译,安装Bluez5的说明。
Makefile.obexd - 定义obexd编译规则,此文件被include于Makefile.am中。
Makefile.plugins - 定义BlueZ5的plugins(neard,autopair等)的编译规则, 此文件被include于Makefile.am中。
Makefile.tools - 定义BlueZ5测试工具集的编译规则,此文件被include于 Makefile.am中。
Makefile.am - 定义了Bluez5的编译规则。用于automake工具,生成 Makefile.in文件。
Makefile.in - 用于configure脚本,生成最终的Makefile文件。
configure.ac - 用于autoconf工具,生成configure脚本。
configure - 配置编译选项,生成最终的Makefile文件,以及config.h文件
bluez核心代码在src目录下,入口函数是main.c,bluez5编译后会生成bluetoothd可执行文件,该可执行文件在linux系统启动时自动加载,加载配置文件放在/etc/init/bluetooth.conf。