蓝牙----蓝牙协议栈Host层

蓝牙协议栈----Host层

  • 蓝牙物理层基本信息
  • 链路层的状态机
    • 进入连接态的步骤
    • 主动扫描与被动扫描
    • 链路层通信模式
  • 蓝牙地址
    • 蓝牙设备地址
    • 蓝牙标识地址
    • 蓝牙接入地址
  • 蓝牙广播信道管理
  • 蓝牙数据信道跳频


蓝牙协议栈Host层包括PHY、LL、HCL层,注重关注PHY物理层和LL链路层。

蓝牙物理层基本信息

► 蓝牙使用高斯频移键控GFSK
► 频率范围2.4000 GHz - 2.4835GHz,又划分为40个channel,
► 第一个通道的中心频率是2402MHz,最后一个通道的中心频率是2480MHz
► 有效频率偏移为:±185kHz

LE 物理层的四种工作模式:

  • LE 1M sym/s:三种模式,非编码模式,S=2映射编码模式,S=8映射编码模式。
  • LE 2M sym/s:1种模式, 非编码模式。

2M因为传输速率更快,所以具有更低的功耗
1Mcode因为由编码传递适用FEC纠错码,所以具有更远的连接距离

物理层调制方式符号速率信息速率通信距离数
LE 1M PHY1M sym/s1Mb/s1Mb/s1
LE CodedPHY S=21M sym/s1Mb/s500kb/s2
LE CodedPHY S=81M sym/s1Mb/s125kb/s4
LE 2M PHY1M sym/s2Mb/s2Mb/s0.8

链路层的状态机

  • Standby State(就绪态):设备上电后,设备处于就绪态
  • advertising State(广播态):设备进行广播数据和扫描响应数据发送。广播态在链路层有两种变化:广播态设备停止广播进入就绪态。广播态的设备收到发连接请求后进入连接态。
  • Scanning(扫描态):设备监听哪些设备正在广播,扫描态的设备停止扫描进入就绪态。
  • Initiating(发起态):设备处于发起态进而发起连接,处于发起态的发起者,收到想连接设备的广播报文,链路层会向其发起连接请求并进入连接态,广播者也进入了连接态
  • Connection(连接态):主设备从发起态进入连接态,从设备从广播态进入连接态。
    在这里插入图片描述

进入连接态的步骤

广播态不断发送广播
扫描态扫描到广播进入就绪态,再由就绪态进入发起态
发起态进入连接态;广播态进入连接态

主动扫描与被动扫描

  • 主动扫描:广播态设备接收了广播报文后,发送扫描请求给广播设备,并接收广播设备的扫描响应数据。
  • 被动扫描:广播态设备仅侦听正在广播的设备,并接收其发送的广播报文。

链路层通信模式

  • Advertiser — Scanner:广播者与扫描者之间通过广播信道传输数据,是一种一对多的通信方式,进行广播者到扫描者的单方向通信。
  • Master/Central — Slave/Peripheral:主从设备通过数据信道传输数据,是一种一对一的通信方式,没对主从机进行各自的双向通信。

蓝牙地址

蓝牙设备地址Device Addres
蓝牙标识地址Identity Address
蓝牙接入地址Access address

蓝牙设备地址

设备地址Device Addres为48bit有两大类公共地址、随机设备地址,一共有四种:
1.公共地址
公共设备地址创建时需要获得IEEE分配的MAC地址块
2.随机设备地址

随机静态地址:电源重启后设备赋予新的静态地址值
在这里插入图片描述

可解析的私有地址:为生成可解析私有地址设备必须有本地身份解析码(IRK)或对等身份解析码(IRK)。
可解析私有地址通过IRK和随机产生的24位随机数来生成。可解析私有地址的随机数被称为prand值。
一端通过IRK和Prand生成Hash,Prand和Hash做为可解析的私有地址发送;
发送另一端用接收到的Prand和使用的IRK计算得到Hash,与接收到的Hash比较,相同代表识别成功。
在这里插入图片描述

不可解析的私有地址
在这里插入图片描述

私有地址是实现蓝牙设备隐私(Privacy)的技术基础

蓝牙标识地址

► 如果一个设备仅支持public address, 那么该public address 可以作为这个设备的indentify address,在配对过程中使用
► 如果一个设备支持random static address,同样可以作为indentify address使用
► 如果一个设备使用的是resolvable private address,通过IRK解析之后的地址,是indentify addres

蓝牙接入地址

32Bit,用于标识一个蓝牙通信事件

蓝牙广播信道管理

BLE有12个channel与wifi的常用信道不重合,其中37,38,39用于广播,所有BLE设备共用这三个信道广播

► 每包广播数据,都会在37、38、39三个信道上依次发送一次。
► 广播信道的随机延时:每一个广播包实际发送的广播间隔,会+10ms以内的随机延时,避免和其他设备产生冲撞。
► 广播信道不允许发送超过37字节的数据。
►广播信道不支持5.0协议的2M PHY的传输速率。

蓝牙数据信道跳频

信道地图:
信道评估依靠RSSI(接收信号强度指示)PER(分组错误率)对每一个物理信道的可用性进行分类标注为可用或不可用。对于标注为不可用的物理信道在跳频时不予选用。信道地图由低功耗蓝牙连接中的中心设备绘制并提供给与其相连接的周边设备。

跳频公式:
f(n+1)=(fn+hop)mod37
fn:为上一次连接事件使用的信道索引(初始时此值为0);
f(n+1):为首次计算的下一次连接事件使用的信道索引;
hop:为跳频参数值,取值范围为5到16,由中心设备决定并在发起连接时通知与其连接的周边设备

CSA#1:
► 根据跳频算法计算后当f_(n+1) 为信道地图中的可用信道时直接使用
► 当f_(n+1) 为信道地图中的不可用信道时则重新计算。
○ 重新计算算法: f_new= f_(n+1) mod N,
f_new 为重新计算得到的信道地图索引所对应的信道 (信道地图中的可用信道从0开始升序编号)
N:指信道地图中可用信道数量。

CSA#2:跳频阶跃hop不是固定的。
hop每次计算的目的是:每个连接事件与先前的连接事件相比发生在最小频率偏移,避免干扰和多路径衰落效应。

跳频#1只适用于连接信道,跳频#2可以用在广播信道和连接信道。

自适应跳频AFH:允许蓝牙通过识别固定的干扰源并将其从可用信道列表中排除来适应环境。
信道地图重新获取,需要传递的参数:
新的信道图:channel Map
瞬时:设备双方使用新的channel Map的切换时间。

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

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

相关文章

电脑监控系统:企业网络安全解决方案

在当今数字化的世界里,企业的网络安全已经成为一项至关重要的任务。电脑监控系统作为一种有效的解决方案,正在被越来越多的企业所采用。 电脑监控系统是一种集成了多种安全功能的综合性解决方案,旨在为企业提供全面的网络安全防护。该系统能够…

JavaWeb01--Tomcat

1、JavaWeb概述 Web开发是基于请求和响应的: 请求:浏览器(客户端)向服务器发送信息 响应:服务器向浏览器回送信息 请求和响应是成对出现的。 Web资源分类 所谓Web资源即放在Internet网上供外界访问的文件或程序&#x…

31、WEB攻防——通用漏洞文件上传JS验证mimeuser.ini语言特性

文章目录 文件上传一、前端验证二、.user.ini 文件上传 检测层面:前端、后端等检测内容:文件头、完整性、二次渲染等检测后缀:黑名单、白名单、MIME检测等绕过技巧:多后缀解析(php5、php7)、截断、中间件特…

代码随想录算法训练营第十四天|二叉树基础-二叉树迭代-二叉树

文章目录 二叉树基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树的存储方式链式存储顺序存储 二叉树的遍历方式二叉树的定义 二叉树的递归遍历144.二叉树的前序遍历代码: 145.二叉树的后序遍历代码: 94. 二叉树的中序遍历代码 二叉树的…

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法,1到2分钟部署完成,稳定运行无卡顿,阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程,基于阿里云计算巢、云服务器或无影云桌面都可以: 基于阿里云幻兽帕鲁服务器创建教程 基于…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

CSDN年度报告图片卡通小人收集

摘要&#xff1a;CSDN推出的年度报告真的太赞了&#xff0c;还定制了诸如“情感的编织者”“敏锐的激励者”“灵感的捕捉者”“组织的表达者”“洞悉的指挥家”“心灵的领航员”“生动的记录者”“温暖的叙述者”“理性的探索者”等等精准且浪漫的标签&#xff0c;加上非常有灵…

基于Java SSM框架实现在线考试系统项目【项目源码+论文说明】

基于java的SSM框架实现在线考试系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

modelscope下载模型

# 私有模型下载&#xff0c;前提是您有响应模型权限 方法1 git lfs install git clone http://oauth2:your_git_tokenwww.modelscope.cn/<namespace>/<model-name>.git 如何获取git token 用您的账号登录https://www.modelscope.cn &#xff0c;在个人中心->访…

正确看待华为鸿蒙……是盲目跟风吗?

先要了解纯血鸿蒙是什么&#xff1f;与之前的套壳Android版本区别在哪&#xff1f;了解这核心东西之后才会真正的看出“纯血鸿蒙”的未来与发展。 纯血鸿蒙全栈自研 HarmonyOS NEXT系统底座全线自研&#xff0c;去掉了传统的Linux内核以及AOSP等代码&#xff0c;仅支持鸿蒙内…

3分钟搭建幻兽帕鲁私服,无需任何命令代码,点点鼠标一键部署

想玩《幻兽帕鲁》和朋友们一起乐呵呵&#xff1f;这个指南教你怎么在阿里云上弄个游戏服务器&#xff0c;超简单。点几下鼠标&#xff0c;2、3分钟就搞定&#xff0c;不用头疼设置那些复杂的东西。一键部署幻兽帕鲁私服&#xff0c;告诉你私服怎么搭建 本次利用阿里云服务器的…

极限【高数笔记】

【分类】分为了两大类&#xff0c;一个是数列的极限&#xff0c;一个是函数的极限 【数列的极限】 1.定义&#xff1a; 简单来讲&#xff0c;就是&#xff0c;当n无限趋近于无穷时&#xff0c;数列{an}无限趋近一个常数A&#xff0c;此时&#xff0c;常数A就是它们此时情况下的…

springboot快速写接口

1. 建proj形式 name会变成文件夹的名字&#xff0c;相当于你的项目名称 基础包 2. 基础依赖 3. 配置数据库 这里要打开mysql&#xff0c;并且创建数据库 方法&#xff1a; 安装好数据库&#xff0c;改好账号密码用navicat来建表和账号配置properties.yml文件即可 4.用res…

Aleo项目详细介绍-一个兼顾隐私和可编程性的隐私公链

Aleo上线在即&#xff0c;整理一篇项目的详细介绍&#xff0c;喜欢的收藏。有计划做aleo节点的可交流。 一、项目简介 Aleo 最初是在 2016 年构思的&#xff0c;旨在研究可编程零知识。公司由 Howard Wu、Michael Beller、Collin Chin 和 Raymond Chu 于 2019 年正式成立。 …

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;用于演示欧姆定律。用户可以通过输入电阻值来计算电流&#xff0c;并在图形上显示结果。该程序使用了Tkinter库来创建GUI&#xff0c;matplotlib库来绘制图形&#xff0c;以及numpy库进…

Unity出AAB包资源加载过慢

1&#xff09;Unity出AAB包资源加载过慢 2&#xff09;Unity IL2CPP打包&#xff0c;libil2cpp.so库中没有Mono接口 3&#xff09;如何在URP中正确打出Shader变体 4&#xff09;XLua打包Lua文件粒度问题 这是第370篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&…

Ubuntu20.04输入法异常导致的黑屏:fcitx和ibus输入法的卸载与安装

Ubuntu20.04输入法异常导致的黑屏&#xff1a;fcitx和ibus输入法的卸载与安装_ubuntu卸载fcitx-CSDN博客 问题背景 系统&#xff1a;Ubuntu20.04 由于fcitx的不完整配置&#xff0c;导致fcitx输入法无法正常工作。决心卸载所有输入法&#xff0c;重新安装。但是由于在没有完整…

[每日一题] 01.26 - 最长连号

最长连号 n int(input()) lis list(map(int,input().split())) res for i in range(n - 1):if lis[i] 1 lis[i 1]:res 1else:res 0res res.split(0) print(len(max(res)) 1)或者&#xff1a; n int(input()) lis list(map(int,input().split()))Max 1 for i in …

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南&#xff08;一&#xff09;——Data Store Memory模块执行时序Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…

win10安装redis并配置加自启动(采用官方推荐unix子系统)

记录&#xff0c;为啥有msi安装包&#xff0c;还这么麻烦的用linux版本redis的安装方式&#xff0c;是因为从github上下载别人制作的msi报毒&#xff0c;还不止一处&#xff0c;这种链接数据库的东西&#xff0c;用别人加工过的&#xff0c;都报毒了还用就是傻逼了。 所以采用…