1.前言

作为Android工程师,对于蓝牙不应该仅仅停留在调用API的层面上,尽量多知道一些,也是技术的成长。本文多半来源于复制粘贴,但是从白话文到稍微技术性方面,也能较好的理解蓝牙方面的应用。由于自己水平有限,文字和理解的勘误难免,如果能互相指教提高,便是最大的荣幸了!

2.技术起源和名称来历

这也是个有趣的知识:蓝牙(Bluetooth)是一种短距离的无线通信技术标准。它最初由瑞典的爱立信公司创制,技术始于公司的1994方案,后来由蓝牙技术联盟订定技术标准,1999年7月26日正式公布1.0版。蓝牙名字来源于10世纪丹麦国王Harald Blatand,英文名字是Harold Bluetooth。无线行业协会组织人员进行讨论,有人认为用Blatand国王的名字命名这种无线技术再好不过了,因为Blatand国王将挪威、瑞典和丹麦统一起来,就如同这项技术将统一无线通信领域一样。因此,蓝牙的名字就这样定了下来。它的标志由H和B两个字母合成,如下图:

3.蓝牙规范介绍

作为一种通用的无线通信技术,规范自然是蓝牙技术的核心。蓝牙规范可分为两个层次,如图1所示:

由上图可知蓝牙规范包括:

  • Core Specification(核心规范),用于规定蓝牙设备必须实现的通用功能和协议层次。它由软件和硬件模块组成,两个模块之间的信息和数据通过主机控制接口(HCI)的解释才能进行传递。
  • Profiles(蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles,下文将介绍几种使用最广泛的蓝牙应用规范。

图上的BlueTooth Core 和BlueTooth Application、Host Controller,都是指"逻辑实体"。所谓“逻辑实体”,需要和日常生活中的"物理实体"区分开。如一块蓝牙芯片、主控CPU,就是指物理实体。而蓝牙协议所描述的这些“逻辑实体”,不一定会和物理实体一一对应。如在实际应用中,host和Bluetooth Application可能会位于同一物理实体中(主控CPU),而Controller单独位于另一个物理实体中(蓝牙芯片)。

蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议和(Buletooth Core)蓝牙应用层协议(Bluetooth Application).蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,定义出各种各种的策略,如FTP,文件传输,局域网等。

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。

3.1 蓝牙核心规范介绍

核心规范是蓝牙协议家族的基础,自蓝牙技术联盟(Bluetooth SIG,Special Interest Group)在1999年颁布蓝牙核心规范1.0版本以来,到目前为止蓝牙SIG一共发布了七个重要版本。每一个版本都促使蓝牙技术朝着更快、更安全、更省电的方向发展。下表所示为蓝牙核心规范发展历史。

版本

规范发布日期

增强功能

0.7

1998年10月19日

Baseband、LMP

0.8

1999年1月21日

HCI、L2CAP、RFCOMM

0.9

1999年4月30日

OBEX与IrDA的互通性

1.0 Draft

1999年7月5日

SDP、TCS

1.0 A

1999年7月26日

第一个正式版本

1.0 B

2000年10月1日

安全性,厂商设备之间连接兼容性

1.1

2001年2月22日

IEEE 802.15.1

1.2

2003年11月5日

快速连接、自适应跳频、错误检测和流程控制、同步能力

2.0 + EDR

2004年11月9日

EDR传输率提升至2-3Mbps

2.1 + EDR

2007年7月26日

扩展查询响应、简易安全配对、暂停与继续加密、Sniff省电

3.0 + HS

2009年4月21日

交替射频技术、802.11协议适配层、电源管理、取消了UMB的应用

4.0 +BLE

2010年6月30日

低功耗物理层和链路层、AES加密、Attribute Protocol(ATT)、Generic Attribute Profile(GATT)、Security Manager(SM)

表中:

  • EDR:全称为Enhanced Data Rate。通过提高多任务处理和多种蓝牙设备同时运行的能力,EDR使得蓝牙设备的传输速度可达3Mbps。
  • HS:全称为High Speed。HS使得Bluetooth能利用WiFi作为传输方式进行数据传输,其支持的传输速度最高可达24Mbps。其核心是在802.11的基础上,通过集成802.11协议适配层,使得蓝牙协议栈可以根据任务和设备的不同,选择正确的射频。
  • BLE:全称为Bluetooth Low Energy。蓝牙规范4.0最重要的一个特性就是低功耗。BLE使得蓝牙设备可通过一粒纽扣电池供电以维持续工作数年之久。很明显,BLE使得蓝牙设备在钟表、远程控制、医疗保健及运动感应器等市场具有极光明的应用场景。
经典蓝牙与低功耗蓝牙的区别

技术规范

经典蓝牙(2.1 &3.0)

低功耗蓝牙(4.0)

无线电频率

2.4GHz

2.4GHz

距离

10米/100米

30米

数据速率

1-3Mbps

1Mbps

应用吞吐量

0.7-2.1Mbps

0.2Mbps

发送数据的总时间

100ms

<6ms

耗电量

1

0.01至0.5

最大操作电流

<30mA

<15mA(最高运行时为15 mA)

主要用途

手机,游戏机,耳机立体声音频流,汽车和PC等

手机,游戏机,PC,表,体育和健身,医疗保健,汽车,家用电子,自动化和工业等

那么,蓝牙核心规范4.0有什么特别之处呢?蓝牙核心规范4.0的模块如图所示:

由图可知,蓝牙核心规范4.0的模块增加了以下几个蓝牙低功耗组件。

  • GATT表示服务器属性和客户端属性,描述了属性服务器中使用的服务层次,特点和属性。BLE设备使用它作为蓝牙低功耗应用规范的服务发现。
  • ATT实现了属性客户端和服务器之间的点对点协议。ATT客户端给ATT服务器发送请命令。ATT服务器向ATT客户端发送回复和通知。
  • SMP用于生成对等协议的加密密钥和身份密钥。SMP管理加密密钥和身份密钥的存储,它通过生成和解析设备的地址来识别蓝牙设备。

3.2 蓝牙应用规范

蓝牙SIG根据不同的应用场景定义了不同的蓝牙应用规范,截止到现在,发布了40个蓝牙应用规范。本节介绍最常用的五个的蓝牙应用规范。

3.2.1  Advanced Audio Distribution Profile

Advanced Audio Distribution Profile 简称为A2DP(高质量音频分发规范)定义了如何将立体声质量的音频通过流媒体的方式从媒体源传输到接收器上。A2DP使用Asynchronous Connectionless Link(ACL,蓝牙异步传输)信道传输高质量音频内容,它依赖于Generic Audio/Video Distribution Profile(GAVDP,通用音频/视频分发规范)。A2DP必须支持低复杂度及Sub-bandCodec(SBC,低带宽编解码),可选支持MPEG1,2音频,MPEG2、4AAC。A2DP的应用场景如图4[1]所示:A2DP的应用场景如图所示:

由图可知,A2DP有两种应用场景分别是播放和录音。

  • 播放场景是具有蓝牙功能的播放器通过A2DP向蓝牙耳机或蓝牙立体声扬声器传送高质量音频。
  • 录音场景是具有蓝牙功能的麦克风通过A2DP向蓝牙录音器传送高质量音频。

和A2DP相关的规范有Video Distribution Profile(VDP,视频分发规范),Audio/Video Remote Control Profile(AVRCP,音频/视频运程控制规范)。

3.2.2  Object Push Profile

OPP(对象推送规范)定义了推送服务器和客户端之间基于Generic Object Exchange Profile(GOEP,通用对象交换规范)进行对象交换的规范。OPP的应用场景如图所示:

由图可知,OPP主要用于手机与手机或者手机与电脑之间通过蓝牙进行文件操作。可交换的文件类型有电话本,备忘录,日程表等文本文件,还有视频,声音,图片,音乐等多媒体文件。

Wi-Fi Direct(WiFi直连)和蓝牙OPP有相同的功能。WiFi直连是WiFi设备之间不需要无线路由器,直接进行对象交换。它的优点是传输距离长、速度快,缺点是功耗高。

3.2.3  Hands-Free Profile

HFP(HFP,免提规范)定义了蓝牙音频网关设备如何通过蓝牙免提设备拨打和接听电话。HFP的应用场景如图所示:

由图5可知,HFP包括两个角色:

  • Audio Gateway(AG,音频网关)和Hands-Free Unit(HF,免提设备)。AG是音频输入和输出的设备,典型的AG设备是手机。HF是执行音频网关的远程音频输入输出设备。
  • HFP常见的场景是汽车上的车载套件,当车载套件和耳机通过蓝牙方式连接到手机时,通过无线蓝牙耳机拨打和接听电话。

和HFP相关的规范有Headset Profile(HSP,耳机规范),Phonebook Access Profile(PBAP,电话簿访问规范)。

3.2.4  Heart Rate Profile

HRP(心率规范)定位与和医疗/健康相关的应用场景中,它使得蓝牙设备能与心率传感器交互。相关场景如图所示:

由图可知:

  • 左图是HRP定义的角色关系。HRP中有两个角色:心率感应器和收集器。心率感应器是GATT服务器,是测量心率的设备,它包含心率服务和设备信息服务,心率服务导出心率测量数据;收集器是GATT客户端,是从心率感应器接收心率测量数据和其它数据的设备。
  • 右图是HRP的应用场景。心率规范用于让设备获得心率传感器的心率测量和其它数据。例如,护士或医生可以用心率传感器测量病人的心率,并把心率数据传到笔记本或手持设备上。

随着人口老龄化,医疗设备和医护人员资源不足,可以运用蓝牙健康规范实现远程医疗。笔者所在的Tieto公司在Android平台上运用心率规范开发了心率测量的原型程序,详细介绍请看视频http://www.youtube.com/watch?v=r_t-hstRgDs&feature=youtu.be。

和HRP相关的健康规范有Glucose Profile(GLP,血糖规范),Blood Pressure Profile(BLP,血压规范BLP),Health Thermometer Profile(HTP,健康体温计规范)。

3.2.5  Cycling Speed and Cadence Profile

CSCP(自行车速度和步调规范)让人们在骑自行车锻炼时跟踪速度和节奏。CSCP也基于GATT的规范。自行车速度和步调规范的角色关系和应用场景如图7所示:

由图7可知:

  • 左图是CSCP的角色关系。CSCP定义了两个角色:自行车速度和步调感应器和收集器。CSC感应器是GATT服务器,向收集器报告车轮转速数据或轴转速数据。CSC感应器包含CSC服务和设备信息服务;收集器是GATT客户端,从CSC感应器接收自行车的速度和步调数据。
  • 右图是CSCP的应用场景。传感器测量被广泛应用于运动和健身,通过传感器来监视和控制训练强调,以及在多个训练中衡量进展情况。自行车速度传感器和自行车踏频传感器是用户测量车轮速度或蹬踏节奏的设备。任何设备实现CSC规范可以与CSC传感器连接并接收数据。

和CSCP相关的规范有Running Speed and Cadence Profile(RSCS,跑步速度和步调规范)。

4. Android中的Bluetooth

Android 4.2之前,Google一直使用的是Linux官方蓝牙协议栈,即知名老牌开源项目BlueZ。BlueZ实际上是由高通公司在2001年5月基于GPL协议发布的一个开源项目,该项目仅发布一个月后就被Linux之父Linux Torvalds纳入了Linux内核,并做为Linux 2.4.6内核的官方蓝牙协议栈。随着Android设备的流行,BlueZ也得到了极大的完善和扩展。例如Android 4.1中BlueZ的版本升级为4.93,它支持蓝牙核心规范4.0,并实现了绝大部分的Profiles。

BlueZ现在正处于其巅峰时期,但好景不长。从Android 4.2即Jelly Bean开始,Google便在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ。虽然因为时间及成熟度的原因,大部分手机厂商在Android 4.2中仍继续使用BlueZ。但据笔者了解,BlueZ的创始者,高通公司也将在基于其芯片的Android参考设计中去除BlueZ,并仅支持BlueDroid。

BlueZ的未来如何笔者姑且不论。不过,能让高通改弦易辙,BlueDroid自有其合理之处。相比BlueZ,BlueDroid最值得称道的地方就是其框架结构变得更为简洁和清晰。另外,借助HAL(Hardware Abstraction Layer,硬件抽象层),BlueDroid终于不再和dbus有任何瓜葛。图8所示为Android 4.2中BlueDroid的框架结构图:

由图可知,Android4.2中BlueDroid框架包括以下几个部分:

  • 应用程序通过android.bluetooth package下的API来调用系统的Bluetooth功能。
  • 应用层空间增加了一个名为Bluetooth的App。它做为系统的bluetooth核心进程而存在。其内部将通过JNI来调用Bluetooth HAL层以完成各种蓝牙请求。
  • Bluetooth HAL也属于Android 4.2新增模块,它由蓝牙核心规范硬件抽象层和蓝牙应用规范硬件抽象层组成。由于HAL层的隔离作用,上层代码可轻松移植到不同芯片平台。
  • 作为整个蓝牙服务的核心,Bluetooth Stack模块则由Bluetooth Application Layer(缩写为BTA)和Bluetooth Embedded System(缩写为BTE)两大部分组成。BTA实现了蓝牙设备管理、状态管理及一些应用规范。而BTE则通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。另外,BTE还包括一个统一内核接口(GKI),蓝牙芯片厂商可借助GKI快速轻松得移植蓝牙协议栈到其他操作系统或手机平台上。
  • Vendor Extentions(厂商扩展):开发者可以添加自定义扩展以实现厂商特定的模块和组件。

除了BlueDroid外,在今年的Google I/O大会,谷歌公司还宣布将于与苹果、微软和黑莓等公司共同支持Bluetooth Smart Ready(BSR,蓝牙智能就绪)和Bluetooth Smart(BS,蓝牙智能)技术。这项技术使蓝牙设备或应用可以非常容易地连接全球成千上万的蓝牙设备,蓝牙使用者的生活也因此变得更加简单。BSR和BS都是建立在蓝牙核心规范4.0和GATT应用规范。即将发布的Android 4.3(MR2)支持BSR技术,使得BS的开发者可以轻易地将其设备和应用与Android BSR设备进行连接和发布。蓝牙使用者运用BS的智能应用配件(如健康监控或医疗设备)收集数据,再传送到支持BSR设备(如智能手机或平板)上。

另外,蓝牙SIG也正在研发工具Bluetooth Application Accelerator(蓝牙应用加速器)。据可靠消息,该工具将随Android 4.3发布,并将帮助开发者在Android 4.3上快速开发蓝牙应用,从而加快相关产品的研发时间。

5.蓝牙传输过程

5.1. 主从机建立过程

6.2. 主从通信透传模块

分为主透传协议模块(MTTM)和从透传协议模块(STTM)。

MTTM可以工作在透传模式(TTM)和指令模式(CM),工作如下:用户通过AT指令控制模块连接从设备。在成功建立链接后,MTTM自动查找从设备的透传通道,如果从设备属于STTM,MTTM默认进入TTM,否则进入CM。

透传模式,目的是实现透传或直驱控制功能,主机CPU可以通过通用串口模块与STTM双向通信,MTTM直接将数据转发给STTM,再从STTM串口输出到从机CPU。反向亦可。

这里后面会再用文章详细介绍。

总结

本文对蓝牙核心规范、蓝牙应用规范以及Android 4.2中的蓝牙协议栈BlueDroid进行了一些简单介绍。

从了解的情况来看,BlueDroid虽然对BlueZ大有取而代之的趋势,但现在它对蓝牙应用规范的支持还不够完善。例如BlueDroid仅支持AVRCP 1.0,而非最新的AVRCP 1.5。所以,国内某些芯片或手机厂商若能及早完成BlueZ相关模块到BlueDroid的移植工作,相信能帮助它们在竞争日趋白日化的移动世界中拔得先机。

另外,作为一种成熟、低功耗无线通信技术的先锋,蓝牙未来在可穿戴设备领域中也将扮演越来越重要的作用。那时,蓝牙或许就会真正像“牙齿”一样成为各种设备中不可或缺的一部分了。

Android蓝牙开发前序知识相关推荐

  1. Android蓝牙开发前序知识-经典蓝牙低功耗蓝牙区别

    最近从网上搜了(抄了)一些经典蓝牙和低功耗蓝牙的区别.关于蓝牙的大概了解,前文已经描述过了. Android中的蓝牙 说到Android中的蓝牙,大家听到的可能有蓝牙1.0.蓝牙2.0.蓝牙3.0.蓝 ...

  2. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  3. Android 蓝牙开发(一) -- 传统蓝牙聊天室

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 一.蓝牙概览 以下是蓝牙的介绍,来自维基百科: 蓝牙(英语: ...

  4. Android蓝牙开发(一)蓝牙模块及核心API

    本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API. 关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现. 蓝牙模块 从蓝牙4.0开始包含两 ...

  5. Android 蓝牙开发(二) --手机与蓝牙音箱配对,并播放音频

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 上一章中,我们已经学习了传统蓝牙的开发,这一章,我们来学习如 ...

  6. Android 蓝牙开发,申请打开蓝牙

    申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH" ...

  7. android蓝牙聊天设备,Android蓝牙开发——实现蓝牙聊天

    最近课上刚好需要做一个课程设计关于蓝牙的就挑选了个蓝牙聊天室,其实关键还是在于对蓝牙API的了解 一.蓝牙API 与蓝牙开发主要的相关类是以下四个 BluetoothAdapter 字面上则理解为蓝牙 ...

  8. Android蓝牙开发系列文章-蓝牙设备类型知多少?

    在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...

  9. Android蓝牙开发(一)之打开蓝牙和设备搜索

    Android蓝牙开发系列目录: https://blog.csdn.net/huangliniqng/article/details/82185635 一.判断是否系统是否支持蓝牙 在使用蓝牙之前, ...

最新文章

  1. Tableau实战系列浏览 Tableau 环境(八) -tableau文件类型、语言和区域设置以及图标
  2. 如何利用OpenSSL生成证书
  3. HDU - 3338 Kakuro Extension(最大流+思维建边)
  4. nginx服务器开启缓存、反向代理
  5. Java实现用户头像上传(修改默认文件大小限制)
  6. URL.createObjectURL()方法
  7. 等保测评--网络安全等级保护工作流程
  8. 电脑usb蓝牙的使用
  9. pythonend输出最后没有逗号_python不换行之end=与逗号的意思及用途
  10. 漫谈国内外Android生态:华为发布的 HMS 服务,对 Mate30 系列无法搭载 Google GMS 的补偿有多大(本人原创)
  11. 【彩艳】ArcGIS影像裁剪说明
  12. office16PowerPoint发现内容有问题
  13. 7. 全概率公式与贝叶斯公式
  14. linux 图片编辑 java_ImageJ For Linux x64(免费开源图片编辑软件)V1.49v官方版下载 - 下载吧...
  15. java在Socket传输中文乱码解决思路及代码
  16. CSCLa测试指标 (照明研究中心) 计算软件
  17. HP-UX 11.31 安装RAC 添加共享磁盘的问题
  18. 判断一个点是否在给定的凸四边形内
  19. layui做折线图_flask+layui+echarts实现前端动态图展示数据效果
  20. Docker容器技术原理(三)rootfs

热门文章

  1. C++ 基本数据类型
  2. [oracle]常用SQL汇总
  3. 刚进入win7系统就提示检测到一个硬盘问题的解决方法
  4. 勒索软件可能已被“终极”解决
  5. Java实现 简单聊天软件
  6. Floodlight之 FloodlightContextStore 数据结构
  7. 为DevOps正确组合IT、文化和实践
  8. Windows 8.1之系统镜像备份功能(1)
  9. 操作系统中的进程与线程
  10. 双机热备+Win2003下集群案例