BLE协议栈结构

news2024/11/18 4:30:20

// 开坑BLE协议栈

0 镇楼图

在这里插入图片描述

接下来会自下往上粗略分析各个层级,后续会有对各层的细致解读

1 CONTROLLER

1.1 PHY

BLE使用ISM频段(频率范围是2.400-2.4835 GHz)。将整个频带分为40份,每份的带宽为2MHz,称作RF Channel。其中序号为37、38、39的信道作为广播信道,其余37个信道作为连接信道。需要注意的是,RF Channel的序号和实际分配方式不是一一对应的关系,即用于广播的三个信道在物理上不是相连的(甚至是即为分散的),目的是减少信号的干扰。

1.2 LL

Link Layer结构图
在这里插入图片描述

1.2.1 广播与连接通信

BLE有两种通信方式,广播和连接。这两种方式从Link Layer开始就进行了特殊区分。

  1. 对于数据量比较少、发送不频繁、对时延不是很敏感的场景
    使用广播通信,所有结点在通信网络里收发自由。
  2. 对于数据量较大、发送频率较高、对时延较敏感的场景
    Link Layer会从剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道。同时,为了增加容量,增大抗干扰能力,在多个connection event中不会使用一个固定的Physical Channel,而是在多个Channel之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术。

在这里插入图片描述
如图,为确保连接的稳定性和功耗问题,一次主从的连接通信被分为多个connection event进行。以从结点发送广播信号,主结点进行扫描开始。之后主结点为后续沟通规定一系列的参数(如conn_init, ts,tc等),并主动开始connection event。最终双方都不发送数据包并关闭通信。(之后文章会做更详细整理分析)

1.2.2 Logical Transports

作为LL的底层承担着将物理传输抽象成逻辑传输的职责,所以要做的事情有:

  1. 物理信道抽象:信道的共享(Hopping),设备地址的分类
  2. 对信道的维护:传输信道的建立,信道白名单
  3. 数据的抽象:对数据的加密/解密,数据包格式的定义
1.2.3 Logical Link

主要实现校验机制LL Privacy

1.2.4 Control

对比spring MVC中的controller层,思想是一样的。就是下面的东西太多了,我们再抽象出一层,方便统一管理。
实现的功能有:对connection的管理控制(Resolving List/White List),更新Hopping图谱,链路加密,数据包的收发应答流控等

2 HCI

定义了host和controller间的通信协议,实现了白名单机制,将LL中提供的功能封装成特定的Command和Event

3 HOST

3.1 L2CAP

这一层是我擅自命名的。BLE自下而上到L2CAP为止,真正有了最基础的广播和连接通信的能力。

3.1.1 L2CAP

全称Logical Link Control and Adaptation Protocol,这个协议对下层的众多功能进行了整合。包括但不限于:

  1. 对下:信道的多路复用,错误发现和重传,流处理,QoS等
  2. 对上:数据包分割重组,PDU分片重组
3.1.2 ATT

全称Attribute Protocol。将采集到的信息以Attribute的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。基于L2CAP,使用固定的Channel ID。

3.2 Profile

可以理解为官方提开发者实现的applications,广播和连接通信在这一层的众多协议里得到最终的封装

3.2.1 SM

全称Security Manager Protocol,实现配对(pairing)、认证(authentication)和加密(encryption)等功能

3.2.2 GATT

全称Generic Attribute Profile,用于服务发现。提供通用的、信息的存储和共享等功能。是使用python进行BLE开发的最外层协议。其层次结构为:Profile—>Service—>characteristic,即蓝牙服务是以特征为最小单位发布的,由一个Properties、一个Value、一个或者多个Descriptor组成

3.2.3 GAP

全称Generic Access Profile。规定了role,以及其必须具备某些能力——mode操作模式/procedure过程。非常重要日后会重点分析。

4 APP

applications所在层级

* 以上皆整理自wowo大神的解读和自己对于Bluetooth core v5.4的理解,未完待续~

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

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

相关文章

CASAIM与北京体育大学达成合作,高精度三维扫描技术助力体育运动装备仿真分析

近期,CASAIM与北京体育大学开展合作交流,基于高精度三维扫描技术助力体育运动装备仿真分析,为体育运动装备可靠性研究提供准确的数据参考。 北京体育大学是全国重点院校、国家“211工程”重点建设大学、国家首批“双一流”建设高校&#xff0…

基于springboot+vue社区团购系统(分前后台springboot+mybatis+mysql+maven+vue+html)

基于springbootvue社区团购系统 一、项目简介二、技术实现三、开发运行环境四、系统功能五、页面展示六、数据库七、项目结构八、部分代码展示九、源码地址 一、项目简介 本项目是一套基于springboot社区团购系统,主要针对计算机相关专业的正在做毕设的学生与需要项…

【正点原子STM32连载】 第十六章 外部中断实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十六…

【Sentinel】流控、熔断、热点基本介绍和使用

目录 环境介绍Sentinel的使用可以分为两个部分Sentinel管理控制台客户端接入控制台配置启动参数流控规则名词解释 熔断策略公共字段说明慢调用比例字段说明 异常比例字段说明异常数字段说明 热点规则 环境介绍 开发依赖版本Spring Boot3.0.6Spring Cloud2022.0.2Spring Cloud …

一文搞清RabbitMQ的部署运维及使用

1.通过docker-compose安装RabbitMQ 1.0 初始化yum和Docker yum update yum install epel-release -y yum clean all yum list yum install docker-io -y1.1 dockerfile FROM rabbitmq:management MAINTAINER LCJ # 添加插件到指定目录 可按照此方式自行扩展其他插件 # ADD .…

shopee虾皮跨境电商网站商品数据支持网站后缀(.com.my;.vn;.ph)

作为一名技术爱好者,我们总会遇到各种各样的技术问题,需要寻找合适的技术解决方案。而在互联网时代,我们可以快速通过搜索引擎获取丰富的技术资源和解决方案。然而,在不同的技术分享中,我们常常会遇到质量参差不齐的文…

【新星计划·2023】单臂路由的原理讲解

单臂路由是指在路由器的一个接口上通过配置子接口的方式,实现原来互相隔离的VLAN之间可以互相通信。 一、单臂路由概述 网络中通过VLAN技术来实现隔离广播、方便管理及提高安全性等功能,一旦划分VLAN后,同—VLAN之间可以相互通信&#xff0…

【统计模型】瑞典生育率现状与影响因素分析

目录 瑞典生育率现状与影响因素分析 一、研究目的 二、数据来源和相关说明 三、描述性分析 3.1 样本描述 3.2 数据可视化 四、数学建模 4.1 模型建立 4.2 模型结果 (1)全模型A (2)全模型B (3)全…

传奇手游三职业1.80合击服务端三端互通版搭建教程

传奇手游三职业1.80合击服务端三端互通版搭建教程 大家好,我是驰网艾西。随着时代的发展,以前我们热爱的传奇游戏也越来越没有时间玩了,到了一定的年纪大家都有自己的事业以及生活压力。以前我们总是玩PC端所谓的端游,现在大家都…

highcharts矢量图放在图表的最上方

将矢量图对应的y轴的top和height都设置为0 即可 下面红色标注全是y轴的设置 以上这中图怎么实现 其中top是指图表中每个模块的位置,offset表示偏移的位置,height表示每个模块占据整个图标的高度的百分比,opposite表示该y轴是否在右侧&#xf…

麒麟系统安装HDP【已解决】

麒麟系统安装HDP 麒麟系统安装HDP1、软件版本介绍2、文件替换3 报错解决3.1 解决KeyError: HDP-3.1(所有机器)3.2 安装smartsense-hst(所有机器)3.3 解决Non-ASCII character \xe5 in file(所有机器)3.4 解…

如何解决端口号被占用的方法

在学习JavaWeb的过程中,在运行代码的时候经常会提示端口号被占用的情况;出现这情况的主要原因就是没有正常关闭tomcat。 那么遇到这种情况应该怎么解决呢? 首先第一种方式就是把电脑关机重启,这种方法可谓是百试百灵;另…

分类逻辑回归实例一

一、实例背景 假设根据【推荐分值】来对推荐者类型进行分类:高推荐、中推荐、低推荐 二、任务目标 训练出一个模型,来实现根据【推荐分值】,来预测【推荐类型】的分类 三、机器学习实现 1. 核心步骤 实现全流程: 1. 1 建立…

Niagara—— Events and Event Handlers

目录 一,Events 二,Event Handlers 多数情况下,系统中的发射器需相互交互,才能创建所需效果;意味着,一发射器生成数据,另一发射器监听该数据,以执行相应行为;在Niagar…

Linux-初学者系列_docker

目录 Linux-初学者系列_docker一、概念二、安装docker(可忽略 跳到第三步)三、获取镜像1、下载nginx镜像2、查看本地镜像3、将镜像运行成一个容器01-查看运行的容器02-通过ip端口号访问03-删除端口04-指定镜像名字 4、dockerfile构建镜像5、dockersave构…

HLS入门实践

HLS入门实践 文章目录 HLS入门实践1.HLS基本知识简述1.1 HLS简介1.2 HLS相关知识概念 2. HLS技术认识2.1 与VHDL/Verilog关系2.2 关键技术问题2.3 存在的技术局限性 3. HLS 完成 led 灯闪烁3.1. 新建一个 HLS 工程3.2 添加源文件3.2.1 led.h3.2.2 led.cpp3.2.3 添加 C 仿真文件…

<Linux开发>驱动开发 -之-pinctrl子系统

<Linux开发>驱动开发 -之-pinctrl子系统 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记…

Zabbix 2.0 实验

zabbix自动发现与自动注册 ---------------nginx自动监控报警------------------- 在/etc/nginx/conf.d/default.conf 文件内添加 location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}curl -s http://127.0.0.1/nginx_status curl -s http:/…

卷麻了,面试了一个00后,绝对能称为是卷王之王....

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员,他…

数据链路层:Ethernet以太网协议

首先Ethernet、IEEE802.3、PPP和HDLC都是数据链路层的协议,只不过后面三个不常用而已。Ethernet和IEEE802.3属于以太链路层协议,数据链路层最常用的协议是Etnernet以太网协议。 定义: Ethernet以太网协议,用于实现链路层的数据传…