蓝牙蓝牙核心技术了解(蓝牙协议架构硬件和软件笔记)beautifulzzzz

Bluetooth的系统构成

除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。

蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。

蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。

蓝牙应用程序活动图,如下:

2.1.1  串口仿真RFCOMM介绍

找到服务,RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的,就是SDP,服务发现协议

2.2 蓝牙profile

从3.0版本开始(据说2.1也是支持的?TBD),蓝牙才开始支持BluetoothProfile。BluetoothProfile是蓝牙设备间数据通信的无线接口规范。想要使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件,配置文件定义了可能的应用.

SPP是基于RFCOMM的,spp 协议处于rfcomm的上层,spp的应用需走rfcomm层。如果你使用RFCOMM能够实现,那么也就不需要使用SPP,而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等。不过,还是推荐采用SPP来做,兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFP,HSP,SPP,OPP等诸多具体应用profile的原因。

每个attribute属性被UUID(通用唯一标识符)唯一标识 ,UUID是标准128-bit格式的ID用来唯一标识信息。attributes 被 ATT 格式化characteristics和services形式进行传送。

特征(Characteristics)— 一个characteristics包含一个单独的value值和0 –n个用来描述characteristic 值(value)的descriptors。一个characteristics可以被认为是一种类型的,类似于一个类。

描述符(descriptor)—descriptor是被定义的attributes,用来描述一个characteristic的值。例如,一个descriptor可以指定一个人类可读的描述中,在可接受的范围里characteristic值,或者是测量单位,用来明确characteristic的值。

如上图所示:蓝牙设备可以包括多个Profile,一个Profile中有多个Service,一个Service中有多个Characteristic,一个Characteristic中包括一个value和多个Descriptor。

通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被称为“属性(attributes)”的数据片。目前所有的低功耗应用 profile都是基于GATT。

蓝牙SIG定义了许多profile用于低功耗设备。Profile(配置文件)是一个规范,规范了设备如何工作在一个特定的应用场景。注意:一个设备可以实现多个profile。例如,一个设备可以包含一个心脏监测仪和电池电平检测器。

主从机连接建立过程:

低功耗蓝牙模块主透传协议是针对低功耗蓝牙模块从透传协议设计的,通过本协议模块可替代手机设备与从透传协议模块连接,实现透传功能或直驱控制功能。此协议模块可用作从透传协议模块开发过程中的辅助工具。

BLE主透传协议模块(以下简称MTTM)可以工作在透传模式(TTM)或指令模式(CM)。

MTTM上电启动后,处于待机模式(SBM),此时处于空闲状态,无睡眠,需要用户通过AT指令控制模块连接从设备。在成功与从设备建立链接后,MTTM会自动查找从设备的透传通道,如果从设备属于BLE从透传协议模块(以下简称STTM),MTTM默认进入透传模式,否则默认进入指令模式。

透传模式下,用户CPU可以通过模块的通用串口与STTM进行双向通讯。从MTTM串口输入的数据将转发到STTM,并从STTM的串口输出;从STTM输入的数据将转发到MTTM,并从MTTM的串口输出,从而实现透明传输功能,用户数据的具体含义由上层应用程序自行定义。

透传中数据的格式也是profile,或蓝牙标准profile或自定义simple profile。基本结构依然是:

服务和特征都是用UUID来唯一标识的,UUID的概念如果不清楚请自行google,国际蓝牙组织为一些很典型的设备(比如测量心跳和血压的设备)规定了标准的service UUID(特征的UUID比较多,这里就不列举了)

iOS 有两个框架支持蓝牙与外设连接。

一个是 ExternalAccessory。从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Accessory需要拿到苹果公司的MFI认证。

另一个框架则是本文要介绍的CoreBluetooth,在蓝牙4.0出来之后(注意,硬件上要4s以上,系统要ios6以上才能支持4.0),苹果开放了BLE通道,专门用于与BLE设备通讯(因为它的API都是基于BLE的)。这个不需要MFI,并且现在很多蓝牙设备都支持4.0,所以也是在IOS比较推荐的一种开发方法。现CoreBluetooth在的开发几乎全部基于该框架,本节只介绍CoreBluetooth。

1,CoreBluetooth介绍

如果你要编程的设备是手机的central,那么你大部分用到peripheral API。反之亦然,设备是peripheral,iphone手机是central,所以将大部分使用central API。使用peripheral编程的例子也有很多,比如像用一个ipad和一个iphone通讯,ipad可以认为是central,iphone端是peripheral,这种情况下在iphone端就要使用上图右边部分的类来开发了。

作为一个中心(central)要实现完整的通讯,一般要经过这样几个步骤:

2, 设备ID描述DID

每个与苹果设备兼容的蓝牙接入都必须:支持蓝牙设备ID描述,1.3版本或者更高;使用蓝牙SIG分配的Assigned Numbers文档中的公司标识作为他的Vendor ID值,也就是VID,如果生产商没有蓝牙SIG公司标识,那么蓝牙HID描述接入可能会使用USB Implementers Forum分配的VID;使用他的VID值来标识最终的产品生产商;使用版本值来唯一标识软件的版本;使用ProductID值唯一标识产品。Device ID描述使得苹果产品能够识别远程的蓝牙接入,该信息可以用来在与远程接入交互的时候连接蓝牙描述间的交替互操作。因此Device ID中的信息记录非常重要。

理想情况下,这两个设备应该有不同的产品ID。但是,当他们拥有完全相同的硬件、软件和特性的时候拥有相同的ProductID也是可以允许的。如果他们有任何的不同,就都应该有不同的Product ID。

3,IOS的蓝牙低功耗

蓝牙4.0标准引入了蓝牙低功耗,一种针对有限电池资源的蓝牙接入的无线技术。如果支持蓝牙低功耗的话,接入点需要支持下面的这些特性。(这里更多的是蓝牙芯片商要做的事情)

蓝牙接入需要实现蓝牙4.0标准中定义的外围角色

蓝牙接入需要使用如下广告PDU中的一个:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND。其中ADV_DIRECT_IND不推荐使用。

由蓝牙接入发送的广告信息应该至少包含蓝牙4.0标准中包含的如下信息:Flags;TX Power Level;Local Name;Services。如果需要降低电量消耗或者并不是所有的广告数据都适合放入到广告PDU中的时候,接入点可能将Local Name和TX Power Level数据方知道SCAN_RSP PDU中。需要注意的是根据它的状态,苹果产品可能不会总是执行激活扫描。主要的服务应该总是放在广告PDU中进行广告。次要的服务不应该进行广告。对于接入点不重要的服务信息可能会因为广告PDU中的空间不足而被忽略。广告数据和SCAN_RSP PDU中的扫描响应数据应该遵循蓝牙4.0标准中的格式。

蓝牙接入的广告间隔应该慎重考虑,因为他会影响到发现和连接的性能。对于低功耗的接入,电池资源也应该被考虑在内。为了能够被苹果产品发现,蓝牙接入应该首先使用推荐的广告间隔20ms,并持续至少30秒。如果在这30秒内没有被发现,那么接入点可能会选择节省电池电量然后增加广告间隔,苹果推荐使用如下依次延长的事件间隔来发现蓝牙接入点:645 ms;768 ms;961 ms;1065 ms;1294 ms

蓝牙接入负责用来LE连接的连接参数。接入点需要请求合适的连接参数来在合适的时候发送一个L2CAP连接参数跟新请求。如果他没有符合如下规则,那么连接参数请求可能会被拒绝:Interval Max * (Slave Latency + 1) ≤ 2 seconds;Interval Min ≥ 20 ms;Interval Min + 20 ms ≤ Interval Max;Slave Latency ≤ 4;connSupervisionTimeout ≤ 6 seconds以及Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout。苹果设备不会读取或者使用Peripheral Preferred Connection Parameters特性中的参数。

蓝牙接入应该在任何情况下都能够满足Resovable Private Address。因为私隐方面的考虑,苹果设备将会使用蓝牙4.0标准中定义的随机设备地址。

蓝牙接入不需要请求特殊的授权,如配对、认证或加密等来发现服务和特性。只有在获取特性值或者描述值的时候可能会需要特殊的授权。9

蓝牙接入不应该请求配对。如果处于安全考虑,接入点需要与Central建立绑定关系,外围可以使用Insufficient Authentication错误码在必要的时候拒绝ATT请求。因此苹果设备可能会需要按照既定的安流程程来执行过程。配对可能会需要基于苹果产品的用户认证。

通用接入描述服务:蓝牙接入应该实现按照蓝牙标准4.0中的Device Name特性

通用属性描述服务:只有当接入有能力在生命周期内更改他的服务的时候,该接入点才需要实现Service Changed特性。苹果产品可以使用Service Changed服务特性来决定它是否可以使用之前读取的或者缓存的来自设备的信息。

设备信息服务:蓝牙接入应该实现设备信息服务。服务的UUID不应该包含在广告数据当中。如下的特性需要被支持:Manufacturer Name String;Model Number String;Firmware Revision String;Software Revision String

4,IOS APP开发 的蓝牙操纵API

手机APP要想获得蓝牙设备的一些额外的信息如电量或者操作蓝牙设备,必须通过IOS API。那么IOS底层必然有某种方式来与蓝牙设备交互。 那么电量通过什么来读写呢?自定义 service characteristic?

任何免提的蓝牙耳机都可以在iOS设备的状态栏中显示一个用来标识他电池电量的图标。这个特性被所有的iOS设备所支持,包括iPhone、iPod和iPad。耳机的蓝牙知识通过两个iOS蓝牙HFP AT命令:HFP Command AT+XAPL

最后叮嘱:大家有好的的蓝牙通信的资料链接在下面留言分享下~多谢♪(^∇^*)

THE END
0.蓝牙耳机就一个有声音怎么回事原因可能有四点:1.播放音乐音源本身为单声道,此时只需要播放其他正常音乐即可;2.蓝牙连接故障,需断开蓝牙重新连接;3.无声的耳机电量耗尽,把两个耳机充满电即可;4.蓝牙耳机主板故障,有接触不良等问题,此为硬件故障,需要进行检修。 蓝牙耳机只有一只耳机有声音,原因可能有四点,可逐一进行排查: jvzquC41p0€of|3eqo5nky4769870qyon
1.蓝牙耳机只有一边有声音怎么办步骤一:检查耳机硬件 首先,我们需要检查蓝牙耳机是否有硬件故障。可以尝试将耳机插入其他设备,比如手机或电脑,看看是否仍然只有一边有声音。如果问题依旧存在,那么可能是耳机本身的问题,需要联系售后维修或更换。 步骤二:重新配对蓝牙设备 \如果耳机硬件没有问题,那么可能是蓝牙连接出现了故障。此时,我们可以尝试取消当前设jvzquC41i0vdqwqkpg4dqv3ep1~03@7:13=3::5340nuou
2.蓝牙耳机一个响一个不响怎么办蓝牙耳机一个响一个不响解决方法1、检查蓝牙连接 首先,检查你的蓝牙连接是否正常。如果你同时连接了多个设备,尝试断开其他设备的连接,只保留蓝牙耳机的连接。如果你的蓝牙耳机已经连接,但是一个响一个不响,尝试重新连接一次,或者尝试将蓝牙耳机从设备的蓝牙列表中删除并重新配对。 2、检查电量 jvzquC41yy}/pwiuum4dqv4{lyz069=258iLj?I80jznn
3.蓝牙耳机怎么只有一个耳机有声音其次,蓝牙连接的不稳定或故障也可能导致这一问题。蓝牙连接可能因信号干扰、距离过远或设备未正确配对而出现问题。此时,你可以尝试断开蓝牙连接,然后重新连接,或者关闭耳机和手机蓝牙后重新开启,以确保连接稳定。 再者,耳机本身的电量情况也值得注意。如果蓝牙耳机中一只耳机电量耗尽,而另一只仍有电,那么就会出现一边响一jvzquC41i0vdqwqkpg4dqv3ep1~03A9913>59B6;80nuou
4.x15蓝牙耳机一个响一个不响怎么办1. 可能是一只蓝牙耳机没有电了,可别觉得笔者小题大做,有的蓝牙耳机盒故障,确实出现只给一个耳机充电的现象,耳机又没有指示灯,所以,就出现了一个响一个不响。解决办法:更换耳机充电盒。 2. 可能是其中一个耳机损坏了。解决办法:购买损坏的那只耳机,比如,苹果的蓝牙耳机就是支持单只耳机购买的。 jvzquC41yy}/p€8y0et0kwkq178e6qi4o4ivvq
5.蓝牙耳机一个响一个不响怎么办蓝牙耳机怎么恢复出厂设置在使用蓝牙耳机时,有时候会遇到一只耳机响,一只耳机不响的情况,这可能是由于以下几个原因导致的: 1.检查耳机是否处于配对状态 首先需要检查蓝牙耳机是否处于配对状态。如果没有连接,则需要将耳机与手机或其他蓝牙设备重新配对。 2.检查耳机是否充电 如果蓝牙耳机的电量过低,可能导致耳机无法正常工作。此时需要将耳机连接jvzquC41yy}/gnkqewy/exr1g1;37;=40jznn
6.蓝牙怎么调双耳模式蓝牙耳机一个响一个不响怎么办蓝牙耳机怎么2、等到左右耳机红灯闪烁两次,再取出蓝牙耳机。 3、取出之后,如果可以看到耳机指示灯闪烁,就说明耳机双耳模式已经恢复。 4、然后打开手机蓝牙界面,搜索蓝牙耳机。 5、搜索到之后,进行配对,连接成功后,蓝牙耳机就可以双耳模式播放了。 以上就是关于蓝牙怎么调双耳模式,蓝牙耳机一个响一个不响怎么办,蓝牙耳机怎么恢复双jvzquC41yy}/srwcpm/exr1iqthn~j1{l}t1:6732?/j}rn
7.蓝牙耳机一个响一个不响怎么办蓝牙耳机连接声音断断续续的解决方法蓝牙耳机一个响但另外一个不响可能是连接问题,可重置后再次连接来解决;它还有可能是系统的问题,可重启手机或电脑然后连接耳机;还可能是耳机硬件的问题,比如耳机损坏等等也会造成这种问题,如果是硬件的问题就需要销售方的售后来处理,通常是更换耳机。 蓝牙耳机一个响一个不响怎么办 jvzquC41yy}/lk:30pku1qftfygsg8qpinf1A66937/j}rn
8.蓝牙耳机可以同时连接但是只会有一个有声音蓝牙耳机可以同时连接但是只会有一个有声音 当蓝牙耳机可以同时连接两台设备,但只有一台有声音时,可能由耳机间的断连引起。解决方法包括让耳机靠近自动重新配对、检查音源、确保电量充足,或排查手机设置问题。若耳机未正确配对,会显示两个蓝牙名称,只能单边播放音乐。正确配对后,两个耳机在播放音乐时应都能发声。jvzquC41dnuh0lxfp0tfv8vsa799397671gsvrhng1jfvjnnu174;<:9897
9.一个蓝牙耳机有声一个没声怎么解决1. 检查蓝牙连接。首先检查你的蓝牙连接是否正常,如果同时连接了多个设备,尝试断开其他设备的连接,只保留蓝牙耳机的连接。如果蓝牙耳机已经连接,但是一个响一个不响,尝试重新连接一次,或者尝试将蓝牙耳机从设备的蓝牙列表中删除并重新配对。 2. 检查电量。其次,检查你的蓝牙耳机电量是否充足。如果电量不足,有些蓝牙耳jvzquC41yy}/rqu0ep5gcz4828<187mvon
10.蓝牙耳机两只为何只能连接一只,两个不能同时使用?5条回答:【推荐答案】1、有可能两个蓝牙耳机,在连接手机之前,两个蓝牙耳机没有进行配对,所以才不能够同时使用。2、也有可能是手机允许的最大的连接蓝牙数没有设置好,这种情况可以直接去开发者模式,把最大连接蓝牙设置一下。3、还有可能蓝牙耳机是不同款耳机的左右。jvzquC41ycv/|xq0eqs/ew4cum5ya::424=797mvon
11.苹果手机蓝牙耳机一个响一个不响怎么办详解当苹果蓝牙耳机一个响一个不响时,可能是耳机的电量过低所致,此时可将其放在充电盒里继续充电,若是指示灯显示绿色则表示充满,琥珀色代表电量过低的意思。 2、重新连接 或者是没有设置好所致,此时要将手机上的蓝牙打开,让手机自动识别耳机的设备,找到耳机符号的栏目,将左控制的键位和右边同步,这样耳机的两边都会有声jvzquC41i0vdqwqkpg4dqv3ep1~03?9413<54;9:;0nuou
12.蓝牙耳机一边大声一边小声玩投影的小霖 2022-11-2 17:57 演示机型信息:品牌型号:AirPodsPro系统版本:4A402如今我们很多人使用的都是蓝牙耳机,不过在使用时,有时候会出现一边声大一边声小的情况,这到底是什么原因呢?总结起来可能是手机设置问题、耳机本身问题以及手机硬件问题几个方面,我们可以根据不同情况一一加以解决。 蓝牙耳机一边大声jvzquC41yy}/vxz{kpm/exr1okv0v6:5;3:.37mvon
13.小米的airdots两个蓝牙耳机串联配对方法本文详细介绍如何将两个蓝牙耳机进行串联,实现立体声效果。步骤包括:先关机再开机,等待交替闪烁,确保耳机间正确配对后再与手机连接。强调操作时的耐心和正确步骤。 两个耳机串联的方法, 先串联才能两个耳朵立体声: 拿出两个耳机带上, 按住直到两个耳机都关机. jvzquC41dnuh0lxfp0tfv8icjcotww4ctvodnn4fgvgjn|4325772A;8
14.蓝牙耳机肿么两个同时响?蓝牙耳机肿么两个同时响?耳机 查看全部4条评论回答 写回答 jakeller 首先将蓝牙双耳机全部放到充电仓中,确保它们的电量足够,然后打开手机的蓝牙开关,将蓝牙耳机充电仓靠近打开盖子让手机和耳机配对,配对完成后取出双耳机戴在耳朵上,即可让两只耳机一起响。除此之外iPhone在ios13中还增加了新的功能,可以让一部jvzquC41ycv/|xq0eqs/ew4cum5eg}fknue26B=93:<`7:=86:?`57mvon
15.airpods只有一边有声音怎么回事airpods只有一边有声音原因【详解airpods是苹果推出的一款无线耳机,我们使用的人也是越来越多。airpods只有一边有声音,有可能是以下几种情况引起的:蓝牙配对出现问题、AirPods操纵中的左右声道均衡调节出错、AirPods有一个没有电。 airpods只有一边有声音 1.蓝牙配对出现问题 很有可能因为配对发生问题导致的。这时可以打开手机设置中的蓝牙选项,忽视airpodsjvzquC41i0vdqwqkpg4dqv3ep1~03?=513<95>>370nuou