一、蓝牙概述

蓝牙是一种短距离通信的无线电技术。特点:
1.分散式网络结构
2.点对点或多点通信
3.快跳频和短包技术
4.工作在2.4GHz ISM(工业,科学,医学缩写)频段
5.时分全双工传输

蓝牙4.0规范(2012年)开始支持低功耗蓝牙(Bluetooth Low Energy,BLE),低功耗运行和待机可以使得一颗纽扣电池运行一年。实际上,从蓝牙4.0开始支持传统蓝牙、低功耗蓝牙和高速蓝牙的技术融合,具有低功耗、经典和高速三种模式,低功耗模式用在不需占用太多带宽的设备连接,经典模式用以信息沟通、设备连接,高速模式主要用来数据交换与传输。有效距离在100米内,速度在24Mbps。

蓝牙4.1规范(2013年)进一步降低功耗,提高传输效率,加入IoT(Internet of Things)思想,可以同时作为发送和传输角色、互联多个节点,加入了IPv6的上网支持。

蓝牙4.2规范(2014年)加强了物联网部分,支持IPv6/6LoWPAN或Bluetooth Smart网关,具有更高的传输速度及安全节能性能。

蓝牙5.0规范(2016年)提高了低功耗性能,低功耗有效距离可达300米,是蓝牙4.2低功耗版本的4倍;具有定位辅助功能,结合wifi可以实现1米内定位。

二、蓝牙基本架构:


1.底层硬件模块
(1)无线射频模块(Radio):蓝牙最底层,带微带天线,负责数据接收和发送。
(2)基带模块(BaseBand):无线介质访问约定。提供同步面向连接的物理链路(SCO)和异步无连接物理链路(ACL),负责跳频和蓝牙数据及信息帧传输,并提供不同层次的纠错功能(FEC和CTC)。
(3)链路控制模块(LC):蓝牙数据包的编码和解码。
(4)链路管理模块(LM):负责创建、修改和发布逻辑链接,更新设备间物理链接参数,进行链路的安全和控制。
(5)主机控制器接口(HCI):是软硬件接口部分,由基带控制器、连接管理器、控制和事件寄存器等组成;软件接口提供了下层硬件的统一命令,解释上下层消息和数据的传递。硬件接口包含UART、SPI和USB等。

2.中间协议层
(1)逻辑链路控制与适配协议(L2CAP):蓝牙协议栈的基础,也是其他协议实现的基础。向上层提供面向连接和无连接的数据封装服务;采用了多路技术、分割和重组技术、组提取技术来进行协议复用、分段和重组、认证服务质量、组管理等行为。
(2)音视频发布传输协议(AVDTP)和音视频控制传输协议(AVCTP):二者主要用于Audio/Video在蓝牙设备中传输的协议,前者用于描述传输,后者用于控制信号交换的格式和机制。
(3)服务发现协议(SDP):蓝牙技术框架至关重要一层,所有应用模型基础。动态的查询设备信息和服务类型,建立一条对应的服务通信通道,为上层提供发现可用的服务类型和属性协议信息。
(4)串口仿真协议(RFCOMM):实现了仿真9针RS232串口功能,实现设备间的串行通信。
(5)二进制电话控制协议(TCS):基于 ITU-T Q.931 建议的采用面向比特的协议,它定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。

蓝牙Profile:
Bluetooth Profile是蓝牙设备间数据通信的无线接口规范。目前有四大类、十三种协议规则,厂商可以自定义规格。几种最常见的Profile文件:
(1)通用访问配置文件(GAP):其他所有配置文件的基础,定义了在蓝牙设备间建立基带链路的通用方法,并允许开发人员根据GAP定义新的配置文件。包含所有蓝牙设备实施的功能,发现和连接设备的通用步骤,基本用户界面等通用操作。
(2)服务发现应用配置文件(SDAP):描述应用程序如何用SDP发现远程设备服务,可与向/从其他蓝牙设备发送/接收服务查询的SDP连接。
(3)串行端口配置文件(SPP):基于ETSI TS 07.10规格定义如何设置虚拟串行端口及如何连接两个蓝牙设备。速度可达128kb/s。
(4)通用对象交换配置文件(GOEP):可以将任意对象(如图片、文档等)从一个设备传输到另一个设备。

Profile框架:
Profile(一种规范)包含若干Service(一个服务)及其他项,Service包含若干Characteristic(一个标签),Characteristic包含一个value和若干descriptor。descriptor是被定义的attribute。每个attribute属性被UUID(通用唯一标识符)唯一标识,UUID是标准128-bit格式的ID用来唯一标识信息。attributes 被ATT格式化characteristics和services形式进行传送。如下图所示:

具体请参考nrf51822蓝牙笔记之GAP(通用属性配置文件)解读 - 一颗偏执的心 - 博客频道 - CSDN.NET。
TI UUID参考:http://processors.wiki.ti.com/images/a/a8/BLE_SensorTag_GATT_Server.pdf

Android蓝牙代码使用参考:Bluetooth Low Energy–蓝牙低功耗 3.应用层协议
也叫选用协议层,包含PPP、TCP、TP、UDP、OBEX、IrMC、WAP、WAE等协议。

(1)对象交换协议(OBEX):支持设备间数据交换,采用客户/服务器模式提供与 HTTP(超文本传输协议)相同的基本功能。定义了可用于交换的电子商务卡、个人日程表、消息、和便条等格式。

(2)无线应用协议(WAP):数字蜂窝电话和其它小型无线设备上实现因特网业务。支持移动电话浏览网页、收取电子邮件和其它基于因特网的协议。

(3)无线应用环境(WAE):WAP电话和个人数字助理。

三、蓝牙协议栈层次


1.物理层(PHY)

射频传输
2.链路层(LL)

控制射频状态,包括等待、广告、扫描、初始化、连接
3.主机控制接口层(HCI)

主机和控制器通信接口
4.逻辑链路控制及适配协议层(L2CAP)

提供数据封装服务,允许逻辑上点对点通信
5.安全管理层(SM)

加解密,为安全连接和数据交换提供服务
6.属性协议层(ATT)

允许设备(服务器)向另一个设备(客户端)展示特定的数据(属性)。
7.通用属性配置文件层(GATT)

定义了使用ATT的服务框架,两个建立连接的设备之间的所有数据通信都是通过GATT子程序处理。
8.通用访问配置文件层(GAP)

对所有蓝牙设备提供共同的功能,如传输模式和访问程序、协议和应用描述。GAP服务包含设备发现、连接模式、安全、认证、联合模型和服务发现。

以上具体参考蓝牙小故事 - 知乎专栏

四、蓝牙传输过程

1.主从机建立过程如下图:

2.主从通信透传模块

分为主透传协议模块(MTTM)和从透传协议模块(STTM)。
MTTM可以工作在透传模式(TTM)和指令模式(CM),工作如下:用户通过AT指令控制模块连接从设备。在成功建立链接后,MTTM自动查找从设备的透传通道,如果从设备属于STTM,MTTM默认进入TTM,否则进入CM。
透传模式,目的是实现透传或直驱控制功能,主机CPU可以通过通用串口模块与STTM双向通信,MTTM直接将数据转发给STTM,再从STTM串口输出到从机CPU。反向亦可。

3.蓝牙HID协议传输

HID定义了在人机接口设备中的协议、特征和使用规程。应用包含蓝牙鼠标、蓝牙键盘和蓝牙游戏手柄等。

(1)Bluetooth HID Reports:Input,Output,Feature
(2)Bluetooth HID Channels:Control Channel(分为ACK和UNACK),Interrupt
Channel(分为中断in和中断out)
(3)Bluetooth HID Protocol Modes:Report Protocol Mode,Boot Protocol Mode
HID Message大小不能超过L2CAP的MTU大小,Message Header格式如下图:


HANDSHAKE:用于SET_REPORT/SET_IDLE/SET_PROTOCOL请求告知

HID_CONTROL:控制Bluetooth HID设备状态改变

GET_REPORT:Bluetooth HID Host 向Bluetooth
HID设备的请求传输

SET_REPORT:Bluetooth HID Host向Bluetooth
HID设备的发起传输

GET_PROTOCOL:用来获取Bluetooth HID设备的Protocol Mode,然后Bluetooth HID设备响应一个data来说明Protocol Mode

SET_PROTOCOL:用来设置Bluetooth HID设备的Protocol Mode

DATA:代表一个HID数据负载
传输过程如下图所示:

【Android】BLE:蓝牙低功耗基础相关推荐

  1. Android ble连接过程,Android BLE的一些基础知识及相关操作流程 - 全文

    前言: 本文主要描述Android BLE的一些基础知识及相关操作流程,不牵扯具体的业务实现,其中提供了针对广播包及响应包的解析思路,希望对正在或即将面临Android BLE开发的伙伴们有所引导. ...

  2. Android BLE蓝牙详细解读

    代码地址如下: http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能 ...

  3. 快速接入 Android BLE 开发的基础框架

    代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...

  4. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)

    上篇文章主要介绍了关于BLE的一些基础操作,我们能够大概了解到蓝牙操作的一些流程,上文末介绍了本人的一个BLE开源库,支持蓝牙一对多的连接方式,该库封装了蓝牙的开启.扫描.连接.断开.连接超时...一 ...

  5. Android BLE蓝牙踩坑总结

    简介 自从Android-BLE库开源了一段时间以来,越来越多的小伙伴问到了各种各样的关于BLE的奇怪问题,在这里我想跟大家分享一下本人对于Android BLE蓝牙的一些看法和解决方式,避免刚接触的 ...

  6. Android BLE蓝牙开发知识总结

    Android BLE蓝牙开发知识总结 1.蓝牙介绍 1.1什么是蓝牙?    蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换(使用2 ...

  7. Android Ble蓝牙开发总结

    Android Ble蓝牙开发总结 前言 本文总结了ble的搜索,连接,读写操作.以及在开发过程中可能遇到的坑. 首先我们需要知道,什么是ble. 蓝牙发展至今经历了8个版本的更新.1.1.1.2.2 ...

  8. MDK5 nRF BLE(蓝牙低功耗)

    BLE(蓝牙低功耗) 1 什么是蓝牙低功耗? BLE是蓝牙低功耗的简称(Bluetooth Low Energy).BLE技术是低成本.短距离.可互操作的鲁棒性无线技术,工作在免许可的2.4GHz I ...

  9. Android BLE(低功耗蓝牙)在Android不同版本的适配问题,华为Mate30扫描不到蓝牙模块

    一.前言 截止到本文完成的日期为止(2020年04月16日),笔者对Android 5.0~Android 10的部分手机进行了适配测试.该文中所遇到的问题基本都出现在国产定制系统(EMUI.MIUI ...

最新文章

  1. altium designer 原理图和PCB 多通道设计
  2. 里写注释 postman_没用过这些IDEA插件?怪不得写代码头疼
  3. Android--ViewPager点击按钮切换下一页
  4. Topforces Strikes Back
  5. 基于VS的连连看小游戏
  6. 传统企业是滚雪球逻辑
  7. Stm32 CubeMx安装和配置Cube.ai教程
  8. Session Cookie 之我见
  9. (实例篇)php 使用redis锁限制并发访问类示例
  10. java 10000阶乘_java大数阶乘优化
  11. 2021最新电视盒子TV源码开源电视影视APP影视源码
  12. 不可错过的效能利器「GitHub 热点速览 v.22.39」
  13. 年会活动现场抽奖签到互动小程序开发制作
  14. 公司中生存奥秘诙谐解说[ZT]
  15. 大厂面试Redis:缓存雪崩、缓存穿透、缓存击穿
  16. “华为杯”第十七届中国研究生 数学建模竞赛-【华为杯】B题:降低汽油精制过程中的辛烷值损失模型(附优秀论文)
  17. 渗透测试 面试笔试题
  18. 【CAPL】CAPL的简单介绍及变量
  19. AtCoder Beginner Contest 217 A B C D E G 题解
  20. ROS学习笔记3_发布者Publisher

热门文章

  1. 将HQL语句转为sql语句
  2. EWSTM8系列教程06_工程节点选项配置(一)
  3. 推荐一个界面库:RingSDK
  4. Json和List互相转化
  5. ubuntu petalinux 2018 安装操作说明
  6. php spry文本域_spry菜单栏(二)
  7. 【机器视觉】工业传统视觉和3D视觉算法
  8. 第十七届智能车竞赛英飞凌 | 逐飞联合直播-平衡单车组入门讲解
  9. C# Hash字符串
  10. Windows bat 脚本简单用法