小米蓝牙音箱199和129协议事件设置后就按序执行吗

蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)
https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf
声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。由于有些文章只做参考或统计不足,如涉及版权请在下面留言~。同时我也在博客分类中新建一个蓝牙通信分类,用来研究分享蓝牙相关技术。
主要参考资料的来源:xubin341719[下面是该前辈的BT系列文章]
下载连接: (基本涵盖所有蓝牙协议)、(三蓝牙版本的核心协议v2.1\v3.0\v4.0)、(蓝牙协议相关初学者必读,开发者参考)
有道笔记分享链接:
下面是摘抄笔记内容:
蓝牙,是一种支持设备短距离通信(一般10m内)的技术。能在包括移动电话、PDA、无线耳机、、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而变得更加迅速高效,为拓宽道路。蓝牙采用结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz
ISM(即工业、科学、医学)。其数据速率为1Mbps。采用传输方案实现。
Bluetooth的系统构成
1、无线射频单元(Radio):负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线。2、基带或链路控制单元(LinkController):进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。3、链路管理单元(LinkManager):负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作。4、蓝牙软件协议实现:如上图紫色部分,这个后面我们做详细说明。
低耗电蓝牙相关规范
(二)蓝牙协议组成
2.1 蓝牙协议架构
蓝牙协议体系中的协议按SIG的关注程度分为四层:
1.核心协议:BaseBand、LMP、L2CAP、SDP; 2.电缆替代协议:RFCOMM; 3.电话传送控制协议:TCS-Binary、AT命令集; 4.选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。
除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。
蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。
蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。
蓝牙应用程序活动图,如下:
串口仿真RFCOMM介绍
找到服务,RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的,就是SDP,服务发现协议
2.2 蓝牙profile
2.2.1 蓝牙profile概述
  从3.0版本开始(据说2.1也是支持的?TBD),蓝牙才开始支持BluetoothProfile。BluetoothProfile是蓝牙设备间数据通信的无线接口规范。想要使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件,配置文件定义了可能的应用.
蓝牙配置文件表达了一般行为,蓝牙设备可以通过这些行为与其他设备进行通信.
蓝牙技术定义了广泛的配置文件,描述了许多不同类型的使用安全.按蓝牙规格中提供的指导,开发商可创建应用程序以用来与其他符合蓝牙规格的设备协同工作.在最低限度下,各配置文件规格应包含下列主题的相关信息.
① 与其他配置文件的相关性
② 建议的用户界面格式
③ 配置文件使用的蓝牙协议堆栈的特定部分.
为执行其任务,每个配置文件都使用堆栈各层上的特定选项和参数.若需要,也可包括必需的服务记录概要。ProfilesAPI层则分别对Audio、Data、Control等提供了不同的模块。目前已规范有四大类、十三种协议规格。
  Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者应用层协议。
? 常用的profile介绍请参考“”,几种种最基本的配置文件为:
1.通用访问配置文件(Generic Access Profile, GAP)
GAP是所有其他配置文件的基础,它定义了在蓝牙设备间建立基带链路的通用方法.除此之外,GAP还定义了下列内容:
① 必须在所有蓝牙设备中实施的功能 
② 发现和链接设备的通用步骤 
③ 基本用户界面术语.
GAP确保了应用程序和设备间的高度互操作性,还允许开发人员利用现有的定义更加容易地定义新的配置文件.GAP处理未连接的两个设备间的发现和建立连接过程.此配置文件定义了一些通用的操作,这些操作可供引用GAP的配置文件,以及实施多个配置文件的设备使用.GAP确保了两个蓝牙设备可通过蓝牙技术交换信息,以发现彼此支持的应用程序.不符合任何其他蓝牙配置文件的蓝牙设备必须与GAP符合以确保基本的互操作性和共存.
2.服务发现应用配置文件(Service Discovery Application Profile, SDAP)
SDAP描述了应用程序如何使用SDP发现远程设备上的服务.由于GAP的要求,任何蓝牙设备都应能够连接至其他蓝牙设备.基于此,SDAP要求任何应用程序都应当能够发现它要连接的其他蓝牙设备上的可用服务.此配置文件可承担搜索已知和特定服务及一般的任务.SDAP涉及了称为“服务发现用户应用程序”的一个应用程序,这是蓝牙设备查找服务所必需的.此应用程序可与向/从其他蓝牙设备发送/接收服务查询的SDP相接.SDAP依赖于GAP,并可以重新使用部分GAP.
3.串行端口配置文件(Serial Port Profile, SPP)
SPP定义了如何设置虚拟串行端口及如何连接两个蓝牙设备.SPP基于ETSI TS 07.10规格,使用RFCOMM协议提供串行商品仿真.SPP提供了以无线方式替代现有的RS-232串行通信应用程序和控制信号的方法.SPP为DUN,FAX,HSP和LAN配置文件提供了基础.此配置文件可以支持最高128kb/s的数据率.SPP依赖于GAP.
4.通用对象交换配置文件(Generic Object Exchange Profile, GOEP)
GOEP可用于将对象从一个设备传输到另一个设备.对象可以是任意的.如:图片,文档,名片等.此配置文件定义了两个角色:提供拉提或推送对象位置的服务器及启动操作的客户端.使用GOEP的应用程序假定链路和信道已按GAP的定义建立.GOEP依赖于串行端口配置文件.
GOEP为使用OBEX协议的其他配置文件提供了通用蓝图,并为设备定义了客户端和服务器角色.对于所有的OBEX事务.GOEP规定应由客户端启动所有事务.但是此配置文件并没有描述应用程序就如何定义要交换的对象或如何实施交换.这些细节留给属于GOEP的配置文件.即OPP,FTP和SYNC去完成.通常使用此配置文件的蓝牙设备为笔记本电脑,PDA,手机及智能电话.
注意:蓝牙1.1版本规范所有蓝牙设备的最小实现必须支持通用访问配置文件,服务发现应用配置文件和串行端口配置文件.
在两台电脑或者Labtop之间就可以建立这种连接,如下图所示:
SPP是基于RFCOMM的,spp 协议处于rfcomm的上层,spp的应用需走rfcomm层。如果你使用RFCOMM能够实现,那么也就不需要使用SPP,而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等。不过,还是推荐采用SPP来做,兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFP,HSP,SPP,OPP等诸多具体应用profile的原因。
2.2.2 蓝牙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的值。
服务(service)—service是characteristic的集合。例如,你可以有一个所谓的“Heart RateMonitor”service,其中包括characteristic,如“heart rate measurement ”。你可以在 找到关于一系列基于GATT的profile和service。
如上图所示:蓝牙设备可以包括多个Profile,一个Profile中有多个Service,一个Service中有多个Characteristic,一个Characteristic中包括一个value和多个Descriptor。
2.3 蓝牙4.0和4.1
? 蓝牙4.0实际是个三位一体的蓝牙技术,它将传统蓝牙、低功耗蓝牙和高速蓝牙技术融合在一起,这三个规格可以组合或者单独使用。也就是说
BLE是蓝牙4.0增加的,之前没有?(TBD)
蓝牙4.0专门面向对成本和功耗都有较高要求的无线方案,其主打特性就是省电、省电、省电。极低的运行和待机功耗使得一粒纽扣电池甚至可连续工作一年之久。它有低功耗、经典、高速三种协议模式。其中:高速蓝牙主攻数据交换与传输;经典蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙以不需占用太多带宽的设备连接为主。这三种协议规范能够互相组合搭配,从而适应更广泛的应用模式。正因为有了三种可以互相组合搭配的协议,蓝牙4.0因此成为唯一一个综合协议规范。它有着极低的运行和待机功耗。此外,低成本和跨厂商互操作性,3毫秒低延迟、AES-128加密等诸多特色,可以用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。
? 蓝牙4.1主打IOT(Internet Of Things全联网),最新的蓝牙4.1标准是个很有前途的技术,其智能、低功耗、高传输速度、连接简单的特性将适合用在许多新兴设备上。
蓝牙4.1设备可以同时作为发射方和接受方,并且可以连接到多个设备上。举个例子,智能手表可以作为发射方向手机发射身体健康指数,同时作为接受方连接到蓝牙耳机、手环或其他设备上。蓝牙4.1使得批量数据可以以更高的速率传输,当然这并不意味着可以用蓝牙高速传输流媒体视频,这一改进的主要针对的还是刚刚兴起的可穿戴设备。例如已经比较常见的健康手环,其发送出的数据流并不大,通过蓝牙4.1能够更快速地将跑步、游泳、骑车过程中收集到。因为新标准加入了对IPv6专用通道联机的支持,通过IPv6连接到网络,实现与Wi-Fi相同的功能,解决可穿戴设备上网不易的问题。
蓝牙4.0和蓝牙4.1的比较
2.3.1 蓝牙4.0低功耗(BLE)
① 低功耗蓝牙Bluetooth Low Energy(BLE)是蓝牙4.0增加的。(?TBD) ,苹果系列都支持4.0.
② Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics。与传统蓝牙()不同,蓝牙低功耗(BLE)的目的是提供更显著的低功耗。这使得Android应用程序可以和具有低功耗的要求BLE设备,如接近传感器,心脏速率监视器,健身设备等进行通信。
③ BLE低功耗蓝牙软件有2个主要组成: OSAL操作系统抽象层和 HAL硬件抽象层,多个Task任务和事件在OSAL管理下工作,而每个任务和事件又包括3个组成:BLE 协议栈,profiles和应用程序。
BLE蓝牙协议栈结构
         附图1 BLE蓝牙协议栈结构图
分为两部分?%B?控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有profile(姑且称为剧本吧,用来定义设备或组件的角色)和应用都建构在GAP或GATT之上。下面由结构图的底层组件开始介绍。
附图 2 BLE低功耗蓝牙系统架构图,图中的Task用附图1BLE蓝牙协议栈结构图来描述
通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被称为“属性(attributes)”的数据片。目前所有的低功耗应用 profile都是基于GATT。
蓝牙SIG定义了许多profile用于低功耗设备。Profile(配置文件)是一个规范,规范了设备如何工作在一个特定的应用场景。注意:一个设备可以实现多个profile。例如,一个设备可以包含一个心脏监测仪和电池电平检测器。
主从机连接建立过程:
2.3.2 蓝牙4.0(BLE)主从通信透传模块
低功耗蓝牙模块主透传协议是针对低功耗蓝牙模块从透传协议设计的,通过本协议模块可替代手机设备与从透传协议模块连接,实现透传功能或直驱控制功能。此协议模块可用作从透传协议模块开发过程中的辅助工具。
BLE主透传协议模块(以下简称MTTM)可以工作在透传模式(TTM)或指令模式(CM)。
MTTM上电启动后,处于待机模式(SBM),此时处于空闲状态,无睡眠,需要用户通过AT指令控制模块连接从设备。在成功与从设备建立链接后,MTTM会自动查找从设备的透传通道,如果从设备属于BLE从透传协议模块(以下简称STTM),MTTM默认进入透传模式,否则默认进入指令模式。
  透传模式下,用户CPU可以通过模块的通用串口与STTM进行双向通讯。从MTTM串口输入的数据将转发到STTM,并从STTM的串口输出;从STTM输入的数据将转发到MTTM,并从MTTM的串口输出,从而实现透明传输功能,用户数据的具体含义由上层应用程序自行定义。
透传中数据的格式也是profile,或蓝牙标准profile或自定义simple profile。基本结构依然是:
1、profile
  profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。
2、service
  service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据
3、characteristic
  characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以 理解为一个标签,通过这个标签可以获取或者写入想要的内容。
  UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识
每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
实际产品中,每个蓝牙4.0的设备都是通过服务和特征来展示自己的,服务和特征都是用UUID来唯一标识的。一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征。特征是与外界交互的最小单位。蓝牙设备硬件厂商通常都会提供他们的设备里面各个服务(service)和特征(characteristics)的功能,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等。比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来与收发数据等。
?4.0中profile的存在是干嘛用的呢,只是一种组织形式存在?
服务和特征都是用UUID来唯一标识的,UUID的概念如果不清楚请自行google,国际蓝牙组织为一些很典型的设备(比如测量心跳和血压的设备)规定了标准的service UUID(特征的UUID比较多,这里就不列举了)
4.0 BLE数据传输可参考下述系列:
(三)Android Bluetooth 架构
1、面向库的架构视图
2、面向进程的架构视图
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介绍
CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心。对应他们分别有一组相关的API和类,如下图所示:
如果你要编程的设备是手机的central,那么你大部分用到peripheral API。反之亦然,设备是peripheral,iphone手机是central,所以将大部分使用central API。使用peripheral编程的例子也有很多,比如像用一个ipad和一个iphone通讯,ipad可以认为是central,iphone端是peripheral,这种情况下在iphone端就要使用上图右边部分的类来开发了。
作为一个中心(central)要实现完整的通讯,一般要经过这样几个步骤:
(1)建立中心角色— (2)扫描外设(discover)(通过接收从设备广播来扫描、发现设备,获得peripheral ID)—
  a, 如果数据中已经和某些蓝牙设备绑定,可以使用BluetoothAdapter.getBondedDevices();方法获得已经绑定的蓝牙设备列表。通过指定特定的peripheral的UUID,central只会discover这个特定的设备。   b, 搜索周围的蓝牙设备受用BluetoothAdapter.startDiscovery()方法   c, 搜索到的蓝牙设备都是通过广播返回,so..。需要注册广播接收器来获得已经搜索到的蓝牙设备
(3)连接外设(connect)(根据peripheral ID连接指定的外设)— (4)扫描外设中的服务和特征(discover)(一个设备里的服务和特征往往比较多,一般会在发现服务和特征的回调里通过service、characteristic UUID去匹配我们关心那些)— (5)与外设做数据交互(explore and interact)— (6)断开连接(disconnect)。
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
HFP命令AT+XAPL
描述:允许通过耳机自定义AT命令发起者:耳机格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
vendorID: 标识生产商的vendor ID的十六进制表示,但是没有0x前缀productID: 标识生产生的product ID的十六进制表示,但是没有0x前缀version: 软件的版本features: 用10进制标识的位标识:
1 = 耳机支持电池电量报告2 = 耳机暂停或者正在充电其他值保留例子: AT+XAPL=ABCD-响应: +XAPL=iPhone,[features]
HFP命令AT+IPHONEACCEV
描述:报告耳机的状态变更发起者:耳机格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],...参数:
Number of key/value pairs : 接下来参数的数量key: 被报告状态变化的类型
1 = 电量等级2 = 暂停状态val: 更改的值
Battery events:0-9之间数字的字符串 A string value between '0' and '9'.Dock state: 0 = undocked, 1 = docked.Example: AT+IPHONEACCEV=1,1,3
(五)硬件接口
一般蓝牙芯片通过UART、USB、SDIO、I2S、PcCard和主控芯片通信。如下图所示,通过UART和主控芯片通信。
最后叮嘱:大家有好的的蓝牙通信的资料链接在下面留言分享下~多谢?(^?^*)
没有更多推荐了,蓝牙协议事件设置后就按序执行吗
-爱问知识网蓝牙4.0协议详解 - 全文
v4.0与以前的版本有根本区别,因为它以两个协议为基础,而非一个协议。 这带来了一些需要Smart品牌解决的问题&Svein-Egil Nielsen解释说。
虽然蓝牙技术联盟(SIG)在很多事情上都备受指责,但是在消费者中成功树立蓝牙品牌却无可非议。早在2008年进行的一项独立调查发现,85%的消费者&认识了无线技术&, 今天这个数字很可能会更高。
随着蓝牙v4.0的推出,技术联盟面临着一个新的挑战,就是准确解释这项技术是什么。 跟以往版本不一样,蓝牙v4.0架构采用了两类不同的无线电技术和协议。一种类型可以与以往版本通信,而另一种则不可以。
从用户所关注的互操性到工程人员所需,技术联盟的答案是,新品牌可帮助消费者在市场上找到所需产品。蓝牙Smart和蓝牙Smart Ready品牌背后所采用的蓝牙v4.0技术正在被广泛应用。
蓝牙4.0BLE介绍
蓝牙4.0支持的角色有:
广播者(BroadCasr)&&广告发送者,不是可连接的设备
观察者(Observer)&&扫描广告,不能够启动连接
外围设备(Peripheral)&&广告发送者,是可连接的设备,在单一链路层连接时作为一个从机
中央设备(Center)&&扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接
广播者跟观察者配对使用不能建立连接。应用:温度跟温度显示器。
中央设备跟外围设备可以进行连接、配对、数据通信。应用:手表跟手机。
BLE连接的过程:
1、外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备,广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称、服务ID等。
2、中央设备(Center)接收到广告后发送一个搜索请求给外围设备(Peripheral),外围设备(Peripheral)返回扫描响应给中央设备(Center)。这样中央设备就知道这是一个可连接的设备。
3、中央设备可以发送一个建立连接的请求给外围设备。进行配对连接,必要时进行绑定操作(连接可以被从机或者主机任一方终止)。
配对(Pairing):建立连接,配对完成后可以进行数据通信。
绑定(Banding): 将配对信息记录下来,如设备地址,这样下次连接时就不需要再次配对的过程(快速连接)。
蓝牙低功耗:
低耗能蓝牙技只用 3 个 信道做广播信道,允许毫秒级快速建立连接,效率远高于传统蓝牙的 32 个信道方式。
少的数据频道和宽频道间隔:传统蓝牙有 79 个数据信道,频道间隔 是 1MHz;低耗能蓝牙有 40 个数据信道,频 道间隔是 2MHz。
传统蓝牙的工作峰值电流一般是 35mA,睡眠状态电流是 0.01mA。
而低耗能蓝牙的工作峰值电流是小于 15mA,睡眠状态电流是 0.004mA
还可以软件设置以下三个参数来降低功耗。
连接间隔:当设备建立连接时,即使没有数据的收发,两设备仍然会通过交换链路层数据来维持连接,连接间隔就是两个连接事件之间的时间间隔。设置范围(7.5ms - 4s)。
从机延迟: 从机可以跳过若干连接事件继续休眠节省功耗。
管理超时:两个成功连接事件之间最大的允许间隔。如果超出这个时间就认为设备断开连接。设置范围(100ms--32s)
蓝牙4.0BLE协议与协议栈的关系
协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发。
协议栈是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人员调用。
蓝牙4.0BLE协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并提供一些应用层A,供用户调用。
注意:虽然协议是统一的,但是协议的具体实现形式是变化的,即不同厂商提供的协议栈是有区别的,例如:函数名称和参数列表可能有区别,选择协议栈以后,需要学习具体的例子,查看厂商提供的Demo演示程序、说明文档(通常,实现协议栈的厂商会提供一些API手册供用户查询)来学习各个函数的使用方式,进而快速地使用协议栈进行应用程序的开发工作。
如何使用蓝牙4.0BLE协议栈
既然蓝牙4.0BLE协议栈已经实现了蓝牙4.0BLE协议,那么用户就可以使用协议栈提供的API进行应用程序的开发,在开发过程中不必过多的关注蓝牙4.0BLE协议的具体实现细节,只需要关注一个核心的问题:应用程序数据从哪里来到哪里去。
至于调用协议栈中函数后,如何初始化应用进行数据发送等工作,蓝牙4.0BLE协议栈已经完成了所需要的初始化。
如果开发过程中确实需要或者是想要了解蓝牙4.0BLE协议,可以查看SIG提供的标准协议规范。
深入理解蓝牙4.0BLE协议栈
协议栈概述
我们以的CC254X系列BLE芯片为例来深入了解下蓝牙4.0BLE协议栈。的蓝牙4.0BLE协议栈包含两部分:主机和控制器。主机和控制器的分离要追溯到蓝牙BR/EDR设备时期,控制器和主机通常会分开实现。
协议栈的实现方式采用分层的思想,控制器部分包括:物理层、链路层、主机控制接口层;主机部分包括:逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;上层可以调用下层提供的函数来实现需要的功能。
协议栈基础
蓝牙4.0BLE协议栈的结构图如下:
详细介绍如下:
1.物理层(Physical Layer,简写 PHY):
是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学与医疗)频段。
2.链路层(Link Layer,简写 LL):
用于控制设备的射频状态,设备将处于五种状态之一:等待、广告、扫描、初始化、连接。广播设备不需要建立连接就可以发送数据,而扫描设备接收广播设备发送的数据;发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受连接请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机,接受连接请求的设备称为从机。
3.主机控制接口层(Host Controller Interface,简写 HCI):
为主机和控制器之间提供标准通信接口。这一层可以是软件或者硬件接口,如UART、SPI、USB等。
4.逻辑链路控制及自适应协议层(Logical Link Control and Adaptaon Protocol,简写 L2CAP):
为上层提供数据封装服务,允许逻辑上的点对点数据通信。
5.安全管理层(Security Manager,简写 SM):
定义了配对和秘钥分配方式,并为协议栈其他层与另一个设备之间的安全连接和数据交换提供服务。
6.属性协议层(Attribute protocol,简写 ATT):
允许设备向另外一个设备展示一块特定的数据,称之为&属性&。在ATT环境中,展示&属性&的设备称为服务器,与之配对的设备称为客户端。链路层状态(主机和从机)与设备的ATT角色是相互独立的。例如:主机设备既可以是ATT服务器,也可以是ATT客户端;从机设备既可以是ATT服务器,也可以是ATT客户端。
7.通用属性配置文件层(Generic Attribute profile,简写 GATT):
定义了使用ATT的服务框架。GATT规定配置文件(profile)的结构。在BLE中,所有被profile或者服务用到的数据块称为&特性&,两个建立连接的设备之间的所有数据通信都是通过GATT子程序处理。GATT层用于已连接的蓝牙设备之间的数据通信,应用程序和profile直接使用GATT层。
当两个设备建立连接之后,它们就处于下面两种角色之一:
GATT服务器:为GATT客户端提供数据服务的设备。
GATT客户端:从GATT服务器读写应用数据的设备。
注意:GATT角色中的客户端和服务器的概念与链路层的主机和从机的概念完全独立,与GAP层角色中的外设和集中器的概念也是完全独立。 主机既可以是GATT客户端也可以是GATT服务器;从机既可以是GATT客户端也可以是GATT服务器。
一个GATT服务器中可包含一个或多个GATT服务,GATT服务是完成特定功能的一系列数据的集合。每一个应用工程大致包含下列三种服务:
(1)强制的GAP服务。这一服务包含了设备和访问信息。例如,设备、设备供应商和产品标示。它是协议栈的一部分,是BLE规范对每一个BLE设备的强制要求。这部分没有提供源代码,而是直接编译到协议栈库文件中了。
(2)强制的GATT服务。这一服务包含了GATT服务器的信息,是协议栈的一部分,同样也是BLE规范对每一个BLE设备的要求。这部分同样没有提供源代码而是直接编译到协议栈库文件中了。
(3)自定义服务。这部分服务包含应用数据的信息,与应用数据的传递密切相关,我们可以按照特定的格式编写自己的GATT服务。
&特性&(Characterisc)是服务用到的值,以及其内容和配置信息。GATT定义了在BLE连接中发现、读取和写入属性的子过程。GATT服务器上的特性值及其内容和配置信息(称为描述符)存储于属性表中。属性表是一个数据库,包含了成为属性的小块数据,除了值本身,每个属性都包含下列属性:
(1)句柄:属性在表中的地址,每个属性有唯一的句柄。
(2)类型:表示数据代表的事物,通常是蓝牙技术联盟规定或用户自定义的UUID(Univeally Unique Identifier)。
(3)权限:规定了GATT客户端设备对属性的访问权限,包括是否能访问和怎样访问。
GATT定义了若干在GATT服务器和客户端之间的通信的子过程:
(1)读特性值:客户端设备请求读取句柄处的特性值,服务器将此值回应给客户端(假定属性有读权限)。
(2)使用特性的UUID读:客户端请求读基于一个特定类型的所有特性值,服务器将所有与指定类型匹配的特性的句柄和值回应给客户端设备(假设属性有读权限)。
(3)读多个特性值:客户端一次请求中读取几个句柄的特性值,服务器将这些特性值回应给客户端(假设属性有读权限),客户端需要知道如何解析这些不同的特性值数据。
(4)读特性描述符:客户端请求读特定句柄处的特性描述符,服务器将特性描述符的值回应给客户端设备(假设属性有读权限)。
(5)使用UUID发现特性:客户端通过发送&特性&的类型(UUID)来请求发现这个&特性&的句柄。服务器将这个&特性&的声明回应给客户端设备,其中包括特性值的句柄以及&特性&的权限。
(6)写特性值:客户端设备请求向服务器特定的句柄处写入特性值,服务器将数据是否写入成功的信息反馈给客户端(假设特性有写权限,另外有一种特殊的写类型是不需要服务器来反馈是否写入成功的信息的,使用的时候根据具体应用来具体分析使用)。
(7)写特性描述符:客户端设备请求向服务器特定的句柄处写入特性描述符,服务器将特性描述符是否写入成功的信息反馈给客户端(假设特性描述有写权限)。
(8)特性值通知:服务器将一个特性值通知给客户端,客户端设备不需要向服务器请求这个数据,客户端收到这个数据时,不需要属性协议层确认特性值是否被成功接收。
(9)特性值指示:服务器将一个特性值指示给客户端,客户端设备同样不需要向服务器请求这个数据,但是跟通知不一样的是,客户端收到这个数据之后,属性协议层必须确认特性值被成功接收。
通知与指示功能的流程如下:
何时发送通知或指示的条件可以在配置文件中设置,也可以通过应用来设置。要想使能通知和指示功能,需要分别在相应的句柄特性描述符写入&0x0001&和&0x0002&,如下表所示:
每个Profile初始化其相应的服务并内在的通过设备的GATT服务器来注册服务。GATT服务器将整个服务加到属性表中,并为每个属性分配唯一句柄。GATT属性表中有一些特殊的属性类型,其值由蓝牙技术联盟定义:
(1)GATT_PRIMARY_SERVICE_UUID:表示新服务的起始和提供的服务类型。
(2)GATT_CHARACTER_UUID:称为&特性声明&,紧随其后的是GATT特性值。
(3)GATT_CLIENT_CHAR_CFG_UUID:这一属性代表特性描述符,它与属性表中它前面最近的句柄处的特性值相关,它允许GATT客户端设备使能特性值通知或者指示。
(4)GATT_CHAR_USER_DESC_UUID:这一属性代表描述符,它与属性表中它前面最近的句柄处的特性值相关,包含一个ASCII字符串,是对相关特性的描述。
8.通用访问配置文件层(Generic Access Profile,简写 GAP):
负责处理设备访问模式和程序,包括设备发现、建立连接、终止连接、初始化安全特性和设备配置。
GAP层总是作为下面四种角色之一:
(1)广播者:不可连接的广播设备。
(2)观察者:扫描设备,但不发起建立连接。
(3)外部设备:可连接的广播设备,可以在单个链路层连接中作为从机。
(4)集中器:扫描广播设备并发起连接,可以在单个链路层连接中作为主机。
外部设备广播特定的数据使集中器知道它是一个可以连接的设备。广播内容包括设备地址以及一些额外的数据,如设备名等,当然也可以是自定义的数据,只要满足广播数据中广告的格式即可。集中器收到广播数据后向外部设备发送扫描请求,然后外部设备将特定的数据回应给集中器,称为扫描回应。集中器收到扫描回应后便知道这是一个可以建立连接的外部设备。这就是设备发现的全过程。此时集中器可以向外部设备发起建立连接的请求。连接请求包括一些链接参数。
GAP层也处理BLE连接中安全特征的初始化。只有在已认证的连接中特定的数据才能被读写,一旦连接建立,两个设备进行配对,当配对完成后,形成加密链接的密钥。典型应用中外设请求集中器提供密钥来完成配对工作,密钥可以是一个固定的值,如000000,也可以随机生成一个数据提供给使用者,集中器设备发送正确的密钥后,两设备交换安全密钥并加密认证链接。
在许多情况下,同一对外设和集中器会不定时地连接和断开,BLE的安全机制中有一项特性允许两个设备之间建立长期的安全密钥信息,这种特性称为绑定,它允许两设备重新连接时快速地完成加密认证,而不需要每次连接时执行配对的完整过程。
蓝牙4.0BLE协议栈分层思想的优点
蓝牙4.0BLE协议栈采用分层思路的最大优点是:将服务、接口和协议这三个概念明确的区分开来。服务说明某一层为上一层提供了一些什么样的功能;接口说明上一层如何使用下一层的服务;而协议涉及到如何实现本层的服务。这样,各层之间就具有很强的独立性,当协议的一部分发送变化时,只需对与此相关的分层进行修改即可,其他分层不需要改变。
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
目前,蓝牙的最新协议是蓝牙5(切记没有5.0,只有5),是BSIG于日发布的新一代...
基于 蓝牙模块 的 智能 LED 彩灯 调光调色 控制思路 如下 : 在此,找一个低功耗蓝牙模块 内...
随着蓝牙4.0的到来,全新的Bluetooth Low Energy(BLE,低耗电蓝牙)技术对我们...
蓝牙发展至今经历了8个版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那...
蓝牙技术让我们在连接各种设备的时候不再被繁多的数据线所束缚,比如音响、电脑,甚至是汽车。目前蓝牙版本...
RF-BM-S01蓝牙模块可以同时工作在桥接(透传)模式和直驱两种模式下。桥接模式下(串口),用户的...
如今,蓝牙4.0(BLE)催生了众多智能硬件,BLE技术为何如此受人青睐?
据介绍,小米便携鼠标外观极简设计,采用和MacBook一样的阳极氧化铝合金外壳,防刮、防划,耐摔防撞...
好的产品经得起层层选拔,派凡科技凭借其推出的iCcur小珂儿童智能体温仪不仅在硬件创新大赛上海分赛区...
MATO WIFI云门铃在由华强芯城和星云智能硬件加速器联合举办的2015 硬件创新大赛总决赛中获得...
蓝牙4.0防丢器即智能蓝牙(Smart Bluetooth)防丢器,采用最新蓝牙4.0技术,简单轻巧...
致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下品佳推出基于蓝牙4.0的 MP...
超低功耗蓝牙空中鼠標采用了基于Freescale超低功耗高性能的Kinetis L系列32位MCU,...
人类已经无法抵挡智能军团来袭了。智能雨伞Davek Alert Umbrella——由位于纽约的Da...
智能LED球泡灯蓝牙方案可分为四个模块:AC-DC恒压模块、DC-DC恒流模块(其路数由调色效果来决...
虽然蓝牙(Bluetooth)3.0都还尚未完全普及,Bluetooth SIG(蓝牙技术联盟,Bl...
本文将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝...
本文将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝...
深圳信驰达(RF Star)蓝牙智能电子烟方案,通过在第三代电子烟管内嵌入BLE模块,并配合智能手机...
电子烟,也叫电子雾化器,是一种低压的微电子雾化设备,把具有烟草香味的溶液通过加热雾化成烟雾状,供吸烟...
受益于新一代蓝牙低功耗标准出炉,现在已是消费性电子品牌厂发展智能手表等可穿戴电子设备的大好时机,相关...
低功耗蓝牙技术成熟,加计手机、平板周边市场进入成熟期,引领蓝牙芯片进入史无前历的爆发期,今年全球蓝牙...
移动医疗是可穿戴式智能设备的重要应用领域,2015年移动医疗市场将增长到230亿美元,移动医疗需要移...
TI 消费类电子以及计算接口产品线经理Roland Sperlich表示,在保留向后兼容性的同时,U...
随着技术不断演进,单一解决方案已无法满足客户多元的设计需求,所以半导体产业在这过去五年多来,开始出现...
作为专业的通信测试业者,您是否也在考虑如何选择合适的解决方案使测试效率和成本达到平衡?是否对测量产品...
蓝牙技术联盟(Bluetooth SIG)主导的Bluetooth Smart Ready与Blue...
德州仪器公司MCU & WCS 业务拓展经理吴健鸿表示,SensorTag的好处在于,可以让用户很方...
专家预测,智能照明有望成为未来智能家居市场的主力军,信驰达蓝牙4.0 LED灯控方案,是在智能照明领...
行动医疗兴起将带动蓝牙(Bluetooth)4.0和近距离无线通讯(NFC)应用版图扩大。为实现行动...
蓝牙技术目前已经发展到4.0版本,与先前的版本相比,大幅改善蓝牙2.1+EDR及3.0+高速传输的技...
简要为您介绍Bluetooth Low Energy技术的发展历程,Bluetooth Smart和...
随着行动装置的势力日渐扩大,更是撩起无线相关技术以及NFC(近距离无线通信技术)的盛行,相对着陪伴行...
近日,CEVA公司宣布与Orca公司合作提供一款蓝牙4.0完整参考设计,该款产品组合集成了Orca的...
本文给出一个手机遥控照明方案的典型应用。此调光台灯支持传统的触摸调光控制和手机调光控制两种方式。其内...
时至2012年,蓝牙技术并未见衰败,而Wi-FiDirect也未见成为消费电子产品标配。两者的交锋还...
德州仪器 (TI) 推出蓝牙 4.0 版 (Bluetooth v4.0) 技术的 CC2560 及...
由于现有蓝牙4.0尚未普及,因此蓝牙技术联盟暂时不会推出新一代蓝牙5.0,而是针对旧有的蓝牙4.0进...
日下午,由广州碧德电子、蓝牙技术联盟、益登科技和Silicon Labs等共同主办...
据国外媒体报道,新款iPod Nano有可能在9月12日的苹果公司媒体发布会上亮相。据说新Nano支...
中电器材成立于一九八四年,是一家著名的专业技术产品分销商,在亚太区设立了十八个办事处,业务范围覆盖到...
蓝牙协议栈是蓝牙通信规范的核心部分,蓝牙协议规定了蓝牙设备的定位、之间的互连操作,以及如何建立连接交...
  专为移动装置设计 MT7650将提供绝佳的高质量点对点语音、数据和影像传输
蓝牙技术联盟(Bluetooth Special Interest Group, SIG)日前宣布正...
蓝牙4.0手机和PC将于今年第四季度面世
3月5日消息,据蓝牙技术联盟(Bluetooth Spe...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-

我要回帖

更多关于 小米蓝牙耳机怎么样 的文章

 

随机推荐