BLE蓝牙发送速率、BLE底层蓝牙分包机制、BLE底层蓝牙重发机制、BLE中的MTU、BLE中蓝牙连接后数据通道选择

本文主要是介绍BLE蓝牙发送速率、BLE底层蓝牙分包机制、BLE底层蓝牙重发机制、BLE中的MTU、BLE中蓝牙连接后数据通道选择,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、BLE蓝牙发送速率

BLE的发送速率取决于多个因素,包括BLE的版本、连接参数和物理环境。

  1. BLE版本: BLE有多个版本,包括4.0、4.1、4.2和5.0。每个版本都引入了不同的特性和改进,其中一些可能影响传输速率。通常来说,较新的BLE版本支持更高的数据传输速率。

  2. 连接参数: BLE设备在连接时会协商连接参数,其中包括连接间隔、连接超时等。这些参数直接影响到数据传输速率。较短的连接间隔通常意味着更频繁的数据传输,从而提高了速率。

  3. 物理环境: 物理环境的影响也很大。例如,有可能存在无线信号干扰、距离远近、障碍物等因素,这些都可能影响BLE的性能和传输速率。

  4. 数据包长度: BLE设备在传输数据时会将数据分割成多个数据包。数据包的长度也会影响传输速率,因为较大的数据包可以在较短的时间内传输更多的数据。

举例:假设一包数据为256个字节,他理论多长时间可以传输过去?

其中主要考虑连接间隔(Connection Interval)和数据包长度(Packet Length)这两个关键参数。

在BLE中,连接间隔的取值范围通常在7.5毫秒到4秒之间,数据包长度可以在27字节到251字节之间选择。

假设连接间隔为20毫秒,数据包长度为256字节:

传输速率 = 数据包长度/连接间隔

传输速率 = 256 字节/0.02 秒 = 12800 字节/秒

理论上传输时间可以通过总数据量除以传输速率得到:

传输时间 = 总数据量/传输速率

传输时间=256 字节12800 字节/秒≈0.02 秒

 2、BLE底层蓝牙分包机制

BLE的底层蓝牙分包机制涉及到将数据包划分为不同的数据通道上的数据包。以下是 BLE底层蓝牙分包机制的一般步骤:

  1. 数据包准备: 待发送的数据被划分为适当大小的数据包,每个数据包包含特定数量的字节。BLE规范定义了数据包的最小和最大长度,通常在27字节到251字节之间。

  2. 数据包传输: 在连接事件的数据通道上,BLE设备可以传输数据包。数据包可以由两个主要类型的子包组成:首先是ADV(Advertise)和后续是DATA(Data)。ADV子包主要用于广播,而DATA子包用于数据传输。

  3. 数据包顺序: 在一个连接事件中,多个数据包按照特定的顺序传输。数据包的顺序在连接事件开始时由发送方确定,并且在连接事件中保持不变。

  4. ACK确认: 接收方会发送ACK(Acknowledgment)子包来确认已成功接收数据包。如果发送方收到了ACK,则知道数据包已成功传输,否则可能会进行重传。

  5. 数据包丢失和重传: 如果某个数据包在传输过程中丢失,发送方可以选择在后续的连接事件中重新传输该数据包。

 3、BLE底层蓝牙重发机制

  1. ACK确认: BLE使用ACK(Acknowledgment)机制来确认接收到的数据包。在发送方成功发送一个数据包后,接收方会返回一个ACK信号,表示数据包已经成功接收。如果发送方在一定时间内没有收到ACK,它会认为数据包丢失,然后尝试重新发送。

  2. 自动重传: 如果发送方在规定的时间内没有收到ACK确认,它将尝试自动重传相同的数据包。这样的机制确保了即使某个数据包在传输过程中丢失,发送方仍有机会通过重传来恢复丢失的数据。

  3. 连接事件和数据通道: BLE通信是基于连接事件和数据通道的。在每个连接事件内,数据传输会发生在数据通道上。如果某个数据包在一个连接事件中丢失,发送方可以选择在后续的连接事件中重新传输该数据包。

以下是一些与重发机制相关的连接参数:

  1. Connection Interval(连接间隔): 连接间隔是两次连接事件之间的时间间隔。较短的连接间隔意味着数据包可以更频繁地传输,但也可能增加能耗。如果连接间隔较短,数据包传输的频率可能较高,从而提高了数据传输的可靠性,因为在一个连接事件内可以更快地检测和处理丢失的数据包。

  2. Slave Latency(从机延迟): 从机延迟表示从机可以跳过的连接事件的数量。在从机延迟期间,从机可以进入低功耗状态。较小的从机延迟可能减少了连接的能耗,但较大的从机延迟可能导致数据包在连接事件中的较长时间内未被处理,从而增加了丢包的风险。

  3. Connection Timeout(连接超时): 连接超时是指连接事件之间的最大时间。如果在这个时间内没有成功传输数据,连接将被视为失败。较短的连接超时可以更快地检测连接问题,但同时可能会增加丢包的可能性。

4、BLE中的MTU

定义了在一个数据通道上一次能够传输的最大数据包大小。MTU的设置对于BLE通信的效率和性能具有影响。

  1. 协商过程: MTU的值是在连接建立时由BLE设备之间进行协商确定的。连接过程中,设备可以通过协商来确定支持的MTU大小。

  2. MTU大小: MTU的大小表示一个BLE设备能够在一个连接事件内发送或接收的最大字节数。较大的MTU通常可以提高数据传输的效率,因为更多的数据可以在一个数据包内传输。

  3. ATT协议: MTU是与ATT(Attribute Protocol)层密切相关的。ATT层用于在BLE设备之间传输数据。GATT(Generic Attribute Profile)是建立在ATT之上的,用于组织和描述BLE设备之间交换的数据。

  4. MTU Exchange Procedure(MTU交换过程): MTU的协商是通过MTU交换过程来实现的。在这个过程中,设备之间会交换它们支持的MTU大小,然后选择一个较小的值作为连接期间的MTU。

  5. 默认值: 如果没有进行MTU的显式协商,那么BLE设备可能会使用一个默认的MTU值。这个默认值通常是23字节,但具体取决于设备和实现。

  6. 影响性能: MTU的大小会直接影响到BLE设备之间的数据传输性能。在一些应用中,可以通过使用较大的MTU值来提高数据传输的效率,减少通信的开销。

5、 BLE中蓝牙连接后数据通道选择

  1. 通信协商: BLE中的数据通道选择是通过连接参数协商来确定的。在连接建立时,主机和从机会协商连接参数,其中包括通信频率(Channel Map)。通信频率是一个40位的二进制值,每一位对应一个数据通道,1表示使用,0表示不使用。通过这个协商过程,BLE设备会在连接建立后确定使用哪些数据通道进行通信。

  2. 通道选择算法: 通道选择算法用于确定哪些数据通道应该被使用。BLE设备通常采用哈希函数或伪随机算法来生成通信频率。这样可以确保设备之间在连接建立时选择相同的通信频率,从而在相同的数据通道上进行通信。

  3. 数据通道映射更新: 在连接的过程中,通信频率可能会发生变化。BLE设备可以通过L2CAP层(Logical Link Control and Adaptation Protocol)发送Channel Map Update请求来请求通信频率的更新。这样可以在运行时适应通信环境的变化。

  4. 信道质量: 通信频率的选择还可能受到当前通信环境的信道质量的影响。设备可以通过信道质量指示(Channel Quality Indicator,CQI)来了解信道的质量,并相应地选择合适的数据通道。

协商通信频率的过程通常包括以下步骤:

  1. 连接请求和响应: 主机向从机发送连接请求,从机响应连接请求。在这个过程中,双方可以交换一些基本的连接参数,包括通信频率。

  2. 通信频率的协商: 通信频率是通过连接参数协商来确定的。通常,设备会采用一种算法,比如哈希函数或伪随机算法,生成通信频率。协商的目的是确保连接时设备之间选择相同的通信频率。

  3. 连接参数更新: 在连接过程中,设备还可以通过L2CAP层(Logical Link Control and Adaptation Protocol)发送Channel Map Update请求,请求更新通信频率。这使得设备可以在连接的运行时动态地适应通信环境的变化。

这篇关于BLE蓝牙发送速率、BLE底层蓝牙分包机制、BLE底层蓝牙重发机制、BLE中的MTU、BLE中蓝牙连接后数据通道选择的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635071

相关文章

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red