首页 > 其他分享 >BLE 协议之物理层

BLE 协议之物理层

时间:2024-09-17 20:23:03浏览次数:3  
标签:协议 LE 编码 PHY 物理层 BLE 调制

目录


一、概述

物理层(Physical Layer)是 BLE 协议栈最·底层,它规定了 BLE 通信的基础射频参数,包括信号频率、调制方案等。

BLE 工作频率是 2.4GHz,它使用 GFSK 频率调制,并使用跳频机制来解决频道拥挤问题。

BLE 5 的物理层有三种实现方案,分别是:

  1. 1M Sym/s 的无编码物理层
  2. 2M Sym/s 的无编码物理层
  3. 1M Sym/s 的编码物理层

其中 1M Sym/s 的无编码物理层与 BLE v4 系列协议的物理层兼容,另外两种物理层则分别扩展了通信速率和通信距离。

二、Physical Channel

1、物理通道

任何一个通信系统,首先要确定的就是通信介质(物理通道,Physical Channel),BLE 也不例外。在 BLE 协议中,通信介质的定义是由 Physical Layer 负责。

大多数无线通信的频段需要申请授权才可以使用,不同地区开辟了少量免授权频段,只要产品满足当地无线电规范,即可免授权使用。下图展示了全球免授权的频段及其分布:

图中 2.4GHz 的频段很强势,覆盖了整个地图,是专为工业(Industrial)、科学(Scientific)和医学(Medical)三个机构使用,故称为 ISM 频段。全球范围都可以免授权使用 ISM 频段。

2.4GHz 频段信号有明显的优缺点,优点是免费、技术成熟,缺点是频段拥挤、信号传播特性差、遇水衰减。目前除了蓝牙信号外,WIFI、ZigBee、无线键盘、无线玩具甚至微波炉都工作在这个频段。由此,当一个空间内同时运行着多个无线设备时,BLE 就很容易受到干扰,由此提出了下面将提到的调频技术来抗干扰。

Physical Layer 是这样描述 BLE 的通信介质的:

  • BLE 属于无线通信,则其通信介质是一定频率范围下的频带资源(Frequency Band
  • BLE 的市场定位是个体和民用,因此使用免费的 ISM 频段 (频率范围是 2.400-2.4835 GHz)
  • 为了同时支持多个设备,将整个频带分为 40 份,每份的带宽为 2MHz ,称作 RF Channel 。

经过上面的定义之后, BLE 的物理通道划分已经明了了!

频点 ( f ) = 2402 ( M H z ) + k ∗ 2 ( M H z ) , k = ( 0...39 ) 频点 ( f ) = 2402 ( M H z ) + k ∗ 2 ( M H z ) , k = ( 0...39 ) 频点(f)=2402(MHz)+k∗2(MHz),k=(0...39)

每个 Channel 的带宽为 2MHz ,如下图:

2、物理通道的细分

上面我们已经知道了,物理层被划分为了40个赛道,由于传输数据量的不同,为了更加充分利用好物理资源,进一步对通道进行了划分:

40 个 Physical Channel 物理通道分别划分为 3 个广播通道(advertising channel),和 37 个数据通道(data Channel)。

  • 对于数据量少,发送不频繁,时延不敏感的场景,使用广播通道通信。
    • 例如一个传感器节点(如温度传感器),需要定时(如1s)向处理中心发送传感器数据(如温度)。
    • 针对这种场景,BLE 的 Link Layer 采取了一种比较懒的处理方式——广播通信
  • 对于数据量大,发送频率高,时延较敏感的场景,使用数据通道。
    • BLE 为这种场景里面的通信双方建立单独的通道(data channel)。这就是连接(connection)的过程。

同时,为了增加信道容量,增大抗干扰能力,连接不会长期使用一个固定的 Physical Channel,而是在多个通道(如 37 个)之间随机但有规律的切换,这就是 BLE的跳频(Hopping)技术 。

一个简单的跳频算法是: F ( n + 1 ) = [ F ( n ) + h o p ] F(n+1) = [F(n) + hop] % 37 F(n+1)=[F(n)+hop],其中 hop 参数为物理层自己设定的跳频参数。

实际中使用自适应跳频算法来更新通信信道。

自适应跳频的工作机制是,如果某个信道拥挤则做上标记,工作时维护一张信道表以记录各信道的拥挤情况,并将拥挤信道映射到可用信道中,然后结合上述简单跳频算法共同完成信道选择。假如简单跳频算法结果指向一个拥挤信道,则进一步跳转到它映射的可用信道上,从而实现数据通信总是工作在可用信道上。

三、调制

1、调制方式

物理层定义了两种调制方式。

一种方案采用高斯频移键控(GFSK),具有 1MSym/s 的符号速率。第二种方式是与第一种相似,但是具有 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 PHYLE Coded PHYLE 2M PHY 来表示以上三种不同的物理层实现方式:

物理层调制方式编码方案(报头部分)编码方案(有效载荷)比特率
LE 1M PHY1Msym/s 方式无编码无编码1Mb/s
LE 2M PHY2Msym/s 方式无编码无编码2Mb/s
LE Coded PHY1Msym/s 方式编码 S=8编码S=8;
编码S=2
125kb/s;
500kb/s

表中的 S=8 表示 8 个符号编码成 1 个比特

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。

四、发射机

图中信号从左向右流动,基带信号经过 GFSK 调制分成同相(I 信号)和正交(Q 信号)两路信号,再依次经过 DA 转换和低通滤波器,然后利用频率合成器进行频率上转换,再将两个信号分量合成后通过 PA 放大将信号推送到天线上。

I/Q 相位分量并行操作用以抑制镜像频率,PLL 驱动的频率合成器可以产生稳定和精确的频率信号,其他的滤波和变换则比较容易理解。

最小输出功率最大输出功率
0.01mW (-20dBm)100mW (+20dBm)

五、接收机

接收过程是发射过程的逆过程,但相比于发射机而言更加复杂。

在这里插入图片描述

蓝牙信号进入到芯片内部,首先经过低噪声放大器(LNA),仍然是分成 I/Q 两个相位分量,再通过带通滤波器,使用 VGA(Variable Gain Amplifier)进行放大,最后转成数字信号传入处理器。

BLE协议对于编码型和非编码型物理层给出了不同的接收灵敏度要求:

物理层类型接收灵敏度(dBm)
LE Uncoded PHY≤ -70
LE Coded PHY with S=2 coding≤ -75
LE Coded PHY with S=8 coding≤ -82

市面上的 BLE 芯片大多都宣称达到 -90dBm 甚至更低的接收灵敏度。

在理想的条件下,假设发射机输出功率是 0dBm,接收机灵敏度是 -90dBm,发射机输出信号经过一段路径到达接收机,功率衰减到 -90dBm,意味着这段路径上的路径损耗等于 90dB。如果输出功率是 20dBm,当衰减至 -90dBm 时,路径损耗就是 110dB。

路径损耗与通信距离有如下相关性:

p a t h l o s s = 40 + 25 × l o g ( d i s t a n c e ) path loss = 40 + 25 × log(distance) pathloss=40+25×log(distance)

见下:

路径损耗(path loss)通信距离(distance)
50dB2.5m
60dB6.3m
70dB16m
80dB40m
90dB100m
100dB250m
110dB630m

当发射功率为默认 0dBm,接收灵敏度为 BLE 协议规定的最小值 -70dBm,那么可实现的最大距离为 16m,这也是许多文档认为 BLE 是一个 10 米范围的通信技术的原因。考虑到大多数 BLE 芯片的接收灵敏度都优于 -90dBm,实际通信距离应大于 10米。

六、收发机

前面介绍了发射机和接收机,在实际的 BLE 芯片中,接收机和发射机放在同一个电路中,称为收发机(Transceiver),下图是一个 2.4GHz 产品框图,有实际的参考价值:

标签:协议,LE,编码,PHY,物理层,BLE,调制
From: https://blog.csdn.net/Teminator_/article/details/142311240

相关文章

  • USB协议详解第10讲(USB描述符-报告描述符)
    1.报告描述符的概念和作用开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构。首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送或者索取数据,也就是说USB主机发送一个请求,设备要根据硬件操作,向主机提交自己的状态变化,例......
  • 总结!计网分层 每层任务 每层协议
    总结!计网OSI七层模型及每层作用?每层协议有哪些?OSI七层模型是什么?每一层的作用是什么?应用层解决通过应用进程的交互来实现特定网络应用的问题表示层进行数据处理比如编码解码加密解密压缩和解压缩会话层管理应用进程之前的会话传输层解决进程之间基于网络......
  • 安全: nftables基础知识系列之二:查看规则/删除规则
    一,查看规则查看所有规则[root@192~]#nftlistrulesettableinetmy_table{chainmy_chain{typefilterhookinputpriorityfilter;policyaccept;tcpdport22accepttcpdport80accept......
  • el-table使用el-switch选择器没效果
    出现问题的代码:0表示启用,1表示禁用,发现页面根本没有效果,百思不得其解,查阅资料,恍然大悟。<el-table:data="userList"stripeborderstyle="width:100%"height="500"><el-table-columnprop="status"label="用户状态"width="120&qu......
  • C++11 线程同步接口std::condition_variable和std::future的简单使用sk
    合集-C++(1)1.C++11线程同步接口std::condition_variable和std::future的简单使用09-17收起std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。......
  • 安全:nftables:基础知识
    一,policy:1,原文档链接:https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/assembly_creating-and-managing-nftables-tables-chains-and-rules_getting-started-with-nftables#con_basics-of-nftables......
  • 基于通信协议与技术架构的API接口分类探讨
    API的全称是“ApplicationProgrammingInterface”,意为“应用程序编程接口”API接口的分类:按照技术分WebAPI:基于Web的API,通过HTTP和HTTPS协议与应用程序交互,如RESTfulAPI和SOAPAPI。云API:用于在云计算环境中管理和操作云服务,例如AmazonWebServicesAPI和MicrosoftA......
  • C++11 线程同步接口std::condition_variable和std::future的简单使用
    std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。具体参见示例代码:#include<iostream>#include<mutex>#include<thread>#include<queue>std......
  • Double Write
    优质博文:IT-BLOG-CN一、存在的问题为什么需要DoubleWrite:InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基本单位,那么将一个Page写到磁盘上,在OS级别需要4个块。当发生数据......
  • PlayReady DRM 是微软开发的一种数字版权管理技术,旨在保护和管理数字内容的版权。它提
    PlayReadyDRM是由微软公司(Microsoft)开发的数字版权管理(DRM)技术。其起源可以追溯到2000年代初期,微软意识到需要一种强大的解决方案来保护其数字内容的版权,尤其是在不断增长的在线媒体和流媒体服务领域。发展背景:初期DRM技术:在PlayReady出现之前,微软已经推出了其他D......