详解BLE连接建立过程

https://www.cnblogs.com/iini/p/8972635.html

详解BLE 空中包格式—兼BLE Link layer协议解析

https://www.cnblogs.com/iini/p/8977806.html

开发你的第一个BLE应用程序—Blinky

https://www.cnblogs.com/iini/p/8996025.html

手把手教你开发BLE数据透传应用程序、

https://www.cnblogs.com/iini/p/9095622.html

如何实现蓝牙空中升级BLE OTA

https://www.cnblogs.com/iini/p/9314246.html

手把手教你开发BLE数据透传应用程序

https://www.cnblogs.com/iini/p/9095622.html

三种蓝牙架构实现方案(蓝牙协议栈方案)

https://www.cnblogs.com/iini/p/8834970.html

深入浅出低功耗蓝牙(BLE)协议栈

https://www.cnblogs.com/iini/p/8969828.html

蓝牙协议是通信协议的一种,一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。

当前的蓝牙协议分为基础率/增强数据率(BR/EDR)和低耗能(LE)两种技术类型,本文将重点介绍BLE(Bluetooth Low Energy)。

1、BLE低功耗蓝牙协议栈框架

要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。

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

而蓝牙核心协议(Bluetooth Core)又包含BLE Controller和BLE Host两部分。这两部分在不同的蓝牙技术中(BR/EDR、AMP、LE),承担角色略有不同,但大致的功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。

2、BLE低功耗蓝牙核心协议层详解(Bluetooth Core)

1、物理层(Physical Layer,简写 PHY):PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学与医疗)频段。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。

2、链路层(Link Layer,简写 LL):LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪程度 个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。

3、主机控制接口层(Host Controller Interface,简写 HCI):HCI是可选的,HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。

4、通用访问配置文件层(Generic access profile,简写GAP):GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。

5逻辑链路控制及自适应协议层(Logical Link Control and Adaptation Protocol,简写 L2CAP):L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

6、安全管理层(Security Manager,简写 SM):SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。

7、属性协议层(Attribute protocol,简写 ATT):简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。

8、通用属性配置文件层(Generic Attribute profile,简写 GATT):GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。

作者:昇润科技

链接:https://www.jianshu.com/p/adf200f76efd

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

https://www.cnblogs.com/bluestorm/category/344568.html

java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈相关推荐

  1. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...

  2. 深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...

  3. 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙

    BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 深入浅出低功耗蓝牙BLE协议栈 1. 协议栈框架 2. 如何通过无线发送一个 ...

  4. Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈

    文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU ...

  5. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

  6. 【IoT】加密与安全:CC254x 低功耗蓝牙 BLE 之 AES-128 加密算法

    蓝牙数据是可以通过空中抓包而被抓取到的,因此需要将通信数据进行加密,即使别人截获了加密后的数据,也无法利用该数据. AES 加密原理 CC254x 支持对称加密 AES: 加密过程: 需要加密的数据 ...

  7. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅④如何在Android开发低功耗蓝牙ble控制 TB-02 模块,代码工程全部开源!(附带Demo)

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

  8. 【Funpack】低功耗蓝牙 BLE 协议架构

    想要开发蓝牙应用,了解蓝牙协议架构是必不可少的.本文以低功耗蓝牙 BLE 为例,简要介绍 BLE 蓝牙协议架构,帮助开发者快速了解蓝牙协议概况. BLE 协议分层 BLE 协议栈主要由如下几部分组成: ...

  9. 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端

    低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和 ...

最新文章

  1. Python工程师求职必知的经典面试题
  2. 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
  3. (boost::mp11::mp_rotate_left相关用法的测试程序
  4. UltraEdit常用配置搭建Java/C开发环境
  5. php判断子字符串位置,PHP怎样查询子字符串位置
  6. solr java浏览器访问_solr解决访问安全
  7. android弹窗不能手动关闭_3大类APP弹窗提醒方式总结
  8. python列表和字典_2020/11/18 python学习第5课 列表和字典
  9. Laravel Pipeline解读
  10. matlab 使用uci数据集,如何使用UCI数据集
  11. 使用显卡+hashcat破解握手包
  12. MATLAB中的sym函数、syms函数、symfun函数以及symvar函数的简单介绍
  13. java语言多态性的表现形式_[Java教程]多态性的表现形式
  14. 黑苹果使用小技巧之按键设置
  15. 用python实现一个自动保存复制图片的功能
  16. java怎么查看jdk版本_java版本和jdk版本必须一样
  17. 读书笔记, Python - python-tricks-buffet-awesome-features
  18. Lambda表达式效率低
  19. 用单片机控制PH8810和无线收发模块实现远程控制家电
  20. The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with

热门文章

  1. 手把手教你建github技术博客
  2. 【leetcode】56. Merge Intervals 相邻线段归并
  3. Apache Storm 官方文档 —— 源码组织结构
  4. ios获取设备信息总结
  5. Console-算法[]-数组求最大值和最小值(只能遍历一次)
  6. [转] 有什么郁闷的就看看这驴!
  7. js笔记(8)之数组篇
  8. NYOJ 585 取石子(六)
  9. 源码安装 odoo12 -- 问题记录
  10. 004-2-拟合,drop-out