BLE协议栈1-物理层PHY
从应届生开始做ble开发也差不读四个月的时间了,一直在在做上层的应用,对蓝牙协议栈没有过多的时间去了解,对整体的大方向概念一直是模糊的状态,在开发时也因此遇到了许多问题,趁有空去收集了一下资料来完成了本次专栏,来增加自己对ble大框架的了解,当然,也仅仅是对协议栈做一个大概的介绍,太复杂细节的东西还需要自己未来去悟了。
0. 协议栈总体介绍
如下图,ble协议栈大体可以主要分为host和controller两个层次,其中
- 主机层(Host)位于BLE协议栈的上层,通常运行在主机设备上,如智能手机、电脑或其他嵌入式系统。它提供与应用层和用户接口的交互,并处理高层协议的逻辑,如GAP(Generic Access Profile)和GATT(Generic Attribute Profile)。主机层负责管理BLE设备的连接、数据传输、设备发现、安全性等。
- 控制器层(Controller)位于BLE协议栈的下层,通常是嵌入在BLE芯片中的硬件模块。控制器层负责处理与无线传输相关的物理层和链路层细节,如频率管理、调制解调、数据包解析等。它与主机层之间通过主机控制器接口(Host Controller Interface,HCI)进行通信。
- 主机层和控制器层之间的分界主要是基于功能和实现的考虑。主机层关注的是高层的协议逻辑和应用接口,而控制器层则负责处理底层的物理层和链路层操作。通过将主机层和控制器层分离,可以实现模块化的设计和开发,使得主机和控制器可以独立进行优化和升级。
- 主机层和控制器层之间的通信是通过主机控制器接口(HCI)实现的。HCI定义了主机层与控制器层之间的命令和事件传输的格式和协议。主机通过HCI发送命令给控制器,控制器执行相应的操作,并通过HCI向主机发送事件和数据。

但我们又可以看到host和controller又可以细分为多个层次,其中
- 物理层(Physical Layer):物理层是BLE协议栈的最底层,负责处理与无线传输相关的物理层面的细节。它定义了无线通信的频率、调制方式、传输速率以及功耗管理等。物理层的主要作用是将数字数据转换为无线信号,并实现与硬件设备的接口。
- 链路层(Link Layer):链路层位于协议栈的第二层,负责建立和管理BLE连接,并提供数据传输的可靠性和安全性。它定义了BLE的数据包格式、连接管理、错误检测与纠正等功能。链路层还处理BLE设备之间的广播和扫描过程。
- 主机控制器层(Host Controller Layer):主机控制器层位于协议栈的第三层,负责与物理层和链路层进行交互,并提供对上层协议的接口。它在主机(如智能手机、电脑)和BLE设备之间充当中间层,处理命令和数据的传输、设备发现、连接管理以及安全性等。
- 逻辑链路控制器层(Logical Link Control and Adaptation Protocol Layer,L2CAP):逻辑链路控制器层位于协议栈的第四层,提供数据通信的逻辑通道。它负责分段和重组数据包,并处理数据流控制、流量管理和服务质量(QoS)等功能。L2CAP层还支持多个上层协议,如Attribute Protocol(ATT)和Security Manager Protocol(SMP)。
- 属性协议(Attribute Protocol):属性协议是BLE协议栈中的一个子协议,用于定义BLE设备之间的数据交换格式和规范。它支持设备之间的读取、写入和通知等操作,用于实现BLE设备之间的数据传输和交互。
- 安全管理协议(Security Manager Protocol,SMP):SMP负责处理BLE连接的安全性。它定义了BLE设备之间的配对、加密和认证过程,以确保通信的安全性和隐私性。
本专栏是对每个层相关内容的讲解。
1. 物理层(Physical Layer)简介
物理层(Physical Layer)是BLE协议栈最底层,它规定了BLE通信的基础射频参数,包括信号频率、调制方案等。BLE工作频率是2.4GHz,它使用GFSK频率调制,并使用跳频机制来解决频道拥挤问题。
BLE 5的物理层有三种实现方案,分别是1M Sym/s的无编码物理层、2M Sym/s的无编码物理层和1M Sym/s的编码物理层。其中1M Sym/s的无编码物理层与BLE v4系列协议的物理层兼容,另外两种物理层则分别扩展了通信速率和通信距离。
2. 频段和跳频
大多数无线通信的频段需要申请授权才可以使用,不同地区开辟了少量免授权频段,只要产品满足当地无线电规范,即可免授权使用。下图展示了全球免授权的频段及其分布

从上图可以发现:
- 图中2.4GHz的频段很强势,覆盖了整个地图,是专为工业(Industrial)、科学(Scientific)和医学(Medical)三个机构使用,称为ISM频段。全球范围都可以免授权使用ISM频段。BLE即工作在2.4GHz频段。
- 2.4GHz频段信号有明显的优缺点,优点是免费、技术成熟,缺点是频段拥挤、信号传播特性差、遇水衰减。目前除了蓝牙信号外,WIFI、ZigBee、无线键盘、无线玩具甚至微波炉都工作在这个频段,当一个空间内同时运行着多个无线设备时,频带占用情况如下图

其中绿色的脉冲为BLE信号,红色信号分别是WIFI、微波炉和无线设备,它们形成了干扰噪声。
BLE工作在2.400GHz – 2.480GHz频率区间,并将这个区间均匀分为40个频道,相邻频道间隔2MHz。在不引起误解的情况下,频道也称为信道,40个信道的频率和分布如下图:
3. 调制
3.1 调制方式
物理层定义了两种调制方式。
一种方案采用高斯频移键控GFSK,具有1MSym/s的符号速率。第二种方式是与第一种相似(Similar),但是具有2MSym/s的符号速率。
第一种方式又分成两种类型:
- LE 1M Uncoded PHY。该方式的比特率为1Mb/s,它是BLE v4版本协议保持兼容。
- LE 1M Coded PHY。该方式对报文进行编码,使接收端收到的报文具有前向纠正的能力,在相同误码率条件下,能够显著降低误码重传次数,从而提高通信速率。 如果采用8符号编码,比特率为125kb/s,如果采用2符号编码,比特率为500kb/s。
LE 1M Uncoded PHY是BLE协议强制要求实现的物理层,而LE 1M Coded PHY则是可选方案。
这两种实现方式符号速率都是1MSym/s。
符号速率中的“符号”是指单次采样所得到的信息,这个信息可能包含多个比特,也可能多个信息等效于一个比特。比如一个电压幅度调制系统中,用+5V表示11b, +2V表示10b, -2V表示01b, -5V表示00b,那么采样一次电压可以获得两个比特信息,此时比特率是符号速率的两倍。在LE 1M Coded PHY机制中,用8个符号表示1个比特,此时比特率是符号速率的1/8。
第二种物理层实现方式为:
- LE 2M Uncoded PHY。该方案的比特率为2Mb/s,是可选的实现方式。
官方文档使用LE 1M PHY、LE Coded PHY、LE 2M PHY来表示以上三种不同的物理层实现方式:
| 物理层 | 调制方式 | 编码方案 (报头部分) | 编码方案 (有效载荷) | 比特率 |
|---|---|---|---|---|
| LE 1M PHY | 1Msym/s 方式 | 无编码 | 无编码 | 1Mb/s |
| LE 2M PHY | 2Msym/s 方式 | 无编码 | 无编码 | 2Mb/s |
| LE Coded PHY | 1Msym/s 方式 | 编码S=8 | 编码S=8;编码S=2 | 125kb/s;500kb/s |
表中的S=8表示8个符号编码成1个比特。
3.2 GFSK
频率调制是将低频数据信号加载到高频载波上,数据的变化反映为调制波频率的疏密变化,如下图所示:

数字化的信号仅有0、1变化,在调制时,可以定义载波频率正向偏移视为1,负向偏移视为0。这种调制方式称为“频移键控(FSK)”。数字信号发生0/1变换时,会产生大量噪声,引入高斯滤波器能够延展0/1变换时间,从而降低噪声。这种做法称为“高斯频移键控(GFSK)”。
GFSK技术成熟,实现简单,适合低功耗BLE的需求。
BLE协议规定,中心频率正向偏移大于等于185kHz视为比特1, 负向偏移大于等于185kHz视为比特0。如果选择2402MHz作为中心频率,比特1的频率应为2402.185MHz, 比特0的频率应为2401.815MHz。
星闪技术调制
插一个题外话。我们也可以对比一下最近很火的星闪技术使用的调制OFDM技术:OFDM使用正交子载波来传输数据。将数据分成多个低速子载波,这些子载波之间正交(垂直),以避免干扰。每个子载波可以使用不同的调制方式,例如QPSK、16-QAM或64-QAM。
相较于GFSK,OFDM有以下优点:
- 频谱效率高:OFDM能够将频谱划分为多个子载波,每个子载波可以以较高的符号速率传输数据。这种频域划分和高速传输使得OFDM能够实现高频谱效率,充分利用可用的频带资源。
- 抗多径衰落:OFDM对多径衰落(信号在传播路径上经历多个反射和折射)具有较好的抗干扰性能。由于OFDM将数据分散在多个子载波上,即使某些子载波受到多径干扰,其他子载波仍然可以正常工作,从而减少了信号质量的下降。
- 高容量支持:OFDM可以在不同的子载波上使用不同的调制方式,例如QPSK、16-QAM或64-QAM,以适应不同的信道条件和要求。这使得OFDM能够支持高容量的数据传输,满足现代高速通信的需求。
相关文章:
BLE协议栈1-物理层PHY
从应届生开始做ble开发也差不读四个月的时间了,一直在在做上层的应用,对蓝牙协议栈没有过多的时间去了解,对整体的大方向概念一直是模糊的状态,在开发时也因此遇到了许多问题,趁有空去收集了一下资料来完成了本次专栏&…...
光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
C++三大特性——继承(上篇)
文章目录 目录 一、继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 一、继承的概念及定义 1.1继承的概念 继承(inherita…...
docker系列(9) - docker-compose
文章目录 9. compose编排9.1 介绍9.2 安装9.3 compose常用命令9.4 实战Springboot部署9.4.1 准备组件配置文件9.4.1.1 redis的配置文件9.4.1.2 MySQL的配置文件9.4.1.3 SpringBoot打包文件 9.4.2 准备docker-compose.yml9.4.3 启动服务9.4.4 测试验证 9.5 实战ElasticsearchKib…...
Vue中如何进行日历展示与操作
在Vue中创建交互式日历应用 在Web开发中,创建一个交互式的日历应用是一项常见的任务。Vue.js作为一个流行的JavaScript框架,提供了许多便捷的工具和组件来简化日历的开发。本文将介绍如何使用Vue来创建一个简单但功能强大的日历应用,包括展示…...
SpringBoot 返回图片、Excel、音视频等流数据几种处理方式
方式一:直接针对响应对象(response)实现 @RestController @Slf4j @Api(tags = SwaggerConfig.TAG_IMAGE) @RequestMapping(SwaggerConfig.TAG_IMAGE) public class ImageController {@GetMapping(value = "/getImage")@ApiOperation("获取图片-以ImageIO流形…...
【Vue面试题一】、说说你对 Vue 的理解
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:有使用过vue吗ÿ…...
vue3 axios
npm install axios import axios from axios // 创建axios实例 const request axios.create({baseURL: ,// 所有的请求地址前缀部分(没有后端请求不用写)timeout: 80000, // 请求超时时间(毫秒)withCredentials: true,// 异步请求携带cookie// headers: {// 设置后端需要的传…...
划片机:半导体生产的必备设备
划片机是半导体加工行业中的重要设备,主要用于将晶圆切割成晶片颗粒,为后道工序粘片做好准备。随着国内半导体生产能力的提高,划片机市场的需求也在逐渐增加。 在市场定位上,划片机可以应用于半导体芯片和其他微电子器件的制造过程…...
电路维修——双端队列BFS
达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。 翰翰的家里有一辆飞行车。有一天飞行车的电路板突然出现了故障,导致无法启动。电路板的整体结构是一个 R 行 C 列的网格&#…...
乌班图22.04 kubeadm简单搭建k8s集群
1. 我遇到的问题 任何部署类问题实际上对于萌新来说都不算简单,因为没有经验,这里我简单将部署的步骤和想法给大家讲述一下 2. 简单安装步骤 准备 3台标准安装的乌班图server22.04(采用vm虚拟机安装,ip为192.168.50.3࿰…...
vue3富文本编辑器的二次封装开发-Tinymce
欢迎点击领取 -《前端面试题进阶指南》:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的🪜 简介 1、安装:pnpm add tinymce / pnpm add tinymce/tinymce-vue > Vue3 tinymce tinymce/tinymce-vue 2、功能实现图片上传…...
typescript 类型声明文件
typescript 类型声明文件概述 在今天几乎所有的JavaScript应用都会引入许多第三方库来完成任务需求。这些第三方库不管是否是用TS编写的,最终都要编译成JS代码,才能发布给开发者使用。6我们知道是TS提供了类型,才有了代码提示和类型保护等机…...
Hadoop伪分布式环境搭建
什么是Hadoop伪分布式集群? Hadoop 伪分布式集群是一种在单个节点上模拟分布式环境的配置,用于学习、开发和测试 Hadoop 的功能和特性。它提供了一个简化的方式来体验和熟悉 Hadoop 的各个组件,而无需配置和管理一个真正的多节点集群。 在 Ha…...
javaee ssm框架项目添加分页控件
搭建ssm框架项目 参考上一篇博文 添加分页控件 引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…...
2023年中国非晶纳米晶竞争格局、产业链及行业产量分析[图]
非晶合金又称“液态金属、金属玻璃”,是一种新型软磁合金材料,主要包含铁、硅、硼等元素。其主要制品非晶合金薄带的制造工艺是采用急速冷却技术将合金熔液以每秒106℃的速度急速冷却,形成厚度约0.03mm的非晶合金薄带,物理状态表现…...
在业务开发中遇到的树形结构(部门、区域、职位),递归处理。
文章目录 概要对象结构示例完整示例小结 概要 本文主要记录在树形结构中会遇到的问题, 使用部门结构讲解,main方法进行演示。 1、获取部门树结构 2、根据部门id获取所有下级 3、根据部门id获取上级部门 4、根据部门id获取类似面包屑(总公司…...
张量-算术操作函数
tf.add(x,y,name None)求和函数 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()x 1 y 2a tf.add(x,y)with tf.Session() as sess:print(sess.run(a)) tf.subtract(x,y,name None)减法函数 示例代码如下: import tensorflow.compat.v1 as …...
虚拟展厅有什么重要意义,了解虚拟展厅在宣传中的应用
引言: 随着科技的不断进步,虚拟展厅已经逐渐成为展览行业的重要一环。虚拟展厅是一种数字化平台,为观众提供了与传统展览完全不同的体验。 一.虚拟展厅的定义 虚拟展厅是一个通过互联网和虚拟现实技术创建的数字展示空间&#x…...
华为OD机试真题-补种未成活胡杨(Java/C++/Go/Python)
华为OD机试真题-补种未成活胡杨(Java/C++/Go/Python) 题目描述 近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。 一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树? 输入…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

