赞
踩
从1994年由电信商爱立信提出“希望创建一个RS-232数据线的无线通信替代版本,它能够链接多个设备,克服同步的问题”以来,蓝牙经过了20余个岁月的发展,蓝牙技术也经历了五次重要的迭代,目前由SIG(蓝牙技术联盟)来负责维护其技术标准。
当前的蓝牙技术主要分为BR/EDR(Basic Rate /Enhanced Data Rate)和低耗能(LE)两种技术类型。其中BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;LE型则使用点对点(一对一)、广播(一对多)和网格(多对多)等多种网络拓扑结构。
低功耗蓝牙不能向后兼容原有的蓝牙协议(经典蓝牙协议),所以它们之间是不能互通的。蓝牙4.0规范允许设备同时支持经典与低功耗蓝牙协议。
蓝牙最终产品是一种蓝牙产品,它声称实现了一个或多个核心配置,符合规范的要求部分,并符合此处定义的强制性要求。蓝牙终端产品的补充产品仅限于蓝牙配置文件子系统产品。
蓝牙终端产品类型在表 3.2 中定义:
For the respective Core Configuration, the letter “M” indicates that it is mandatory to claim support, “O” indicates that it is optional to claim support, “P” indicates that it is optionally permitted to claim only partial support of the Core Configuration, “I” indicates that the Core Configuration is inherently included in the combined Core Configuration, “E” indicates that support for the Core Configuration shall not be claimed.
对于相应的核心配置,字母“M”表示必须要求支持,“O”表示可选择要求支持,“P”表示可选择仅允许要求部分支持核心配置 ,“I”表示核心配置固有地包含在组合的核心配置中,“E”表示不应声明对核心配置的支持。
蓝牙诞生之初,使用的是BR技术,此时蓝牙的理论传输速率,只能达到721.2Kbps。随着时代的发展,速度已经慢慢跟不上人类的需求,于是EDR应运而生。但是,没错,随着时代的又又又发展,EDR紧赶慢赶也追不上了,SIG看上了隔壁的老王,哎,WIFI,把你的PHY层和MAC层借我用用呗,即AMP(Alternate MAC and PHY layer extension)。
Basic Rate可以包括可选(optional)的EDR(Enhanced Data Rate)技术,以及交替使用的(Alternate)的MAC(Media Access Control)层和PHY层扩展(简称AMP)。又因为蓝牙自身的物理层和AMP技术差异太明显了,这次扩展只能是交替使用(Alternate)的,也就是说,有我(BR/EDR)没你(AMP),无法共存。即BR和EDR是可以同时存在的,但BR/EDR和AMP只能二选一。
蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。本文目前主要注重于core层协议。
Bluetooth Core由两部分组成,Host和Controller。这两部分在不同的蓝牙技术中(BR/EDR、AMP、LE),承担角色略有不同,但大致的功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。
在一个系统中,Host只有一个,但Controller可以一个,也可以有多个。如:单独的LE Controller;单独的BR/EDR Controller;单独的LE+BR/EDR Controller;在单独的BR/EDR Controller或LE+BR/EDR Controller基础上,增加一个或多个额外的AMP Controller。
从OSI(Open System Interconnection)模型的角度看,蓝牙是一个比较简单的协议,它仅仅提供了物理层(Physical Layer)和数据链路层(Data Link Layer )两个OSI层次。由于经典蓝牙和低功耗蓝牙大都是点对点直连通信,完全不需要路由功能,所以没有特地定义网络层的协议,简单的寻址功能就在数据链路层的LMP层和LL层实现了,而蓝牙mesh由于是组建了mesh网络,有数据转发和寻址的需求,所以定义了一个Network Layer来做这件事情。 蓝牙mesh建立在BLE物理层和链路层之上,通过承载层(Bearer Layer) 把BLE层的数据抽象并供上层使用, 目前定义了两种承载,广播承载和GATT承载, 分别对应BLE的Advertising和Connection方式。
Bluetooth LE技术相比BR技术,差异非常大,可以说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已,二者的协议层结构对比如下,本系列中主要介绍BLE蓝牙技术。
SPEC中蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)。
Mesh系统架构
架构图从最底下开始大概说明,在后续章节也会逐一展开
HW层:这里就是蓝牙芯片层,包含以下几个部分
TRANSPORT层:此部分在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互,此部分会分为以下几个协议,在后续章节会对transport协议做详细的说明
其中2,3,4的主要差别在于H4需要BT CHIP UART_TX/UART_RX/UART_CTS/UART_RTS/VCC/GND接到MCU,而H5,BCSP只需要BT CHIP的UART_TX/UART_RX/VCC/GND接到MCU就可以通信。
H4是UART传输种最简的一个Transport,只是在HCI raw data的前面加一个type就行,如下HCI一共有五种HCI data:
在开发过程中,我们一般又把蓝牙的架构分为Host和Controller两个模块,Host主要是各种业务场景需求的实现,Controller部分主要负责的是蓝牙报文的收发以及蓝牙物理连接的管理这些基本功能。
所以通常绝大部分的开发工作都是在Host端进行,Controller部分的工作大都是由专门的蓝牙芯片厂商来负责;Host和Controller分模块的最初设计理念是想让这两个模块单独运行在两颗不同的芯片甚至系统上,之间通过硬件通信端口(串口,USB)使用HCI协议进行连接和通信,这样可以方便替换和升级。
例如对于不带蓝牙功能的电脑,我们可以买一个USB蓝牙接收器插到电脑上,就可以支持了蓝牙功能,这个场景下,HOST模块就是运行在电脑系统上,Controller模块就是运行在USB蓝牙接收器上。现在虽然有不少芯片把Host和Controller模块都放在了一颗芯片上,但是基本还是遵循这样的层次结构,只是将HCI协议从硬件通信端口换成了软件端口。
从应用场景来说,蓝牙规范针对了我们日常生活中会碰到的非常多的场景分别定义了不同的场景规范(Profile)来支持这些场景下的需求,有HFP(Hands Free Profile)来支持蓝牙耳机通话场景,SPP(Serial Port Profile)用于串口传输,OPP(Object Push Profile)用于设备之间的文件传输场景,A2DP(Advanced Audio Distribution Profile)用于蓝牙耳机收听音乐场景,AVRCP(A/V Remote Control Profile)用于蓝牙耳机音乐播放控制场景,PAN(Personal Area Networking Profile)可以让手机作为蓝牙热点提供上网服务。
为什么有好几种分类,这里的分层又怎么理解呢?我们如果把上面基于协议比作道路(传输功能)的话,下面的就好像在道路行驶的小轿车(数据包),在道路上有很多小轿车,我们怎么知道它属于哪家公司(包解析),这就需要各个模块的相互协作。
现在我们看看连接状态下是如何把数据0x53发送出去的,从中大家可以体会到蓝牙协议栈分层的妙处。
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变得简单,可谓一箭双雕!
SCO是一条单独链路,不基于任何链路,是新建的一条独立链路。
如果我们想深入学习各个协议里的内容,我们可以按照官网分类作为参考,可以看到,其实四大类主要的蓝牙规范就完全覆盖了整个蓝牙技术架构:
1、核心规范:Core Specifications,定义了蓝牙技术最核心的内容。覆盖了从物理层一直到传输层的内容。
2、Protocol规范: Protocol Specfications,在核心规范之上针对某一大类场景(例如音视频传输,线缆通信传输,网络通信传输)的数据通信需求来定义的传输协议,属于应用层协议,只在经典蓝牙中存在。
3、Profile规范:包含经典蓝牙的Traditional Profile Specifications和低功耗蓝牙的GATT Specifications。这类规范是针对某一个特定场景需求(例如听音乐,打电话)来对核心规范和protocol做出更细化的定义和对这些协议无法满足的一些细化需求做了补充协议。
4、蓝牙mesh规范:Mesh Networking Specifications,这是蓝牙最新的mesh规范。
物理层负责提供数据传输的物理信道,蓝牙的物理层分为Physical Channel和Physical Links两个子层。一个通信系统中通常存在多种类型的物理信道,BR/EDR
、LE
和 AMP
在物理层的实现就较大的差异。而物理链路,则是对这些物理信道(主要是BR/EDR技术中的Basic Piconet Physical Channel
和Adapted Piconet Physical Channel
)的进一步封装,如上图所示。
2.400-2.4835 GHz
。BR/EDR Basic Piconet Physical Channel
、BR/EDR Adapted Piconet Physical Channel
、BR/EDR Inquiry Scan Physical Channel
(用于扫描,也就是discovery)、BR/EDR Page Scan Physical Channel
(用于连接,也就是connect)和BR/EDR Synchronization Scan Channel
(用于无连接状态)。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设备占用的频点。在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(也称作逻辑链路)。
逻辑层的主要功能,是在已连接(LE Advertisement Broadcast可以看做一类特殊的连接)的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:
一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等。
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提供服务。
L2CAP是逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)的缩写,负责管理逻辑层提供的逻辑链路。基于该协议,不同Application可共享同一个逻辑链路,类似TCP/IP中端口(port)的概念。通过L2CAP层可以将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。
L2CAP提供多路复用角色,允许许多不同的应用程序共享ACL-U,ASB-U,LE-U或AMP-U逻辑链接。应用和服务协议与L2CAP接口使用channel-oriented interface
创建与其他设备上的等效实体的连接。L2CAP信道端口有Channel Identifier(CID)分配给其客户端,每个设备L2CAP信道端口具有不同的CID,通过监听端口,连接CID建立L2CAP连接。
通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务,L2CAP还屏蔽了低层传输协议中的很多特性,使得高层协议应用开发人员可以不必了解基层协议而进行开发。
SDP(SERVICE DISCOVERY PROTOCOL):服务发现协议,服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用服务的特征。
RFCOMM(Serial Port Emulation,Serial cable emulation protocol based on ETSI TS 07.10):串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP等协议都是直接走的RFCOMM。
OBEX(OBject EXchange protocol):对象交换协议,蓝牙电话本,蓝牙短信,文件传输等协议都是走的OBEX
HFP(Hands-Free protocol):蓝牙免提协议。
一共分为两个角色:AG跟HF,举一个例子你一下就会懂,蓝牙耳机 or 车机 跟 手机连接,那么手机的角色就是AG,蓝牙耳机 or 车机 的角色是HF。
HSP(Headset profile):早期蓝牙耳机规范,目前几乎已经没有产品使用,算是一个简化版的HFP。
SPP(SERIAL PORT PROFILE):蓝牙串口规范。
PBAP(Phone Book Access Profile):蓝牙电话本访问规范,架构如下:
此部分尤其注意,PBAP在V1.2跟V1.1架构变化很大,V1.1 PBAP直接走的RFCOMM,在V1.2的时候如果GOEP是V2.0版本,那么PBAP是直接走的L2CAP,并且是L2CAP ERTM mode,不是basic mode.
角色如下:同样举例说明,我们车载蓝牙跟手机连接,车载蓝牙下载手机的电话本,那么手机的角色就是PSE,车载蓝牙就是PCE。
MAP(MESSAGE ACCESS PROFILE):蓝牙短信访问规范。
如图 1.1 所示,消息访问配置文件依赖于通用对象交换配置文件、串行端口配置文件和通用访问配置文件与 GOEP 1.1 设备交互时需要串行端口配置文件。
此配置文件旨在与电话簿访问配置文件 (PBAP) v1.2 或更高版本的并置实现共享联系信息。可以共享发送者、接收者或即时消息对话参与者的完整联系方式。此配置文件和 PBAP 之间的接口取决于实现,此处未定义。
MAP跟PBAP很像,都是在V1.2的时候架构有变化,V1.1 MAP直接走的RFCOMM,在V1.2的时候如果GOEP是V2.0版本,那么MAP是直接走的L2CAP,并且是L2CAP ERTM mode,不是basic mode。
OPP(OBJECT PUSH PROFILE):对象推送规范。对象推送配置文件依赖于通用对象交换、串行端口(为了与实现此配置文件早期版本的设备兼容)和通用访问配置文件。
A2DP(Advanced Audio Distribution profile): 蓝牙音频传输规范,它定义了在ACL信道上进行高质量的音频分发的协议过程,这与SCO上传输的语音数据不一样。
A2DP是一个规范,设备数据流协商需要依赖AVDTP协议,远程控制需要参考AVRCP规范。A2DP取决于通用访问配置文件(GAP)以及通用音频/视频分布规范(GAVDP)。
角色如下:举一个例子说明,还是拿蓝牙耳机跟手机连接,手机传输音乐给蓝牙耳机,那么手机就是A2DP source端,蓝牙耳机是A2DP sink端。
SNK 的 AVDTP 实体应使用选定的传输服务从传输通道接收流数据,并通过 AVDTP 第 2 章中定义的公开接口将其传递给应用层。
当内容保护方法处于活动状态时,SNK 的应用层应按照内容保护方法的描述处理检索到的 AVDTP 有效载荷。通常,该处理需要对相关的加密内容进行内容保护报头分析和解密。
如果适用,音频数据帧应根据选择的编码格式进行解码。
AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL):音视频分布传输协议,是A2DP的底层。其规定了音频和/或视频分发连接以及通过蓝牙空中接口传输音频或视频媒体的传输协议。音频和视频数据流需要同步数据传输能力。
A/V分发传输协议(以下简称AVDTP)的传输机制和消息格式基于RTP,它由两大协议组成:RTP Data Transfer Protocol (RTP) and RTP Control Protocol (RTCP)。
AVDTP 定义了蓝牙设备之间的二进制事务,用于使用 L2CAP 进行音频和视频的流设置和媒体流。A/V 流和流设置信令通过 L2CAP 数据包传输。 Protocol/Service Multiplexer (PSM) 值用于识别用于 AVDTP 的 L2CAP 数据包。
图 2.1 显示了 AVDTP、蓝牙协议栈和上层是如何集成在一起的。AVDTP 向上层公开了三个接口,向蓝牙协议栈公开了两个接口。为了检索 A/V 设备的详细信息,上层使用蓝牙协议栈提供的 SDP 接口。
当 A/V 应用程序通过蓝牙链接传输音频和/或视频流时,AVDTP 执行 A/V 参数协商。基于此协商的结果,A/V 应用程序传输音频和/或视频内容。
AVRCP(AUDIO/VIDEO REMOTE CONTROL PROFILE):蓝牙音频控制规范。
基带、LMP 和 L2CAP 是 OSI 第 1 层和第 2 层蓝牙协议。AVCTP 和 BIP 定义了为控制 A/V 设备而交换的过程和消息。SDP 是蓝牙服务发现协议。OBEX 是 IrOBEX 的蓝牙改编版,它是 BIP 的底层传输协议,BIP 是提供与媒体相关联的图像交换功能的实体。
图 2.1 中的括号中描述了 BIP,以表明某些 BIP 功能被重用或重新定义为 AVRCP,但 BIP 并未用作独立的配置文件。AV/C 是负责基于 AV/C 命令的设备控制信令的实体。应用程序是 AVRCP 实体,交换本规范中定义的控制和浏览命令。
举例说明,蓝牙耳机就是controller(CT),手机就是target(TG)。
AVCTP(AUDIO/VIDEO CONTROL TRANSPORT PROTOCOL):音视频控制传输协议,该协议描述了用于传输控制消息(command and response)的传输机制,它包含对消息分段、重置的功能。
AVCTP协议使设备能够同时支持多个profile实际的消息格式和使用规则由profile自己配置。其对下依赖于L2CAP协议,对外主要是为AVRCP(AUDIO/VIDEO REMOTE CONTROL PROTOCOL)服务。
理解蓝牙协议中的应用层,基于L2CAP提供的channel,实现各种各样的应用功能。Profile是蓝牙协议的特有概念,为了实现不同平台下的不同设备的互联互通,蓝牙协议不止规定了核心规范(称作Bluetooth core),也为各种不同的应用场景,定义了各种Application规范,这些应用层规范称作蓝牙profile。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。