蓝牙背景

从1994年由电信商爱立信提出“希望创建一个RS-232数据线的无线通信替代版本,它能够链接多个设备,克服同步的问题”以来,蓝牙经过了20余个岁月的发展,蓝牙技术也经历了五次重要的迭代,目前由SIG(蓝牙技术联盟)来负责维护其技术标准。

  • 第一代:产品处于开发初期,各个厂商版本因为实现不同出现不兼容,地址无法匿名化,通信间无法自适应跳频,速度慢,无错误自恢复等问题也亟须改良。
  • 第二代:蓝牙2.0+EDR版加入了“非跳跃窄频通道”(Non-hopping narrowband channel)。因为不需要与每个设备交换应答信号,这种通道可以用来将各种器件的蓝牙服务概要同时广播到巨量的蓝牙器件。实现了更快的连接速度。
  • 第三代:蓝牙核心规范3.0版,根据802.11适配层协议应用了Wi-Fi技术,使用一种全新的交替射频技术Generic Alternate MAC/PHY (AMP),他允许蓝牙协议栈针对任何一个任务动态的选择正确的射频。
  • 第四代:2010年7月7日,蓝牙技术联盟推出了蓝牙4.0规范。其最重要的特性是支持省电。还提出了“低功耗蓝牙”(BLE)、“传统蓝牙(BT)”和“高速蓝牙”(HS)三种模式。

    其中,高速蓝牙主攻数据交换与传输;传统蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙顾名思义,以不需占用太多带宽的设备连接为主。前身其实是NOKIA开发的Wibree技术,本是作为一项专为移动设备开发的极低功耗的移动无线通信技术,在被SIG接纳并规范化之后重命名为Bluetooth Low Energy(后简称低功耗蓝牙)。这三种协议规范还能够互相组合搭配、从而实现更广泛的应用模式。

  • 第五代:蓝牙5.0在2016年6月发布。在有效传输距离上将是4.2LE版本的4倍,传输速度将是4.2LE版本的2倍(速度上限为24Mbps)。蓝牙5.0还支持室内定位导航功能(结合WiFi可以实现精度小于1米的室内定位),允许无需配对接受信标的数据(比如广播、Beacon、位置信息等,传输率提高了8倍),针对物联网进行了很多底层优化。

当前的蓝牙技术主要分为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层:这里就是蓝牙芯片层,包含以下几个部分

  1. RF(RADIO):射频层,本地蓝牙数据通过射频发送给远端设备,并且通过射频接收自远端蓝牙设备的数据
  2. BB(BASEBAND):基带层,进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
  3. LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作
  4. HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI层在芯片以及协议栈都有,芯片层面的HCI负责把协议栈的数据做处理,转换为芯片内部动作,并且接收到远端的数据,通过HCI上报给协议栈。
  5. BLE PHY:BLE的物理层
  6. BLE LL:BLE的链路层

TRANSPORT层:此部分在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互,此部分会分为以下几个协议,在后续章节会对transport协议做详细的说明

  1. H2:USB的transport
  2. H4: UART的transport
  3. H5: UART的transport
  4. BCSP: UART的transport
  5. SDIO Transport,我不知道叫什么transport,但是有走SDIO的蓝牙芯片,比如Marvell8887,可以选择走SDIO或者UART

其中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:

  • HCI COMMAND:由蓝牙协议栈发送给芯片的命令
  • HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件
  • HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据
  • HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
  • HCI ISO(这部分是在core5.2才添加):LE audio用的数据包格式

在开发过程中,我们一般又把蓝牙的架构分为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发送出去的,从中大家可以体会到蓝牙协议栈分层的妙处。

  • 对开发者来说,很简单,他只需要调用send(0x53)
  • GATT层定义数据的类型和分组,方便起见,我们用0x0013表示电量这种数据类型,这样GATT层把数据打包成130053(小端模式!)
  • ATT层用来选择具体的通信命令,比如读/写/notify/indicate等,这里选择notify命令0x1B,这样数据包变成了:1B130053
  • L2CAP用来指定connection interval(连接间隔),比如每10ms同步一次(CI不体现在数据包中),同时指定逻辑通道编号0004(表示ATT命令),最后把ATT数据长度0x0004加在包头,这样数据就变为:040004001B130053
  • LL层要做的工作很多,首先LL层需要指定用哪个物理信道进行传输(物理信道不体现在数据包中),然后再给此连接分配一个Access address(0x50655DAB)以标识此连接只为设备A和设备B直连服务,然后加上LL headerpayload 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/EDRLEAMP 在物理层的实现就较大的差异。而物理链路,则是对这些物理信道(主要是BR/EDR技术中的Basic Piconet Physical ChannelAdapted Piconet Physical Channel)的进一步封装,如上图所示。

  • 相同点:BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 频段,频率范围是2.400-2.4835 GHz
  • 不同点:
  1. BR/EDR作为经典蓝牙, 其ISM频率范围内被分成79个channel,每一个channel占用1M的带宽,在0 channel和78 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。通过采用跳频技术(hopping),减少信道干扰。同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。

    BR/EDR技术定义了5种物理信道(跳频信道),BR/EDR Basic Piconet Physical ChannelBR/EDR Adapted Piconet Physical ChannelBR/EDR Inquiry Scan Physical Channel(用于扫描,也就是discovery)、BR/EDR Page Scan Physical Channel(用于连接,也就是connect)和BR/EDR Synchronization Scan Channel(用于无连接状态)。

    其中,BR/EDR Basic Piconet Physical ChannelBR/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设备占用的频点。

  2. LE作为低功耗蓝牙,ISM频率范围内被分成40个channel,每一个channel占用2M的带宽,在0 channel和39 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。

    LE技术定义了2种物理信道,LE Piconet channel和LE Advertisement Broadcast Channel。LE Piconet Channel用在处于连接状态的蓝牙设备之间的通信,和BR/EDR一样,采用调频技术。和BR/EDR不一样的地方是,只会在40个频率channel中的37个上面跳频。LE Advertisement Broadcast Channel用于在设备间进行无连接的广播通信,这些广播通信可用于蓝牙的设备的发现、连接(和BR/EDR类似)操作,也可用于无连接的数据传输。

  3. AMP是为高速数据传输设计的技术,其物理层规范直接采用802.11(WIFI)的PHY规范,AMP物理信道只有一种,即AMP Physical Channel,主要用于已连接设备之间的数据通信,和BR/EDR技术中的BR/EDR Adapted Piconet Physical Channel位于一个级别,可以互相切换使用。

逻辑层

在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(也称作逻辑链路)。

逻辑层的主要功能,是在已连接(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层

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

SDP(SERVICE DISCOVERY PROTOCOL):服务发现协议,服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用服务的特征。

RFCOMM

RFCOMM(Serial Port Emulation,Serial cable emulation protocol based on ETSI TS 07.10):串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP等协议都是直接走的RFCOMM。

OBEX

OBEX(OBject EXchange protocol):对象交换协议,蓝牙电话本,蓝牙短信,文件传输等协议都是走的OBEX


HFP

HFP(Hands-Free protocol):蓝牙免提协议。

一共分为两个角色:AG跟HF,举一个例子你一下就会懂,蓝牙耳机 or 车机 跟 手机连接,那么手机的角色就是AG,蓝牙耳机 or 车机 的角色是HF。

HSP

HSP(Headset profile):早期蓝牙耳机规范,目前几乎已经没有产品使用,算是一个简化版的HFP。

SPP

SPP(SERIAL PORT PROFILE):蓝牙串口规范。

PBAP

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

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

OPP(OBJECT PUSH PROFILE):对象推送规范。对象推送配置文件依赖于通用对象交换、串行端口(为了与实现此配置文件早期版本的设备兼容)和通用访问配置文件。



A2DP

A2DP(Advanced Audio Distribution profile): 蓝牙音频传输规范,它定义了在ACL信道上进行高质量的音频分发的协议过程,这与SCO上传输的语音数据不一样。

A2DP是一个规范,设备数据流协商需要依赖AVDTP协议,远程控制需要参考AVRCP规范。A2DP取决于通用访问配置文件(GAP)以及通用音频/视频分布规范(GAVDP)。


角色如下:举一个例子说明,还是拿蓝牙耳机跟手机连接,手机传输音乐给蓝牙耳机,那么手机就是A2DP source端,蓝牙耳机是A2DP sink端。


SNK 的 AVDTP 实体应使用选定的传输服务从传输通道接收流数据,并通过 AVDTP 第 2 章中定义的公开接口将其传递给应用层。

当内容保护方法处于活动状态时,SNK 的应用层应按照内容保护方法的描述处理检索到的 AVDTP 有效载荷。通常,该处理需要对相关的加密内容进行内容保护报头分析和解密。

如果适用,音频数据帧应根据选择的编码格式进行解码。

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

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

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。


参考资料

  • wikipedia - 蓝牙
  • 蓝牙组织 - specifications
  • IEEE Standards 下载地址
  • 蜗窝科技-蓝牙协议分析
  • 深入浅出低功耗蓝牙(BLE)协议栈- iini
  • 三张图带你入门蓝牙规范
  • CSDN - Wireless_Link - 吐血推荐历史最全的蓝牙协议栈介绍

Bluetooth 蓝牙介绍(一) :基础知识相关推荐

  1. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念

    文章目录 背景 术语 Managed Flooding Models Scenes 架构 Node Features 中继节点 代理节点 友元节点和低功耗节点 示例 BLE Mesh Networki ...

  2. Java提取文本文档中的所有网址(小案例介绍正则基础知识)

    正则表达式基础以及Java中使用正则查找 定义: 正则表达式是一些用来匹配和处理文本的字符串 正则的基础(先大致了解下) 1. 正则表达式的作用 查找特定的信息(搜索) 替换一些文本(替换) 2. 正 ...

  3. Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈

    文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU ...

  4. Bluetooth 蓝牙介绍(六):低功耗蓝牙信息交互

    文章目录 前言 THREE-WIRE UART TRANSPORT LAYER LINK ESTABLISHMENT UnInitialized STATE Initialized STATE Act ...

  5. 蓝牙配对机制基础知识

    蓝牙配对机制 为了统一规范,蓝牙在2.1版本引入了安全简单的配对机制,从尔加强了蓝牙通讯安全方面性能.以下总结了蓝牙配对机制: 一.遗留配对(Lagacy pairing){密码配对(PIN Code ...

  6. Bluetooth 蓝牙介绍(三):低功耗蓝牙BLE空口协议Ⅰ

    文章目录 帧空间 时序要求 链路层设备过滤 NON-CONNECTED STATES Standby state Advertising state Advertising events Extend ...

  7. Python文件处理os模块介绍 -*- Python基础知识12 -*-

    文件处理 打开文件 open file mode encoding 操作文件 读取文档 逐个读取read 逐行读取 文件读取位置 写入文档 write 关闭文件 close with... as... ...

  8. Java介绍和基础知识

    java基本介绍 程序是计算机语言编写的的,编写程序的工具,就是计算机语言,Java是目前应用最广泛的编程语言. java的创始人:詹姆斯·高斯林 James Gosling java的发展和版本 1 ...

  9. 经典蓝牙与低功耗蓝牙BLE开发基础知识:服务、特征、属性、UUID

    经典蓝牙和低功耗蓝牙BLE的区别 蓝牙大致被认为是1.0 2.0 3.0 4.0版本,不过现在已经不再用版本号区分蓝牙了,蓝牙1.0~3.0都是经典蓝牙,在塞班系统就已经开始使用了.而蓝牙4.0开始就 ...

最新文章

  1. react学习笔记(二)编写第一个react组件
  2. 销售易移动CRM助力制造业转型智能制造
  3. quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...
  4. ubuntu16.04 uninstall cuda 9.0 completely and install 8.0 instead
  5. php查询每个小时的数据,php – MySQL显示表中每小时的条目数
  6. ThreadFactory
  7. 《C champion》 为什么要学习C语言
  8. gitlab将分支代码合并到master上
  9. php页面价格排序代码,php 数组动态添加实现代码(最土团购系统的价格排序)
  10. 二手机Q1行情报告:iPhone 11、华为Mate、P40(5G)等小幅涨价
  11. 摆动定价机制连载系列之推出背景及工作原理介绍
  12. DOS那一代的程序员现在都干嘛呢?
  13. windows 安装msi 出现报错 2503 无权限 使用cmd模式安装
  14. 对称与非对称加密算法总结
  15. 154. 正则表达式匹配
  16. oracle minus 利用率,Oracle Minus 取差集(也可以用来做分页,但效率不高)
  17. 游园惊梦--记游第九届软博会
  18. 三个mplayer播放器mplayer mpv mplayer-ww
  19. fastlane实现Android自动化打包
  20. R中怎么做加权最小二乘_R方的理解与用法

热门文章

  1. HijackThis 扫描日志完全分析(二)
  2. 20230416英语学习
  3. android-pdf阅读器(Android开源项目)
  4. 热工仪表及控制实训装置
  5. Java学习_Day016
  6. 容错服务器的性能指标,基于OLTP的高端容错服务器性能评测TPC-E基准的研究与设计...
  7. Excel 分列和行转列
  8. 实用博客||工具||网页收藏导航(持续更新)
  9. [642]CherryTree for Windows中文版 v0.38.8
  10. 其它服务器(ThinkPHP5)与Discuz3.3自带的UCenter实现同步(一) - 通信成功