三张图带你入门蓝牙规范

简介: 蓝牙自从2001年发布以来,从经典蓝牙发展到了BLE蓝牙,又于2017年引入了蓝牙mesh技术,核心规范版本就于2019年年底升级到了最新的5.2版本,很多同学对蓝牙很有兴趣,但也被会被蓝牙技术里繁多的概念搞迷糊,希望通过这篇文章带大家对蓝牙技术规范有一个基本的了解。本文的面向读者是对网络技术有一定了解但对蓝牙技术不熟悉的同学。

一、蓝牙技术整体框架

在看蓝牙技术整体框架之前,我们先回忆一下TCP/IP的5层网络模型和它所对应的网络协议集。
image.png
可能不同应用的同学只需要关注在不同层次上的网络协议就可以满足日常工作使用了,像应用开发同学,一般只关注应用层的协议,http,https等等,网络的同学可能只需要关注TCP协议、IP协议以及ARP协议等,WiFi的同学主要focus在802.11协议上。但蓝牙技术不同,它并不处于TCP/IP5层模型中的任何一层,而是覆盖了整个5层TCP/IP模型。有了这个概念之后,让我们来看看下面第一张图。
image.png
在图1中我们可以看到,蓝牙的架构分为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)可以让手机作为蓝牙热点提供上网服务。低功耗蓝牙鼠标键盘则是使用HOGP(HID Over GATT Profile)才能让蓝牙鼠标充一次电可以用三个月到半年。当然,图1中只是列出了我们最常会用到的一些蓝牙场景,蓝牙其实还有其他的像打印(Basic Printing Profile),心率(Heart Rate Profile),寻物(Find Me Profile)等等一系列场景规范(Profile)来支持不同的应用场景。

二、经典蓝牙和低功耗蓝牙

蓝牙规范里分为经典蓝牙和低功耗蓝牙,经典蓝牙和低功耗蓝牙虽然都是蓝牙技术,但其实两种方案之间有非常大的差别,一个简单的区分就是看版本,版本低于4.0的都是经典蓝牙,高于4.0的才能支持低功耗蓝牙。在这里我们简单介绍一下两种蓝牙技术的概念和区别。
蓝牙是工作在频率为2400MHz到2483.5MHz的无线通信协议,总共有83.5MHz的带宽资源,在经典蓝牙的定义里,将这83.5MHz总共分为80个频道,每个频道是1MHz带宽,蓝牙连接管理是用连接管理协议(Link Manager Protocol LMP)。而在低功耗蓝牙里,空中只有40个频道,每个频道是2MHz带宽,连接管理使用的是连接层(Link Layer),空中数据包的结构也完全不同。我们可以看到,Controler部分的功能完全是两个独立的路径,也就是说,经典蓝牙和低功耗蓝牙的controller可以独立存在,互相不依赖,所以目前市面上有只支持经典蓝牙的芯片,也有只支持低功耗蓝牙芯片,当然,也有两种蓝牙模式共存的芯片。
在Host端,经典蓝牙和低功耗蓝牙的设计思路也不一样,在经典蓝牙协议里,在逻辑链路控制与适配协议层(Logical Link Control and Adaptation Protocol L2CAP)之上,还根据不同的应用场景定义了不同的传输协议,例如RFCOM, AVDTP,AVCTP,在不同的传输协议之上才定义了不同的Profile,层次结构比较复杂,开发人员学习成本高。而低功耗蓝牙就比较简单,只定义了一个属性协议(Attribute Protocol ATT),基于属性协议定义了一个通用属性场景规范(Generic Attribute Profile GATT)和其他的针对特定业务的场景规范(Profile),开发起来比较简单,整体框架也比较容易实现私有场景的开发。
蓝牙mesh虽然使用了低功耗蓝牙的广播报文和GATT,但可以算是一个半独立模块,蓝牙mesh构建了自己的一套网络寻址和数据传输机制,而且在mesh的协议文档里也强烈推荐使用广播承载(ADV Bearer)的方式而不是GATT承载(GATT Bearer)。
蓝牙协议和规格文档
那么这么多协议分别都是做什么的呢?其实蓝牙规范也是遵循TCP/IP通信模型设计的,让我们把蓝牙协议和TCP/IP网络通信模型对应起来就明白了,请看第二张图
image.png
由于经典蓝牙和低功耗蓝牙大都是点对点直连通信,完全不需要路由功能,所以没有特地定义网络层的协议,简单的寻址功能就在数据链路层的LMP层和LL层实现了,而蓝牙mesh由于是组建了mesh网络,有数据转发和寻址的需求,所以定义了一个Network Layer来做这件事情。
好的,了解到这些之后,那么我们去哪里可以看到这些协议更细节的内容呢??我们打开蓝牙官网的协议页面https://www.bluetooth.com/specifications/,可以看到协议分为这些类型。
image.png
估计这里会有不少同学开始奇怪了,怎么官方文档不是按照上面不同层次的协议来分类的???我想研究蓝牙技术应该从哪里开始呢?请看图3。
image.png

可以看到,其实四大类主要的蓝牙规范就完全覆盖了整个蓝牙技术架构:
1、核心规范:Core Specifications,定义了蓝牙技术最核心的内容。覆盖了从物理层一直到传输层的内容。
2、Protocol规范: Protocol Specfications,在核心规范之上针对某一大类场景(例如音视频传输,线缆通信传输,网络通信传输)的数据通信需求来定义的传输协议,属于应用层协议,只在经典蓝牙中存在。
3、Profile规范:包含经典蓝牙的Traditional Profile Specifications和低功耗蓝牙的GATT Specifications。这类规范是针对某一个特定场景需求(例如听音乐,打电话)来对核心规范和protocol做出更细化的定义和对这些协议无法满足的一些细化需求做了补充协议。
4、蓝牙mesh规范:Mesh Networking Specifications,这是蓝牙最新的mesh规范。只使用了低功耗蓝牙的
还有就是一个需要注意的地方就是预分配序号:Assigned Numbers,蓝牙组织对某些字段的已经分配的数据定义,例如公司名,广播报文类型等等,都在这里可以查到。当然,还有一些协议修订案(Specification Errata)和蓝牙兼容性测试的文档,以及正在讨论开发中的文档草案,这些不是专门做蓝牙技术的同学可以不用关心。

希望这三张图能够让大家对蓝牙规范的整体框架有了一定的了解,在今后工作中碰到需要查蓝牙规范文档的时候能快一点找到答案。

相关文章
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
2549 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
2826 1
|
编解码 安全 Android开发
低功耗蓝牙LE Audio Profile 详细介绍
2019年底,蓝牙官方组织SIG发布了蓝牙5.2版本的核心协议,其中增加了一个重要的特性---LE Audio。蓝牙的应用协议都是从应用层到物理层完整包含的协议,LE Audio也不例外。但蓝牙5.2核心协议仅仅定义了蓝牙LE的链路层传输Audio的方式,上层协议以及完整的LE Audio规范迟迟未出,近日,蓝牙官方组织释放了LE Audio较为完整的规范文档。
低功耗蓝牙LE Audio Profile 详细介绍
|
算法 网络协议 物联网
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
7527 4
一文带你认识蓝牙 GATT 协议
|
编解码 算法 数据格式
【经典蓝牙】蓝牙 A2DP协议分析
A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议, 用于传输单声道, 双声道音乐(一般在 A2DP 中用于 stereo 双声道) , 典型应用为蓝牙耳机。         A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。
3335 0
【经典蓝牙】蓝牙 A2DP协议分析
|
编解码 语音技术
【经典蓝牙】 蓝牙HFP层协议分析
HFP(Hands-Free Profile), 是蓝牙免提协议, 可以让蓝牙设备对对端蓝牙设备的通话进行控制,例如蓝牙耳机控制手机通话的接听、 挂断、 拒接、 语音拨号等。HFP中蓝牙两端的数据交互是通过定义好的AT指令来通讯的
3556 0
【经典蓝牙】 蓝牙HFP层协议分析
|
移动开发 芯片 内存技术
经典蓝牙架构分层及协议总览
经典蓝牙架构分层及协议总览
2195 0
|
算法 安全 物联网
一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制,全称 Cross-transport key derivation,主要用在蓝牙双模设备上,它可以跨越BLE和BT的边界,通过将BLE配对生成的LTK转化成BT配对的LinkKey,从而直接实现BT的配对,当然也可以通过BT配对生成的LinnkKey转化成BLE的LTK来实现BLE的配对,目前我们主要研究和使用前者。通过CTKD可以通过一次配对将BT和BLE两个链路都配对上,从而提升蓝牙双模设备的配对体验。
1736 0
一种更优雅的蓝牙配对技术 -  Cross-transport key derivation (CTKD)
|
编解码
【经典蓝牙】蓝牙AVRCP协议分析
蓝牙AVRCP协议是蓝牙设备之间音视频的控制协议。定义了音频/视频的控制、浏览、查询、通知等一系列的命令集。常用来蓝牙耳机对手机的音乐进行控制,以及获取手机的音乐信息等场景。AVRCP协议有两个角色,分别是controller(CT)和 target(TG)。CT: 发送控制命令到对端,控制对端媒体播放器的设备,例如蓝牙耳机,蓝牙遥控器等。TG:接收对端的控制命令,并执行操作,进行回复的设备,例如手机,电脑等。
4079 0
【经典蓝牙】蓝牙AVRCP协议分析