蓝牙协议栈分层

news2024/11/16 18:07:24

一、分层

BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。 

BLE协议栈主要由如下几部分组成:

1、PHY(Physical layer物理层)

PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。

2、LL(Link Layer链路层)

此层为RF控制器,用于控制设备的射频状态,控制设备会处于5种状态之一:standby(准备)、advertising(广播)、scanning(监听/扫描), initiating(发起连接)、connected(已连接) 。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。

3、HCI(Host controller interface)

HCI是可选的(具体请参考文章: 三种蓝牙架构实现方案(蓝牙协议栈方案)),HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。

4、GAP(Generic access profile)

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

5、L2CAP(Logic link control and adaptation protocol)逻辑链路控制及自适应协议层

L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

蓝牙协议到这个层次的时候,就清爽多了:

对下,它在用户类XXX-U Logical Link的基础上,抽象出和具体技术无关的数据传输通道(包括单播和广播两类),至此用户就不再需要关心繁杂的蓝牙技术细节。

对上,它以L2CAP channel endpoints的概念(类似TCP/IP中的端口),为具体的应用程序(profile)提供独立的数据传输通道(当然,也是一个逻辑通道)。

6、SMP(Secure manager protocol)

SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。该层定义了配对和密钥分配方式。

7、ATT(Attribute protocol)属性协议层

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

允许设备向其它设备展示一块特定的数据,称之为“属性(attribute)”。在ATT环境中,展示“属性”的设备称之为服务器,与之配对的设备称之为客户端。链路层状态(主机和从机)与设备的ATT角色是相互独立的。例如,主机设备既可以是ATT服务器,也可以是ATT客户端。从机设备可以是ATT客户端,也可以是ATT服务端。
 

8、GATT(Generic attribute profile )通用属性配置文件层

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

二、BLE链路层的状态机

包含Standby、Advertising、Scanning、Initiating、Connection、Synchronization、Isochronous Broadcasting state,转换图如下所示

standby(准备)、advertising(广播)、scanning(监听/扫描), initiating(发起连接)、connected(已连接) 。
 

五种状态的切换描述为:

advertising(广播)不需要连接就可以发送数据(告诉所有人,我来了);
scanning(监听/扫描)来自广播的数据;

initiator(发起人)将携带 connection request(连接请求)来响应广播者,如advertiser(广播者)同意该请求, 那么广播这和发起者都会进入已连接状态, 发起连接的设备变为 master(主机),接收连接请求的设备变为 slave(从机)。

Master:从Initiating state进入Connection state

Slave:从Advertising state进入Connection state

ref:

深入浅出低功耗蓝牙(BLE)协议栈 - iini - 博客园

蓝牙协议栈结构 - 简书

蓝牙协议分析(2)_协议架构

低功耗蓝牙BLE协议栈简介 - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦日志分析工具DMLOG使用

达梦日志分析工具DMLOG1.使用工具的目的2.适用范围3.工具描述4.开启跟踪日志记录执行SQL5.使用条件及限制6.使用说明6.1使用前准备6.2使用方法和步骤7.结果解读1.使用工具的目的 分析SQL是DBA或者数据库服务人员很重要的工作。达梦数据库通过开启SVR_LOG捕捉数据库中运行的所有…

SpringBoot+Vue项目实现高校学生健康打卡系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

双通道PID控制器用于热离子发电器中真空度和温度的同时控制

摘要:本文针对真空型热离子能量转换器(发电装置)中真空压力和温度的关联性复杂控制,提出一个简便的控制方式和控制系统的解决方案,控制系统仅采用一个双通道高精度PID调节器。方案的核心技术思路是将一个可调参量转换为…

接口类型太多了,很多网工总是分不清

交换机光模块的最强科普 以太网交换机常用的光模块有四个,分别是SFP(Small Form-factor Pluggabletransceiver) 小封装可插拔收发器,GBIC(GigaBit Interface Converter)千兆以太网接口转换器,X…

往USBKey里面导入双证书专题:概念介绍、执行逻辑

相关概念 国密证书 国密的双证书体系,将证书按照使用目的的不同划分为加密证书和签名证书两种,也就是两对公私钥,二者本质一致,均为SM2密钥对,区别仅体现在用法国密CA体系中,加密密钥对由CA产生&#xff…

力扣刷题记录141.1-----34. 在排序数组中查找元素的第一个和最后一个位置

目录一、题目二、代码三、运行结果一、题目 二、代码 class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {int i,j;int left,right,middle;vector<int> return_vector(2,-1);if(nums.size()<3){for(i0;i<nums.si…

mysql转sqlite3实战+部署sqlite3应用

文章目录场景mysql脚本转sqlite31.新建个sqlite3的文件并使用navicat连接准备好mysql并连接上使用navicat数据传输传输完后&#xff0c;设置主键自增修改应用程序1.添加sqlite3的驱动包2.修改sqlite3的jdbc连接配置文件3.全局替换Date类型字段为String类型4.全局替换 sql文件中…

达摩院WIDER FACE榜首近两年人脸检测MogFace CVPR论文深入解读

一、开源 1.&#xff09;论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/Liu_MogFace_Towards_a_Deeper_Appreciation_on_Face_Detection_CVPR_2022_paper.pdf 2.&#xff09;代码模型&#xff1a;ModelScope 魔搭社区 3.&#xff09;可玩应用…

新知实验室_初探腾讯云音视频

本文目标&#xff1a; 了解 TRTC 的基本概念 初步运行 demo 调用 API 完成进入视频房间 完成多人进入同一房间 一、腾讯 TRTC 可能有些同学并不知道 RTC 的相关概念&#xff0c; 这里先简单说一下。 WebRTC(web Real-Time Communication) 是指网站实时音视频通话技术。 这项技…

Shopro商城 高级版 Fastadmin和Uniapp进行开发的多平台商城(微信公众号、微信小程序、H5网页、Android-App、IOS-App)

Shopro商城无加密的开源源码(可用于自营外包项目(多主体)、可用于外包定制开发项目) shopro 商城&#xff0c;一款基于 uni-app 的前端模板商城。目前适配了&#xff08;小程序apph5公众号&#xff09;。 主要功能&#xff1a;登录、注册、签到、富文本、分类、购物车、筛选、…

CI/CD docker compose 部署 humpback - single mode

最近想搭一搭个人服务器&#xff0c;其中有很多东西都是通过 docker 来管理&#xff0c;每次都手动输入命令比较麻烦&#xff0c;需要一个轻量级的容器管理工具来直观轻松的管理容器和镜像。于是便相中了 humpback。 Humpback humpback 相关的详细介绍请自助传送 架构 主要组…

【无线传感器】WSN 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

前后端分离项目,vue+uni-app+php+mysql教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置&#xff1a;设置关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c…

【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径

前言 我感觉这题比较有代表性&#xff0c;所以记录一下&#xff0c;这题是加权有向图中求最短路径的问题。 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst]&#xff0c;解法一子问题的定义是[src, i, ..., j]&#xff0c;解法二子问题…

面经汇总--校招--北京顺丰同城

文章目录&#x1f525;1.一面&#x1f525;2.二面&#x1f525;3. 三面&#x1f525;4. 结果&#x1f525;1.一面 你对Spring aop的理解 面向切面编程&#xff0c;可以对某个方法前后加入自己想执行的方法函数。底层是动态代理&#xff0c;默认jdk动态代理&#xff0c;没有实现…

Redis 通用命令(keys,help,mset,exists,expire,ttl,tab补全)

目录 1.help【command】 2.tab自动补全 3. KEYS pattern&#xff08;模板&#xff09;&#xff08;不建议再生产环境上使用&#xff09; 4.del 删除指定的key&#xff0c;value也会删除&#xff08;也可以批量删除&#xff09; 5.MSET&#xff08;批量插入键值对&#xf…

【C语言】反序加密(非文件)

《算法集训传送门》 &#x1f449;引言 铭记于心&#x1f389;✨&#x1f389;我唯一知道的&#xff0c;便是我一无所知&#x1f389;✨&#x1f389;&#x1f496; ❄️我们的算法之路❄️&#x1f496;众所周知&#xff0c;作为一名合格的程序员&#xff0c;算法 能力 是不可…

Python OpenCV实现鼠标绘制矩形框和多边形

Python OpenCV实现鼠标绘制矩形框和多边形 目录 Python OpenCV实现鼠标绘制矩形框和多边形 1. OpenCV鼠标事件操作说明 &#xff08;1&#xff09;setMouseCallback函数说明 &#xff08;2&#xff09;回调函数onMouse说明 &#xff08;3&#xff09;event 具体说明&…

Flutter高仿微信-第24篇-隐私政策

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** 显示服务条款、隐私政策对话框*/ static void show…

如何修复老照片?这三个方法建议收藏

当你在图书馆查阅一些资料时&#xff0c;会发现里面有许多的老照片&#xff0c;通过这些老照片我们能大概了解到那个时期的建筑特色、人们的穿衣特色等等。但由于那个时候的照片只有黑白&#xff0c;再加上时间悠久&#xff0c;老照片已经过于模糊了&#xff0c;影响到我们进行…