1. 蓝牙技术联盟:Bluetooth Special Interest Group,缩写为SIG.
作用:拥有蓝牙的商标,负责制定蓝牙规范、认证制造厂商,授权他们使用蓝牙技术与蓝牙标志,但本身不负责蓝牙设备的设计、生产及贩售。
2. 当前的蓝牙协议包括BR/EDR(Basic Rate/Enhanced Data Rate)、AMP(Alternate MAC/PHYs)、LE(Low Energy)三种技术。
3. Bluetooth 4.0是Bluetooth从诞生至今唯一的一个综合协议规范,提出了“低功耗蓝牙”、“传统蓝牙”和“高速蓝牙”三种模式。
1)高速蓝牙:主攻数据交换与传输;
2)传统蓝牙:则以信息沟通、设备连接为重点; 3)低功耗蓝牙:顾名思义,以不需占用太多带宽的设备连接为主。前身其实是NOKIA开发的Wibree技术,本是作为一项专为移动设备开发的极低功耗的移动无线通信技术,在被SIG接纳并规范化之后重命名为Bluetooth Low Energy(后简称低功耗蓝牙)。
4. 蓝牙5.x协议:
1)蓝牙5.0在2016年6月发布。在有效传输距离上将是4.2LE版本的4倍,传输速度将是4.2LE版本的2倍(速度上限为24Mbps)。
2) 蓝牙5.0还支持室内定位导航功能(结合WiFi可以实现精度小于1米的室内定位),允许无需配对接受信标的数据(比如广告、Beacon、位置信息等,传输率提高了8倍), 针对物联网进行了很多底层优化。
3) 2019年1月,蓝牙技术联盟推出了蓝牙5.1规范。 2020年1月,蓝牙技术联盟推出了蓝牙5.2规范。
BLE模式、经典模式和双模;
主机(host) + HCI(可选) + 控制器(controller)三部分,其中对于单芯片方案是没用HCI的。
1)主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;
2)控制器(Controller):此部分可分为低功耗蓝牙(Low Energy Controller)和经典蓝牙(BR/EDR Controller)两种工作模式;
3)HCI协议+接口:此部分定义了主机和控制器之间通信的协议标准(Host Controller Interface),硬件接口可以是UART/USB/SPI/SDIO等通信方式。
1)host+controller双芯片标准架构
--- 如手机和TV电视等功能强大的SOC主控方案的系统里,运行linux或android系统,同时WiFi和蓝牙模块也有自己专门的soc主控,两者间通过HCI协议和标准的硬件接口(如:usb/sdio等)进行通信;
---以上形态中,AP主控为host,运行蓝牙协议栈和profile部分; 蓝牙模块为controller部分,主要运行物理和逻辑链路层的功能。这样保证了两者间的兼容性,host和controller两部分都可进行很方便的硬件替换。
----AP端host部分,一般比较通用的蓝牙协议栈为:bluez(linux系统)和bluedroid(android系统),而Controller部分大部分由蓝牙厂商自己来实现。
2)单芯片整体方案
---如手机周围很多与之相连的蓝牙设备是蓝牙另外一个非常重要的应用场合, 这些设备通常功能比较简单,但对成本非常敏感, 因此采用一颗芯片来实现整个蓝牙协议栈就是非常明智的选择;
----把蓝牙协议栈所有功能都放在一颗芯片上,包括host和controller部分,由于host和controller都在同一颗芯片上,因此物理HCI就没有存在的必要性,host和controller之间直接通过API来交互。如:我们常用的蓝牙耳机,ble蓝牙手环等这种架。
3)自定义双芯片架构
---还有一些蓝牙设备功能比较强大,它需要一颗功能非常强大的MCU来做主控,而蓝牙SoC只是整个系统的一部分;
---这种情况下,大部分蓝牙协议栈功能或者整个蓝牙协议栈功能都是跑在蓝牙SoC中,而蓝牙应用则跑在主MCU中,主MCU和蓝牙SoC之间的通信协议由厂商自己定义,因此称为自定义双芯片架构方案。当然两两者间的通信可采用HCI协议,也可自定义通信协议。
1. 工作频率和信道:
蓝牙是一种近距离无线通信技术,运行在2.4GHz免费频段, 采用GFSK调制,蓝牙4.0以后的版本分为两种模式,经典蓝牙和ble蓝牙。 频率范围是2.400-2.4835 GHz。 第一个信道从2.402开始;信道频率为2402+K。 频段前面和后面均有一段的保护带宽,分别为2.4~2.4019G和2.481~2.4835M。
1)BLE有40个频道,2M频间隔,3个广播(37,38,39),37数据通道;
2)经典蓝牙:有79个信道, 1M间隔;
2. 技术类型分类:
蓝牙技术分为基础率/增强数据率(BR/EDR)和低功耗(LE)两种技术类型。
1)其中BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;
2)LE型则使用点对点(一对一)、广播(一对多)和mesh(多对多)等多种网络拓扑结构。
3. 单模和双模:
1)单模蓝牙,即低功耗蓝牙模式,是蓝牙4.0中的重点技术,低功耗,快连接,长距离;
2)双模蓝牙,同时支持 低功耗蓝牙和经典蓝牙,经典蓝牙的特点是大数据高速率,例如音频、视频等数据传输。;
4. 客户端和服务端;
服务端:能提供服务的设备;
客户端:访问和使用服务的设备;
5 主机和从机;
1)主机主动扫描和连接的角色;从机一般为周期性发送广播,接受连接,处于低功耗的角色;
2)主设备管理多个连接从设备,从设备只能连接一个主设备;
6. 跳频原理:
蓝牙的自适应跳频技术在所有蓝牙规范版本都适用,可以最大程度地减少和其他2.4 GHz ISM频段无线技术的串扰。蓝牙跳频的工作原理如下:
1) . 频率跳跃序列生成:
在蓝牙设备之间事先约定好一个频率跳跃序列,这个序列由一组不同的频率构成,称为跳频序列。跳频序列的生成可以根据设备的唯一地址和时钟信息进行计算,确保每个设备都有唯一的跳频序列;
2) .同步:
蓝牙设备在通信前需要进行同步,以确保发送和接收的设备在相同的频率上工作。通常,一个设备作为主设备(Master),其他设备作为从设备 (Slave) 。主设备在特定时间点发送同步信号,从设备根据同步信号进行频率跳跃。
3) . 频率跳跃:
通信过程中,发送和接收设备按照事先约定好的频率跳跃序列进行跳频。每个设备根据自己的跳频序列按顺序在不同的频率上发送和接收数据。频率的跳跃速度很快,通常每个时隙(625us) 内完成一次跳频,正常情况下一个时隙对应一个信道。也就是说每个时隙跳频一次,1600跳每秒。
4) .动态频率选择:
蓝牙设备会检测当前的通信环境,并根据检测结果选择合适的频率跳跃序列。这样可以避免频率上的干扰和提高通信的可靠性。
5) 动态调整跳跃频率:
这里有个特殊情况是当数据包长度超过一个时隙时,在数据包长度内不换频道。这类数据包如DH3,DH5数据包。 这类数据包会降低跳频频率,这种情况主要发生在经典蓝牙中。
总结:蓝牙跳频技术的优点在于增强了通信的安全性和鲁棒性。由于频率的快速跳跃,干扰者很难在短时间内捕捉到完整的数据,并进行有效的干扰。此外,蓝牙跳频还可以避免与其他无线设备的频率冲突,提供更可靠的无线通信连。
7. 蓝牙功率介绍
蓝牙功率分3个级别:
功率等级 功率限制 覆盖距离
Class 1: 0dBm~20dBm; 100米
Class2: -6dBm~4dBm; 10米
Class3: 小于0dBm; 1米
我们常见的就是Class2,功率一般在0dBm附近。不过不是标准值,功率在Class1-2之间。
8. 蓝牙发射模式
vco 发射模式。让蓝牙在某个固定频点发射无调制的射频信号。
continues 模式。让蓝牙在某个固定频点持续发射调制信号。
burst 模式,让蓝牙在某个频点或者跳频发射相应的包类型的调制信号。
9. 蓝牙发射的包类型
1)经典蓝牙发射包类型:
DH1、DH3、DH5、2DH1、2DH3、2DH5、3DH1、3DH3、3DH5。
按调制方式分类:
DH1、DH3、DH5 属于 BDR 的包类型,调制方式为 GFSK;
2DH1、2DH3、2DH5 属于 EDR 的包类型,调制方式为π /4-DQPSK;
3DH1、3DH3、3DH5 属于 EDR 的包类型,调制方式为 8DPSK。
2)BLE蓝牙发射包类型:一般是BLE_1M、 BLE_2M:
在做BQB认证时当做经典蓝牙定频测试时应该选择:DH1、DH3、DH5、2DH1、2DH3、2DH5、3DH1、3DH3、3DH5。
做BLE认证时定频测试应该选择: BLE_1M、 BLE_2M;
10. 数据包类型:
1) SCO Packets: Packet, HV2 Packet, HV3 Packet,DV Packet。
2) eSCO packet: EV4、EV5 for Basic Rate 2-EV3,3-EV3,2-EV5,3-EV5 for Enhanced Data Rate
3) ACL packet DM1, DH1, DM3, DH3, DM5, DH5 and AUX1 for basic Rate
2-DH1, 3-DH1, 2-DH3, 3-DH3, 2-DH5 and 3-DH5 for Enhanced Data Rate
4) command packet; 命令控制类型;一般为host向controller发送的指令;
5) event packet: 事件类型。一般是controller上报给host主机;
11. 天线类型:
1)PCB天线:成本极低,调试简单,频段单一;
2)陶瓷天线:可以分为块状陶瓷天线和片状陶瓷天线,特点是尺寸小,成本低、性能较好;
3)FPC:成本低,性能好,调试复杂,比较常见的一种天线。
4)LDS:算是FPC的进化版,成本高,空间利用率高,效果好 ;
12. 天线的RF参数:
1) 输出功率:以传导方式测试蓝牙输出功率,耳机/音响输出功率一般在6dBm左右;
2) 灵敏度:以传导方式测试蓝牙灵敏度,一般RF调试比较好的灵敏度一般在 -90dBm左右;
3) 天线效率:测试天线效率装好整机,无源模式在暗室进行测试,一般正常天线效率为50%;
4) OTA数据:理论值OTA的TRP(dBm)和TIS(dBm)和传导方式测试出来的功率和灵敏度是一致的,两者数据越接近效果越好;
5) 驻波比:全称为电压驻波比,又名VSWR和SWR。指传输线波腹电压与波谷电压幅度之比,又称为驻波系数、 驻波比。
---驻波比等于1时,表示馈线和天线的阻抗完全匹配,此时高频能量全部被天线辐射出去,没有能量的反射损耗;
---驻波比为无穷大时,表示全反射,能量完全没有辐射出去。
6) 回波损耗(Return Loss):
---回波损耗是反射波与⼊射波功率之⽐值(Return Loss=-10lg [(反射功率)/(⼊射功率)]),这个比值的绝对值越大天线效果越好。
---阻抗匹配的⽬标⼀般是把回波损耗绝对值控制在大于10dB以上,当回波损耗等于10dB时候,意味着有90%的⼊射功率被加载到负载,只有10%的⼊射功率被反射;
---例如反射功率10%,和反射功率1%,分别带入公式中,可以得出其绝对值分别为10dB和20dB;决定值越高反射功率越小,回波损耗越小,天线效果也越好;
7) 史密斯图(Smith chart)
史密斯图(Smith chart)是一款用于电子工程的图表,主要用于传输线的阻抗匹配上。 一条传输线的阻抗会随其物理长度而改变,要设计一套阻抗匹配的电路,需要通过不少繁复的计算程序,史密斯图的特点便是省去一些计算程序。
13. 蓝牙音频编解码格式:
蓝牙音频编解码格式有如下几种:SBC、AAC、AptX、 LDAC、LHDC/HWA、LC3。
1)SBC(Sub-band coding)-蓝牙官方编解码
SBC是A2DP协议强制规定的一种复杂度较低编解码格式。所有的蓝牙设备都支持这个协议。 支持16kHz、32kHz、44.1kHz以及48kHz的采样率,数据传输速率为328kbps。
优点:是通用性强,缺点就是作为基础解码格式音质较差,延迟较高,区间在170ms-270ms。
2)AAC:高级音频编码(苹果产品使用较多)
AAC是高级音频编解码(Advanced Audio Coding)的缩写, 最初是基于MPEG-2的音频编码技术
作为一种新的音频格式,它具有8 KHz至96 KHz的更多采样率选择,更高的声道数上限(48个),它的延迟较之SBC更好,区间在90ms-150ms。
AAC在蓝牙中常用的比特率是256Kbps。使用AAC音频源,蓝牙并不能直接传输其原数据流,而是先将AAC解码成PCM,然后再编码成蓝牙支持的AAC编码再传输。
3) aptX:5大技术提升音质
aptX原名叫apt-X,CSR在2010年将其收购,改名为aptX,而CSR于2015年被高通收购。
aptX 包含五种技术,包括 aptX,aptX HD、aptX Low Latency、aptX adaptive以及aptX Lossless。根据名字可以认为,分别是传统aptX,高品质aptX、低时间延迟aptX自适应aptX以及无损aptX。
---aptX:aptX 采用高性能、无损压缩算法,支持48kHz/16位LPCM音频数据,从而打造出CD级的高品质音质,数据传输速率352kbps,延迟为100-200ms;
---aptX HD:aptX HD通过蓝牙实现24bit高清(HD)音质。aptX HD支持48kHz/24位LPCM音频数据,采样率的提升也带来更低的信噪比,并显著降低失真。
aptX HD 技术可让你听清音乐中最微小的细节,提供与现场表演的实际声音难以区分的逼真音质,数据传输速率576kbps,延迟在200ms左右;
---aptX Low Latency:aptX 系列的另一颠覆性技术是 aptX 低延迟,这项技术可以通过蓝牙实现优质音质和低延迟。支持16位/44.1KHz音频,小于40ms低延迟,可以同步电影和游戏音频;
---aptX adaptive:支持最高96kHz/24bit采样率,属于高通骁龙畅听技术,它的工作模式有默认/低延迟二种,由于自适应的特性,可以在276-420kbps动态调整,延迟控制在50-80ms。
---aptX Lossless:高通最新发布的音频技术,最高采样率可以达到96kHz/24bit,而码率则提升到惊人的最高1000kbps,也就是所谓的支持「无损音质」。
4) LDAC:索尼公司创建的标准;
码率最高可以达990kbs进行传输,同时最高支持48kHz/96bit,也就是所谓的 Hi-Res Audio。
LDAC提供了三种传输模式,以质量为优先的990kbps模式,默认的660 kbps标准模式,以及与普通蓝牙标准差不多的330kbps模式。
LDAC也是第一个获得Hi-Res Audio Wireless(无线高解析音频标识)认证的编码格式,认证标准为模拟音频频响需要达到40 KHz以上,数字音频采样率则需要达到96KHz/24 bit以上。
5)LHDC:新生代音频解码
LHDC全称Low-Latency Hi-Definition Audio Codec,是一种高音质蓝牙编码方案,支持高解析度音频。
支持传输24bit/96kHz/900kbs的音频,得益于这个数据,LHDC也获得了Hi-Res Audio Wireless认证。
LHDC根据蓝牙信号稳定情况支持400/560/900 kbps的比特率。此外还有低延迟音频编解码器(LLAC)版本,也称为LHDC LL,延迟约为30ms;
6)HWA:属于中国的音频标准
HWA即为HWA联盟,全称为高清音频无线传输标准与产业联盟,成立于2018年9月。HWA联盟是由华为与中国音响协会主导。 它是一项基于LHDC音频编码技术的认证标准,并非蓝牙音频编码。可以提供三种码率模式,分别是400kbps/500kbps/560kbps与900kbps。
7)LC3:蓝牙未来全新标准
LC3正是蓝牙5.2协议版本中更新的全新高音质、低功耗音频编解码器。
它能够以多种位速率对语音和音乐进行编码,并且可以加入到任何蓝牙音频配置文件中。得益于它的低复杂性以及较低的frame duration,能够做到更低的蓝牙传输延迟。而且与SBC编码器相比,即使LC3比特率降低50%,也能提供很好的音质保证。
相较于之前的SBC、AAC和aptX编解码器,它还支持多种位深度(16/24/32bit)以及支持多种采样率(8kHz、16kHz、24kHz、32kHz、44.1kHz和48kHz), 码率上也支持64kbs、96kbs、128kbs、192kbs以及248kbs。
14. 几种工作状态:
有五种工作状态:
1)待机状态(Standby State):即为初始状态,设备没有传输数据,也没有连接到任何设备;可由其他任何一种状态进入,也可以切换至除Connection状态外的任何一种状态。
2)广播状态(Advertising State):通过广播信道周期性的发送数据状态,由Standby状态进入; 广播的数据可以由处于Scanning或者Initiating状态的实体接收;
3)扫描状态(Scanning State):主动地寻找正在广播的设备,通过广播通道接收数据的状态,由Standby状态进入;
4)发起连接状态(Initiating State): 和Scanning状态类似,不过是一种特殊的接收状态,由Standby状态进入,只能接收广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接;当连接成功后,Initiater和对应的Adverstiser都会切换至Connection状态;
5)连接状态(Connection State):是和某个实体建立了单独通道连接的状态,在通道建立之后,由Initiating或Advertising自动切换而来。通道断开后,会重新回到Standby状态。
15. 蓝牙ble地址分类:
1)公共地址:
类似于Wi-Fi设备的48位的物理地址。正常情况下,该地址需要向IEEE申请购买。通过付费,来保证地址的唯一性。 高24位是公司标示,低24位是自定义赋值。
2)随机地址:
设备地址不是固定分配的,而是在设备启动后随机生成的。可以节约开销,另外由于mac地址不固定,比较安全。可分为:静态设备地址和私密设备地址。
3)静态地址:
最高两位为1, 其它46位是一个随机数,不能全为0和1;且在一个上电周期内保持不变;
4)私有地址:
也是随机生成,要求更高,通过定时更新和地址加密两种方法,提供蓝牙地址的可靠性和安全性。又可分为可解析地址和不可解析地址。
5)可解析地址:
通过一个随机数和一个称为identity resolving key(IRK)的密码生成的。因此只能被拥有相同IRK的设备扫描到,可以防止被未知设备扫描和跟踪。
由两部分组成:
---高位24bits是随机数部分,其中最高两个Bit为'10',用于标识地址类型;
---低位24bits是随机数和IRK经过hash运算得到的hash值;
6)不可解析地址:
最高两位为1, 其它46位是一个随机数,不能全为0和1;以T_GAP(private_addr_init)为周期,定时更新。
1) 协议栈各层介绍:
---Radio:
无线电层是蓝牙规范的最低定义层。其中BR模式是强制性的,而EDR模式是可选的; 该层定义了在2.4GHz ISM频带中工作的蓝牙收发器设备的要求。BR/EDR实现了1600跳/秒的FHSS技术,它以伪随机方式在79个指定的蓝牙信道上跳跃。蓝牙BR/EDR无线电使用时分双工(TDD)拓扑,其中数据传输在一个方向上可同时发生。
---BaseBand:
负责协调基带资源的。蓝牙基带承载很多蓝牙链路,那么这些链路需要分时复用基带资源,Baseband resource manager就是来协调基带资源的。
---LMP:
LMP层主要负责不同蓝牙设备之间的链路设置和链路配置。这些过程包括通过生成、交换和检查链接和加密密钥来建立安全功能,如身份验证和加密。此外,该层控制蓝牙无线电设备的功率模式和占空比以及蓝牙单元的连接状态。
---HCI:
HCI为BR/EDR无线电、基带控制器和链路管理器提供命令接口。它是一个用于访问蓝牙基带功能、硬件状态和控制寄存器的单一标准接口。
---L2CAP:
给较高层协议屏蔽了较低层协议的细节,可向更高层协议提供面向连接和无连接的服务,这包括协议复用能力、分段和重组操作以及组抽象
---RFCOMM:
RFCOMM通过L2CAP提供串行端口仿真。RFCOMM通过蓝牙基带模拟RS-232控制和数据信号,并为使用串行接口作为传输机制的更高层服务提供传输能力。RFCOMM还提供到一个设备的多个同步连接,并支持到多个设备的连接。
---SDP:
蓝牙框架中的服务发现模块,是构建在L2CAP之上基础协议。服务发现协议(SDP)为应用程序提供了一种查询服务和服务特性的方法,随后可以在两个或多个蓝牙设备之间建立连接。
2) BR/EDR蓝牙Profile:
为了保持蓝牙设备之间的兼容性,Bluetooth规范中定义了Profile。可以把Profile理解为连接层或者应用层协议,定义了设备如何实现一种连接或者应用。蓝牙产品都无须实现全部的Bluetooth Profile。
在所有的Profile中,有四种是最基本的Profile,这些Profile会被其它的Profile使用,它们是GAP/SDAP/SPP/GOEP Profile。
(1) 四个基本Profile:
--- GAP(Generic Access Profile):
保证不同的Bluetooth产品可以互相发现对方并建立连接。GAP定义了蓝牙设备如何发现和建立与其他设备的连接。 GAP具有强制性,是其它蓝牙应用规范的基础。
---SDAP(Service Discovery Application Profile):
SDAP描述了应用程序如何使用SDP发现远程设备上的服务。通过该Profile, 一个Bluetooth设备可以找到其它Bluetooth设备提供的服务,以及查询相关的信息。
--- SPP(Serial Port Profile):
定义了如何在两台BT设备之间建立虚拟串口并进行连接。
---GOEP(Generic Object Exchange Profile):
定义的是数据的传输,包括同步,文件传输或者推送其它的数据。可以理解为与内容无关的传输层协议,可以被任何应用用来传输自己定义的数据对象。
(2) 常用的Profile:
HSP(手机规格)--- 提供手机(移动电话)与耳机之间通信所需的基本功能。连接和配置好后,耳机可以作为远程设备的音频输入和输出接口。
HFP(免提规格)---描述了免提设备如何使用网关设备拨打和接听电话。HFP包括两个角色:Audio Gateway(AG,音频网关)和Hands-Free Unit(HF,免提设备)。AG是音频输入和输出的设备,典型配置如汽车使用手机作为网关设备。
A2DP(高级音频传送规格)---规定了使用蓝牙非同步传输信道方式,传输高质量音乐文件数据的协议堆栈软件和使用方法,基于该协议就能通过以蓝牙方式传输高品质的音乐了。这个技术可以利用立体声蓝牙耳机来收听手机中的音乐了。
AVRCP(音频/视频遥控规格)---用于从控制器(如立体声耳机)向目标设备发送命令。定义了如何控制流媒体的特征。包括暂停、停止、启动重放、音量控制及其它类型的远程控制操作。
OPP(Object Push Profile)---定义了推送服务器和推送客户端两种角色。OPP 可用于发送对象,如vCard、vCalendar、图片等。
DUN(Dial-up Networking Profile)---实现一台蓝牙设备通过另外一个带无线功能的蓝牙设备共享上网。
PAN(个人局域网配置文件)---个人局域网配置文件。它描述了两个或更多个蓝牙设备如何构成一个即时网络,以及如何使用同一机制通过网络接入点接入远程网络。
AVDTP(Audio Video Distribution Transport Protocol)---音视频分发传输协议。
AVCTP(Audio Video Control Transport Protocol)--- 音视频控制传输协议。
HID(Human Interface Device Profile)--- 人机接口设备,定义了蓝牙在人机接口设备中的协议、特征和使用规程。典型的应用包括蓝牙鼠标、蓝牙键盘、蓝牙游戏手柄等。
MAP(Message Access Profile)--- 短信访问规范。
PBAP(Phonebook Access Profile)---电话号码簿访问协议。
1)协议栈各层介绍:
PHY层(Physical layer物理层)--- PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
LL层(Link Layer链路层)--- LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。
HCI(Host controller interface)---HCI主要用于host和controller 两颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等,是可选的;
L2CAP层(Logic link control and adaptation protocol)--- L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。
GAP层(Generic access profile)---GAP主要管理设备连接通信的。用来进行广播,扫描和发起连接等动作。
SMP(Secure manager protocol)--- SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。
ATT(Attribute protocol)---ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令操作,如:
read/write/indicate/notify几种操作。
GATT(Generic attribute profile)--- GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,解决了业务层无线通信的兼容性问题;
2) ble常用的profile:
profile概念: 相当于一个大容器,容器里面包含了很多独立的服务。电池、心率计,b血压仪、SPP、HIDS、HRP(心率测试)、Mesh网络等.
服务: 一个服务属于某一大类功能,特性:属于某一类服务的某一个具体功能。
打个比方,现在有个profile文件,里面包含电池电量监测功能、心率功能、温湿度传感器功能等。而这些电池电量监测功能、心率功能、温湿度传感器功能等就是一个个具体的服务。 温湿度传感器服务可以包含温度读取、湿度读取等小功能,这一个个小功能就相当于一个个特性。
profile和服务都只是一个容器,我们真正操作去读写的是里面的特性值。
3) 详解GATT和ATT:
GATT还指定了GATT Server上包含的数据格式。由属性协议传输的属性被格式化为服务和特征。如下图所示:
上图定义了一些概念及它们之间的包含关系,这些概念还是很重要的。可以这么理解:
一个从机设备包括一个或者多个服务;一个服务中又可以包括一条或者多条特征值,每个特征值都有自己的属性 Property,属性的取值有:可读 Read,可写 Write 以及 通知 Notify。分别进行说明如下:
(1)Service — 服务
简单理解就是提供某项服务或功能。比如心率,电池监测等都可以定义为一个服务。系统可以有两种service:主要(primary)和次要(secondary)
--primary: 提供设备的主要功能
--secondary:提供设备的附加功能
(2)Included services — 包含服务
类似于包含头文件,就是将其他共用的服务包含进来。
(3)Characteristic — 特征
可以理解为服务中的某个特性,比如心率服务,就会有个心率值,心率值就可以定义为一个Characteristic 。
一个characteristic包含三种条目:characteristic声明,characteristic的值以及characteristic的描述符(可以有多个描述符);
其中Characteristic declaration: 每个characteristic的分界符。解析时一旦遇到characteristic declaration,就可以认为接下来又是一个新的characteristic了,同时characteristic declaration还将包含value的读写属性等。
(4)Properties — 属性
这里的属性和上面的Attribute不一样。这里的属性定义的是Read / Write / Notify / Indicate等,用于声明Characteristic是否可读可写等属性。
(5)Value — 值
用来保存具体属性的数值,可进行设置修改和读取操作。
(6)Descriptor — 描述符
就是数据的额外信息, 用于描述Characteristic,让用户更能理解该Characteristic的作用和如何使用。比如温度的单位是什么,数据是用小数表示还是百分比表示等之类的数据描述信息.
(7)CCCD:
CCCD是一种特殊的characteristic descriptor,当characteristic具有notify或或者indicate操作功能时,那么必须为其添加相应CCCD,以方便client来使能或者禁止notify或者indicate功能.
(8)UUID值
UUID就是通用唯一标识符,上面提到的Service (服务), Characteristic (特征),Descriptor (描述符) 等都有自己的UUID。因为一个设备肯定会有很多个服务,一个服务中也会包含多个特征,一个特征也可以包含多个描述符。那怎么来区分它们呢? 所以就需要UUID来进行标识区分了。蓝牙对UUID 格式定义都有三种: 16bit UUID、32bit UUID、128bit UUID。
主从设备连接流程主要有以下几步: 广播、扫描、配对、绑定、连接、通信;
(1) 广播包的发送是单向的,不需要任何连接,广播有几种类型:
a. 可连接的非定向广播:这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当前设备可以接受其他任何设备的连接请求;
b. 可连接的定向广播: 定向广播类型是为了尽可能快的建立连接。注意:
---这种报文包含两个地址:广播者的地址和发起者的地址。发起者收到发给自己的定向广播报文之后,可以立即发送连接请求作为回应。
---定向广播类型有特殊的时序要求。完整的广播事件必须每3.75ms重复一次。这一要求使得扫描设备只需扫描3.75ms便可以收到定向广播设备的消息。
---当使用定向广播时,设备不能被主动扫描。此外,定向广播报文的净荷中也不能带有其他附加数据。该净荷只能包含两个必须的地址。
c. 不可连接的非定向广播: 仅仅发送广播数据,而不想被扫描或者连接。这也是唯一可用于只有发射机而没有接收机设备的广播类型。不可连接广播设备不会进入连接态, 因此,它只能根据主机的要求在广播态和就绪态之间切换。
d. 可扫描的非定向广播:又称可发现广播,这种广播不能用于发起连接,但允许其他设备扫描该广播设备。
---该设备可以被发现,既可以发送广播数据,也可以响应扫描发送扫描回应数据,但不能建立连接。
---这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据之中,而静态数据可以包含于扫描响应数据之中。
(2) 在蓝牙4.x协议里,广播数据包最多能携带31个字节的数据,一般包含可读的设备名称,设备是否可连接等信息;而在蓝牙5.0中,通过添加额外的广播信道和新的广播PDU,将有效载荷增加到了255个字节;
(3) 从机每经过一个时间间隔发送一次广播数据包,这个时间间隔称为广播间隔,这个广播动作叫做广播事件,只有当从机处于广播状态时,主机才能发现该从机。
(4) 在每个广播事件中,广播包会分别在37,38和39三个信道上依次广播,广播时间间隔的范围是从20ms到10.24s,广播间隔影响建立连接的时间。广播间隔越大,连接的时间越长。
(5) 另外BLE链路层会在两个广播事件之间添加一个0~10ms的随机延时,保证多个设备广播时,不会一直碰撞广播。也就是说,设置100ms的广播间隔,实际上两次广播事件的时间间隔可能是100~110ms之间的任意时间。
(6) 当主机收到从机广播的数据包后,它可以再发送获取更多数据包的请求,这个时候从机将广播扫描回应数据包,扫描回应数据包和广播包一样,可以携带31个字节的数据。
是主机监听从机广播数据包和发送扫描请求的过程,主机通过扫描,可以获取到从机的广播包以及扫描回应数据包.
(1) 每次扫描设备打开Radio接收器去监听广播设备,称为一个扫描事件.扫描事件交替发生在三个特定的广播通道中: 37, 38, 39;
(2) 扫描频宽比 (Duty-Cycle),关于扫描的两个时间参数:
–--扫描间隔:即扫描设备的扫描频度
–--扫描窗口:每次扫描事件持续的时间
(3) 主动扫描和被动扫描:
---被动扫描,主机监听广播信道的数据,当接收到广播包时,协议栈将向上层(也就是应用层,用户可编程)传递广播包。
---主动扫描,主动扫描除了完成被动扫描的动作外,还会向从机发送一个扫描请求,从机收到该请求时,会再次发送一个称作扫描回应的广播包。
所以,主动扫描比被动扫描,可以多收到扫描回应数据包。
配对包括配对能力交换,设备认证,密钥生成,连接加密以及机密信息分发等过程,配对的目的有三个:加密连接,认证设备,以及生成密钥。 找到并确定需要和自己通信的设备,也就是身份确定,而这一过程仅仅是由启动加密到得到短期秘钥(STK)为止。
绑定是将长期秘钥(LTK)、 身份解析秘钥(IRK)和连接签名解析秘钥(CSRK)这 3个密钥中的某个或者组合进行交换后,将交换的这些密钥存储到数据库中的过程;配对绑定过程只会发生在两个设备之间第一次连接的时候,后面两个设备再次重连的时候直接读取存储的密钥,就可以跳过配对流程。
设备除了扫描,设备也可以主动发起连接,发起方会称为 Master(主机) ,而广播方会称为 Slave(从机)。 连接相关的参数有:
(1)连接事件:
---主设备会在每个连接事件里向从设备发送数据包
---一个连接事件是指主设备和从设备之间相互发送数据包的过程
---连接事件的进行始终位于一个频率,每个数据包会在上个数据包发完之后等待 150s 再发送
---连接间隔决定了主设备与从设备的交互间隔;它是指两个连续的连接事件开始处的时间距离,可以是7.5ms ~4s内的任意值,但必须为 1.25ms 的整数倍,要确定从设备与主设备的实际交与间隔,需要用到从设备延迟这一参数,代表从设备在必须侦听之前可以忽略多少个连接事件.
(2)连接参数介绍:
---主设备和从设备建立连接之后,所有的数据通信都是在连接事件 (Connection Events) 中进行的。
---图中尖刺的波就是连接事件 (Connection events),剩下的Sleeping是睡眠时间,设备在建立连接之后的大多数时间都是处于Sleeping,这种情况下耗电量比较低,而在连接事件 (Connection events)中,耗电量就相对高很多,这也是BLE为什么省电的原因之一。
---每个连接事件 (Connectionevents) 中,都需要由Master发起包,再由Slave回复。
(图中:Master即主机,简称M; Slave即从机,简称S)
(3)连接间隔(Connectionlnterval ):
---两个设备在切换信道后发送和接收数据称为一个连接事件。
---尽管没有应用数据被发送和接收,两个设备仍旧会交换链路层数据(空包 EmptyPDU) 来维持连接
---这个连接间隔就是指在一个连接事件 (Connectionevents) 的开始到下一个连接事件 (Connectionevents)的开始的时间间隔。
---连接间隔以1.25ms为单元,连接间阳的范围是6~3200既7.5ms~4s之间;
(4)从设备时延(SlaveLatency):
---允许Slave (从设备)在没有数据要发的情况下,跳过一定数目的连接事件 (Connectionevents),范围可以是0~ 499;
---在这些连接事件 (Connectionevents) 中不必回复Master (主设备)的包,这样就能更加省电;
---SlaveLatency=OFF也就是SlaveLatency为0时,Master发包,Slave必须回复,如果不回复,Master就会认为Slave那边接收不正常; ---SlaveLatency=ON也就是SlaveLatency不为0的时候,图中SlaveLatency为3。Master发包,Slave没有数据要回复的时候,就会忽略3个连接事件,在第4个连接事件接收到Master发送的数据之后,回复Master。
---如果Slave有数据要发送就会唤醒,也就是说即使SlaveLatency为3,但是在Master发第二包的时候Slave有教据要回复,这个时候就会立即回复Master而不是等到3个连接事件之后的第4个连接事件去回复.
(5)超时时间或监控超时(SupervisionTimeout ):
---这个参数设定了一个超时时间,如果BLE在这个时间内没有发生通信的话,就会自动断开
---单位是10ms,该变量的范围是10~ 3200,折算成时间范围是100ms~ 32s。
---SupervisionTimeout = (1+slaveLatency) * (connectionlnterval);
(6)三个连接参数对通信速率和功耗的影响:
---Connectionlnterval缩短,Master和Slave通信更加频繁,提高教据吞吐速度,缩短了数据发送的时间,当然也增加了功耗;
---Connectioninterval增长,通信频率降低,数据吞吐速度降低,增加了数据发送的时间,当然,这种设置降低了功耗;
---SlaveLatency减少或者设置为0,每次ConnectionEvents中都需要回复Master的包,功耗会上升,数据发送速度会提高;
---SlaveLatency加长,功耗下降,数据发送速度降低;
(7)连接参数更新流程
---连接建立时,主设备通过连接请求数据包发送连接参数;
---连接建立后需要更改参数,主设备向从设备发送连接更新请求,即LL CONNECTION UPDATE REQ,当中携带了新的参数;
---这些参数不必进行协商,从设备或者接受和使用它们,或者断开链路.
---连接更新请求中包含了早先创建连接时用过的一部分参数,还有一个称为瞬时 (instant)的新参教:
传输窗口大小;传输窗口偏移量;连接间隔;从设备延迟;监控超时;瞬时。
---瞬时参数决定了连接更新的开始时刻。发送消息时,主设备为连接更新选定一个未来的时间点,并且放在消息中。 接到消息后,从设备会记住这个未来的时刻,届时再切换至新的连接参数。
---由于低功耗蓝牙没有时钟,要决定瞬时时刻只有依靠计算连接事件的个数。因此,每一个连接事件都会被计数,链路上的第一个连接事件,也就是在连接请求之后的位于首个传输窗口里的连接事件记为 0。
因此,瞬时实际上是个连接事件的计数器,相应的连接事件到来时就使用新的参数。为了让从设备收到数据包,主设备必须为其提供足够的机会。不过从设备延迟是多少,都应该至少保证 6 次数据发送机会。
6) 通信方法
主机可主动向从机Write写入或Read读取数据。从机可主动向主机Notify通知数据。
(1)主机到从机数据读写:write/read
---write: 主机改变从机服务属性值的请求。
---read: 主机获取从机服务属性值的请求。
(2)从机到主机数据通知:indicate/notify
notify和indication的区别:
---notify只是将你要发的数据发送给手机,没有确认机制,不会保证数据发送是否到达。
---indication的方式在手机收到数据时会主动回一个ack回来。即有确认机制,只有收到这个ack你才能继续发送下一个数据。 这保证了数据的正确到达,也起到了流控的作用。
(两个功能在使用时需要先打开设置)
1) 上电初始化
主机、从机上电后(不分先后顺序),首先进行协议栈初始化和相关功能调用.
---主机设备,主机初始化时,需要设置设备类型,设置用于扫描的相关参数,初始化GATT等协议相关的参数。
---从机设备,从机初始化时,需要设置设备名称,广播相关参数,从机Profile等。从机一般会立即开启广播,也可以等待一个事件来触发广播,例如按键触发。
2) 主机扫描从机
按键按下,触发主机扫描从机,此时,主机显示屏打印Scanning正在扫描。此刻的从机仍然处于广播状态。
3) 发现从机设备
当主机扫描到从机时,可以返回已扫描到的从机相关信息,例如可以提取到下图中的从机设备名称,从机MAC地址,从机的RSSI信号值等数据。因此,有些应用在从机的广播包或者扫描回应包中添加自定义字段,这样就可以被主机通过扫描的方式拿到数据。
4) 发送连接请求
当主机扫描到从机后,通过MAC地址向从机发送连接请求。低功耗蓝牙的连接速度非常快,100ms左右即可成功连接上。如果从机的广播比较大,则会影响连接的速度。从机在未收到连接请求之前仍然处于自由的广播状态。
5) 成功连接从机
当从机收到连接请求后,双方成功建立连接,此时双方的状态均变为已连接状态。然后主机可以调用协议栈提供的接口函数来获取从机的服务。
6) 获取从机服务
获取从机服务通常是在连接成功后就立即执行的,因为只有获取从机的服务后,才能与其通信。 此刻,从机处于已连接状态。响应服务获取请求是在底层自动完成,上层无需理会。
7) 成功获取服务
主机成功获取到从机的服务,例如获取到UUID为0xFFF0的Services,该Service有两个特征值,分别是具有读写属性的0xFFF1,以及具有通知属性的0xFFF2。读写属性是指主机可以读写该特征值的内容。而通知属性是指从机可以通过该特征值向主机发送数据。
8)主机向从机发送数据
主机通过特征值0xFFF1,主动向从机发送自定义数据Hello,当数据成功发送后,主机状态变为:数据已发送。从机将收到主机发来的数据,从机状态变为收到数据。
9) 从机向主机发送数据
从机可以通过Norify的方式主动向主机发送数据, 例如,从机通过特征值0xFFF2发送了一条Notify通知,数据内容为:1234。
10) 发送断开请求
主机和从机任何一方均可以发起断开连接的请求,对方收到后,状态将变为已断开。
11)成功断开连接
从机收到主机发来的断开请求,此刻状态变为已断开。
以上内容都是一些基础性的东西,关于ble和BR/EDR协议数据格式的分析,后续待续.....
到此这篇耳机蓝牙地址是什么(蓝牙耳机地址怎么查)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/24569.html