目录

前言

一、蓝牙技术简介

二、低功耗蓝牙协议

1.协议组成图

2.控制器(Controller)

2.1 PHY物理层

2.2 链路层(LL)

2.3主机控制接口(HCI)

3.主机(HOST)

3.1 逻辑链路控制和适配协议(L2CAP)

3.2 通用属性规范(GATT)和属性协议(ATT)

3.3 安全管理(SM)

3.4 GAP


前言

本文将以一个系列的方式从零开始来介绍低功耗蓝牙技术,文章将以理论结合实际代码的形式带大家一起学习,博主水平有限,如有错误大家可以在评论或私信指出。

一、蓝牙技术简介

蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其实质内容是为固定设备或移动设备之间的通信环境建立通用的无线电空中接口(Radio Air Interface),将通信技术与计算机技术进一步结合起来,使各种3C设备在没有电线或电缆相互连接的情况下,能在近距离范围内实现相互通信或操作。简单的说,蓝牙技术是一种利用低功率无线电在各种3C设备间彼此传输数据的技术。蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段,使用IEEE802.15协议。

低功耗蓝牙在经典蓝牙的基础上对功耗进行了优化,相比于经典蓝牙有着更低的工作功耗,在休眠的时候工作电流甚至只有几个微安,非常适合移动设备和一些对功耗要求严苛的场景使用。蓝牙具有低功耗、低成本、低延时等优点,已经成为最常用的无线通信技术之一。

二、低功耗蓝牙协议

1.协议组成图

协议由应用层、Host和Controller组成。

2.控制器(Controller)

2.1 PHY物理层

频段: 物理层指定了BLE使用2.4Ghz的工业、科学及医疗(ISM)频段,这个频段的特点是它是一个无需授权的频段,且是唯一一个在任何国家都通用的频段,频谱资源为2400Mhz~2483.5Mhz约83.5Mhz。

调制: BLE采用GFSK调制方式(高斯频移键控),物理层的比特率为1Mbit/s。什么是调制和其他调制方式大家可以自行百度了解,扩展一下自己的知识面。

射频信道:BLE拥有40个射频通道,其中37个自适应自动调频数据通道和3个广播通道,3个广播通道分别为37、38、39,因为广播的通道较少,如果设备的广播频率设置的很高很容易堵信道,这一点大家要注意。

发射功率:2.4Ghz ISM频段对设备有最大发射功率限制,对于BLE在蓝牙5.2协议规范中有规定,最小发射功率为-20dBm,最大发射功率为+10dBm。

2.2 链路层(LL)

链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的定义,规定了两个设备操作行为规范。

链路层状态机定义了5种设备状态,就绪态(standby)、广播态(Advertising)、扫描态(scanning)、发起态(initiating)和连接态(connection)。下面是各个状态的描述:

就绪态:上电后链路层进入就绪态,接收主机命令进入其他状态,从任何状态都可以进入就绪态。

广播态:广播态链路层会控制射频发射广播报文,在广播态下设备可以被其他设备发现,收到其他设备的连接请求后退出广播态进入连接态。

扫描态:扫描态可以接收广播信道的报文,这个状态用于侦听广播。

发起态:发起态侦听自己试图连接的设备,如果收到了该设备的广播报文,链路层会向该设备发起连接请求并进入链接状态。

连接态:设备连接成功后回进入连接态,连接态分为主机和从机,主机只能由发起态进入,从机只能从广播态进入。

        报文、数据通道和两个设备的互操作规范定义由于内容较多,后面会出一个单独的章节来讲。

2.3主机控制接口(HCI)

主机控制接口是上层主机层(HOST)与下层控制器(Controller)的通信接口,如果主机和控制器在同一个芯片上,这部分可能是软件接口或者干脆去掉L2CAP层和LL层之间进行数据交换。如果主机和控制器分开在不同芯片的话HCI接口包括了物理接口和逻辑接口,协议规范规定了四种可用的物理接口,包括通用UART、3线UART、USB和SDIO。逻辑接口定义了数据包的帧格式。

3.主机(HOST)

主机层(HOST)是一个完全由软件实现的层,我们日常做应用开发的时候最常接触的就是主机层,这个层级内容很多,对初学者来说理解难度比较大,我这里先介绍每个层级的基本概念和在协议中发挥的作用,后面会出相应的章节对每个部分进行深入的讲解。

3.1 逻辑链路控制和适配协议(L2CAP)

L2CAP是整个蓝牙协议中最核心的部分,它负责连通主机和控制器,向上层提供面向连接和无连接的的数据服务,并提供多路复用、分段和重组操作。

3.2 通用属性规范(GATT)和属性协议(ATT)

这两个层比较难理解,放在一起讲可能比较容易理解。属性协议(ATT)定义了BLE协议上层的数据结构和组合方式,“属性”是ATT层的核心,ATT规定了访问属性的方法和权限。“属性“类似C++中的对象,它包含了数据类型和数据值等参数,通过这些参数来描述外部实体,如人体健康状态包含了心率、血压、体温等参数。

通用属性规范(GATT)基于ATT的属性模板,把一堆ATT属性分组为有意义的服务。ATT就像一个”模板“,它规定了”属性”就应该是这样,GATT根据这个模板创造出有具体意义的”服务“。

GATT还定义了两种设备角色,客户端和服务器,客户端主动发起读写服务器属性的请求,服务器接收客户端的请求被动响应。如智能手环和手机之间,智能手环向手机提供数据是服务器,手机主动发起命令读取手环的数据,手机为客户端。

3.3 安全管理(SM)

在有些场景下对数据传输有安全性需求,如果直接将数据发送到空中那跟裸奔没有区别,任何人只要有心就可以随便获取你发送的数据,或者任何人都可以连接上你的设备获取你的数据,这也是难以接受的,这个时候就需要对数据进行加密了。SM层的工作就是对数据和连接进行加密,防止数据被窃取,SM定义了加密算法和加密流程,可以有效防止窃听、篡改数据和中间人攻击。

3.4 GAP

GAP层 介绍与传输和应用程序配置文件要使用的模式和访问过程相关的定义、建议和通用要求。 描述设备状态,以确保蓝牙设备之间始终可以建立链接和通道,并可以实现多模式操作。

【从零开始学习低功耗蓝牙(一)】蓝牙介绍及协议结构相关推荐

  1. 从零开始学习docker(十一)介绍Docker Compose yml文件介绍

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 如果我们有一个App,他由多个container组成,那么这个App的维护会非常繁琐. 包括: 要从Docker ...

  2. 《STM32从零开始学习历程》——I2C协议层

    <STM32从零开始学习历程>@EnzoReventon I2C理论部分--协议层 相关资料: I2C物理层介绍 I2C固件库介绍 STM32的I2C特性及架构介绍 参考资料: [野火Em ...

  3. 【低功耗蓝牙】⑤ 蓝牙HID协议

    摘要 本文章主要介绍了蓝牙HID协议的实现方法,基于ESP32平台实现了蓝牙键盘,蓝牙鼠标,蓝牙自拍杆和蓝牙游戏手柄等设备,是初学者学习BLE HID协议很好的参考文章. HID设备 HID(Huma ...

  4. 蓝牙 linux开发板,开源双模蓝牙协议栈 - 蓝牙模组以及开发板使用介绍

    零. 概述 本文章主要讲下我们的开发版(STM32F1+CSR8311)以及蓝牙模组扩展版(CSR8311)的功能以及使用简短说明 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容 ...

  5. 蓝牙协议栈 电话免提协议HFP(Hands-Free)SDP介绍

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack) 电话免提协议HFP(Hands-Free) SDP的介绍,包括HF/AG角色的SDP. 一. 声明 本专栏文章我们会以连载的方式持续 ...

  6. 【低功耗蓝牙】② 蓝牙状态切换和事件处理

    摘要 本文章基于ESP32芯片MicroPython代码,主要介绍低功耗蓝牙的状态机和状态切换机制,以及蓝牙的事件处理,是同学们理解后面内容的基础. 蓝牙状态机 蓝牙链路层的状态机有五种状态,分别是就 ...

  7. 【低功耗蓝牙】④ 蓝牙MIDI协议

    摘要 蓝牙MIDI协议是智能乐器与计算机之间数据通信的协议格式,本文章主要介绍了通过低功耗蓝牙实现MIDI协议的步骤,以及MIDI指令的数据格式,并且依托ESP32芯片MicroPython平台给出了 ...

  8. 蓝牙开发|蓝牙技术介绍

    蓝牙技术介绍 1. 蓝牙概述 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙& ...

  9. ESP32 (经典蓝牙 SPP)-蓝牙学习(9)

    提示:本博客作为学习笔记,有错误的地方希望指正   绪论:这里主要讲解一些关于ESP32的经典蓝牙,蓝牙是一个比较庞大的体系,需要又一些基础知识才可以更好的学习,这里有一些写的比较好的关于蓝牙的文章. ...

最新文章

  1. html应用多个类,html – 如何避免重复多个css类
  2. 每日一题:leetcode74.搜索二维矩阵
  3. Simulink之三相半波可控整流电路
  4. 阿里巴巴发布AliOS品牌 重投汽车及IoT领域
  5. 安卓TV版二开对接苹果cms后台,原生Java前端
  6. 01.J2EE开发环境搭建
  7. 大平原顾问快讯FRX移至新服务器
  8. CE 开启 DBVM
  9. 【N32G457】从0到1打造一个私有化部署的家用式智能告警系统
  10. 从函数式编程到Promise
  11. 夜思 | 听说你单身?“替代性恋爱”了解一下
  12. iapp将音量调至最大
  13. 一文带你吃透操作系统
  14. 网络速度单位及其读法----1Mbps的专业读法和1Mb/s的专业读法
  15. 关于线性稳压器的基本知识全面解析
  16. 基于matlab fdma传输系统设计,基于matlab频分复用系统的研究与仿真设计3695.doc
  17. 当网站不允许上传ASP,CGI,CER,CDX,HTR等类型的文件时
  18. oracle数据库extract,Oracle中extract()函数
  19. php抓取网页内容,获取网页数据
  20. 80后凭栏碎念青春阑珊

热门文章

  1. TensorFlow的子项目DELF的测试及学习
  2. JAVA入门[18]-JdbcTemplate简单实例
  3. 疫情防控社区门禁系统
  4. 【网络转载】Sybase数据库基础知识
  5. python画图皮卡丘代码_利用Python绘制萌萌哒的皮卡丘
  6. 在线文本编辑器-WebHtmlEditor
  7. 17-18世纪的德国教育
  8. 寒假学习HTML记录4
  9. 分层取样,分层抽样法
  10. UVM:寄存器模型 应用