蓝牙 - BLE SPP的设计策略(Serial over BLE strategy)

news/2024/5/9 13:44:51/文章来源:https://blog.csdn.net/guoqx/article/details/132354271

在开发 BLE 连接产品的过程中,你可能会有这样的疑问:"Serial profile在哪里?也许你以为你在蓝牙技术联盟网站上滚动浏览长长的profile列表时错过了它。又或者,你根本就没去看,而是准备选择更快的方法,即芯片组提供的串行 API实现。而实际上,这两种方法都不行,官方蓝牙配置文件是不支持串行 Rx/Tx的。

那么,蓝牙低功耗串口是否只是那些不愿意学习蓝牙方法的人使用的差劲手段?或者,蓝牙低功耗串行策略是否能带来合理的好处?

下一次为您的互联产品设计通信策略时,请记住以下几点:

蓝牙低功耗 (BLE) 是作为蓝牙(现在的蓝牙经典)的低功耗替代品而设计的。BLE 允许设备在使用纽扣电池的情况下通信数年。BLE 通过专注于尽可能高效地发送小块(chunks)数据来实现这一目标。为了实现这种效率,我们采用了一种名为 "属性协议"(Attribute Protocol - ATT)的客户端-服务器架构。

ATT 由Services服务、Characteristics特征和Descriptors描述符组成。对这些对象中的每一个都可称为profile配置文件。描述符属于特征,表示该特征的属性。特征具有一种状态,在不同状态下,客户端通过读取、写入或订阅其变化来与服务端的特征进行交互。服务是若干的特征组。

BLE 听起来一点也不像串行协议,不是吗?这是因为与串行数据包相关的所有开销都被抽象化了,只留下一个简单的读、写和通知接口。尽管如此,芯片制造商们还是接受了 BLE 串口协议,并各自在其芯片组上实现 BLE 串口协议,创建了自定义的配置文件(customer profiles)和 API。

Microchip Technology 的 Transparent UART Service、Nordic Semiconductor 的 Nordic UART Service 和 Texas Instruments 的 Serial Port Service 只是为 BLE 串口创建的定制配置文件中的几种。它们这样做是有道理的,因为为您的蓝牙低功耗产品选择BLE串口通讯(Serial over BLE)有很多好处。

注:BLE串口通讯指的是由单个service组成的 ATT 设计,这个service包含一个仅允许通知/指示(notify/indicate)的 RX 特性,还有一个仅允许写入的 TX 特性。

使用蓝牙低功耗串口的原因

使用蓝牙低功耗串行协议的主要原因是它更易于使用。对于嵌入式工程师来说,设计和使用串行协议就像呼吸一样简单。坚持使用熟悉的协议,开发速度会更快,最终产品也更可靠。

除了熟悉之外,使用 BLE 串口还意味着通过 BLE 发送的应用数据格式可与其他有线和无线传输协议(UART、SPI、Wi-Fi 等)互操作。因此,当 BLE 协议栈与主应用程序位于不同的处理器上时,BLE 串口也具有巨大的优势。

在独立于主应用程序的处理器上运行 BLE 堆栈是一种常见的嵌入式架构策略。这些 BLE 协处理器的复杂程度各不相同,有的是完整的 SoC,有的则是专用的 BLE 堆栈,但都足以完成工作。

无论硬件的功能如何,如果处理器不运行主应用程序,那么简单地配置 BLE 芯片并将其作为另一条 UART 线路进行交互就非常有吸引力。更改数据包协议、发送新的数据类型以及调整数据包结构( packet infrastructure,如长度字段或数据包标识符字段)都可以在不更改 BLE 协处理器上任何内容的情况下完成,因为协处理器并不关心发送的内容,它只是转发所有内容。

BLE 串口一般可以更快地建立连接。如上图所示,连接建立时间往往与发现的服务、特征和描述符的数量成线性关系。

"Discovering发现 "指的是映射出所有服务、特性和描述符的句柄,以便应用程序知道它们是什么,并能在以后引用它们。在连接启动时,每发现一个额外的服务、特性或描述符,就需要增加一到三个连接时间间隔,然后才能使用连接传输应用程序数据。

iOS 系统的连接时间间隔(Connection intervals)一般为 30 毫秒,但在 Android 系统上可低至 7.5 毫秒。BLE 串口架构只需使用一种服务和两种特性,即可传输大量的各式各样数据。

蓝牙低功耗串行通信的缺点

几乎所有形式的数字通信都基于串行协议,并具有不同的封装级别,甚至蓝牙经典协议也不例外。

那么,为什么不能将低功耗蓝牙用作简单的无线 UART 链路(link)呢?

串行比 BLE 的最大缺点(most considerable downside)是应用延迟(higher application latency)更高。应用延迟的增加会导致用户体验不佳,并浪费或占用了一些时间,这些时间本来是设备可以进入低功耗状态来节能的。

如图上图所示,收到请求后,必须将其传递给外设应用层(peripheral’s application layer)执行。执行请求后,必须将响应封装到适当的数据包中。然后将响应数据包交给外设的 BLE 堆栈,由其向中心设备发送指示(sends an indication to the central)。

即使外设应用程序直接从内存中返回数据,中心设备也至少需要两个连接间隔才能收到所请求的数据。考虑到在大多数情况下,应用程序向 BLE 层发出的每个请求都需要排队,因此中心设备收到其发出请求的响应所花费的时间,通常还会需要更多个连接间隔。

对于标准的 BLE 读取请求,如上图所示,外设应用程序会不断更新特征的状态。读取时,特征已包含所请求的数据,并立即做出响应。请求和响应保持在一个连接间隔内。

BLE 串行模式的应用延迟也更高,因为连接中的两个设备都不能过滤掉它们不感兴趣的数据种类。因此,所有数据包都必须通过 BLE 发送并传递到应用层,然后才能丢弃不重要的数据包。

BLE 串行策略中浪费时间和电流的另一个因素是在应用层为数据包所增加的开销。数据包标识符、长度字段和校验和都是在 BLE 串行策略中添加到应用层数据包的字段。同样的字段也会添加到封装的 BLE 数据包中。这些重复的字段为 BLE 无线电传输增加了更多比特,但其价值微乎其微,因为 BLE 协议有自己的机制来处理各种相应问题。

如果您的 BLE 产品打算与运行 iOS 和 Android 的设备进行通信,那么还有其他一些注意事项需要牢记。首先,复杂的数据包协议需要更详尽的文档,以便开发人员(很可能在不同的团队中)参照使用。BLE 数据包串行还要求移动应用程序有一个中央数据包处理基础架构来检查所有种类的数据包协议,以便知道如何解析出有用信息并将其发送到哪里。最后,移动编程语言(mobile programming languages, 比如Android的。)很难处理小于一个字节的对象,因此 BLE 串行数据包只能由字节大小的数据单位构成。

BLE 串行数据包的最后一个缺点是,使用自定义数据包协议严重限制了与其他 BLE 软件的互操作性。随着 BLE 无线电设备数量的增加,我们不难想象设备与其合作伙伴应用程序和其他基于 BLE 的系统进行通信的可能性;这才是蓝牙技术联盟配置文件(profiles)真正强大之处,能够实现统一的profiles。

在互联产品中,我们应该选择使用什么技术(What Should You Use in Your Connected Product)

既然您已经知道 BLE串行通信策略的优缺点,你可能会问:"对我们的产品来说,在设计上我该如何做出正确决定?"

答案在很大程度上取决于设计者,因为无论采用哪种方法,都能做出一个可用的产品,完成设计任务。然而,设计方法既会影响产品开发的难易程度,也会影响产品的性能。

在比较通信策略时,首先要考虑的是产品的现实条件限制(physical constraints)。如果吞吐量是您的首要考虑因素,那么串行通信策略可以让您在最短的时间内传输最多的数据,尤其是在大部分数据都是单向流动的情况下。你需要了解如何从 BLE 无线电(radio)中获得最大性能。如果您的蓝牙模块处理能力不足,那么使用该蓝牙模块的最简单接口方式,就是使用串行通信策略的接口。

上面的情况是倾向于使用BLE串行通讯的。如果你正在构建的产品的硬件方案的现实条件的约束不是问题,那么你应该将重点放在用户体验(UX, user experience)限制上:  延迟(latency)。

良好的用户体验首先来自于制造出每次都能正常工作、使用简单(intuitive )的设备。当然需要保证的是,延迟不会影响良好的用户体验。在这种情况下,我们要优化的是连接延迟与应用延迟(connection latency vs. application latency)。

连接延迟是指连接到应用数据传输点所需的时间。另一方面,应用延迟是指从应用向连接设备发出请求到应用得到响应所需的时间。

连接延迟可通过使用更快的广播速率(Advertising rates)、使用更少的服务和特性来改善,就如在 BLE 串行策略中所用的。但是,使用BLE 串行协议是以应用程序延迟为代价的,尤其是在默认情况下,信息流在连接过程中是持续不断的。

使用客户端-服务器设计可避免这种应用延迟,并有助于提供闪电般快速的响应。对于使用的连接保持很长(long-running connections)的设备来说,连接设置时间和应用程序延迟之间的权衡是很容易的( the tradeoff between connection setup time and application latency should be a no brainer)。你可以多添加些特性。

混合模式: 两全其美 (Hybrid Models: The Best of Both Worlds)

BLE 串行策略和客户端-服务器方法是光谱的两端。对于许多产品来说,最佳设计介于两者之间。

在 Punch Through公司来说,客户通常是在已经实现了 BLE 串行策略后才来找此公司咨询的。而当有机会从头( from scratch)开始编写产品的通信协议时,通常会设计一种混合策略。

以下是我们设计混合 BLE 架构的一些经验法则:

  • 从 BLE 串行策略开始,然后根据需要提取功能。

  • 任何需要由中心快速访问的值都应具有外设始终保持更新的可读特性

  • 日志或固件更新等批量后台传输应具有自己的特性,这样才不会阻塞(clog up)与用户体验相关的通信。

  • 应将快速变化的状态信息分组,以便将这些信息视为单个时间点的快照。当系统需要来自多种传感器的数据来描述设备状态时,这一点非常有用。

  • 对当前客户端无用的信息应通过不同的特性进行传输,或让客户端根据自己的兴趣打开或关闭信息。这样,客户端就能控制接收哪些信息。

  • 对其他系统有价值的信息应通过标准蓝牙配置文件公开。(如电池电量battery level、温度等信息)

参考:

1,BLE SPP设计策略

Bluetooth Low Energy Serial: A Valid Design Strategy? | Punch Through

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

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

相关文章

人脸识别技术在社会安全与便利中的应用

引言:随着人工智能的快速发展,人脸识别技术已经成为一种实时、高效的身份验证和安全监控手段。它的广泛应用可以帮助识别犯罪嫌疑人、寻找失踪人口等,为社会安全和公共利益做出了重要贡献。本文将详细探讨人脸识别技术的原理、应用&#xff0…

【高级IO】- 五种 IO 模型 | 多路转接 - select

IO的基本概念 I/O(Input / output)就是输入和输出,在冯诺依曼体系中,将数据从输入设备拷贝到内存叫做输入,将数据从内存拷贝到输出设备叫做输出。 对文件进行的读写操作本质就是一种IO,文件IO对应的外设就…

Linux命令200例:clock的具体应用,设置系统的时钟时间、硬件时钟和定时器等相关信息

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

前端对文件转换处理的一些常用方法

文章目录 0,前言1,将图片的url网络链接(http://) 转为base64格式2,将base64的图片数据转换为file文件3,将以base64的图片数据转换为Blob4,将file文件转化为base645,将file文件转换为Blob6,获取文…

微信公众平台发布小程序流程

最近因为部署小程序,学习了下如何部署小程序 1. 取消不检验合法域名并上传小程序 建议在小程序上传之前,先取消不校验合法域名并真机调试下。 2. 登录微信公众平台 登录微信公众平台 3. 设置服务器域名 在开放->开发管理->开发设置找到服务器…

三维重建_基于图像的三维重建_面片/光度一致性

参考: 深蓝学院 基于图像的三维重建 1. 三维重建的流程回顾 基于深度图的三维重建:从无序图像获取稀疏点云和位姿,然后进行多视角立体重建。 多视角立体重建包含:(输入稀疏点云、各个图像位姿、图像)先进行立体对(3D-2D,2D-2D)的选择,然后计算深度图,接着进行深度图…

【C语言】C语言用数组算平均数,并输出大于平均数的数

题目 让用户输入一系列的正整数&#xff0c;最后输入“-1”表示输入结束&#xff0c;然后程序计算出这些数的平均数&#xff0c;最后输出输入数字的个数和平均数以及大于平均数的数 代码 #include<stdio.h> int main() {int x;double sum 0;int cnt 0;int number[100…

使用 AI 将绘画和照片转换为动画

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 华盛顿大学和Facebook的研究人员最近发表了一篇论文&#xff0c;展示了一种基于深度学习的系统&#xff0c;可以将静止图像和绘画转换为动画。称为照片唤醒的算法使用卷积神经网络从单个静止图像以 …

WPF入门到精通:1.新建项目及项目结构

WPF&#xff08;Windows Presentation Foundation&#xff09;是一种用于创建 Windows 应用程序的技术&#xff0c;它可以通过 XAML&#xff08;Extensible Application Markup Language&#xff09;和 C# 或其他 .NET 语言来实现。WPF 提供了许多强大的 UI 控件和样式&#xf…

如何找到一个数的所有质因数,以及如何快速判断一个数是不是质数

前情介绍 今天遇到一个需求&#xff1a;找到一个数所有的质因数。 初步解决 先定义一个判断质数的函数&#xff1a; def is_Prime(number):i 2count 0while i < number:if number % i 0 :count 1i 1if count > 0:return Falseelse:return True 接着定义一个寻找质…

Java-图书登录系统的实现

实现效果 它将面对 管理员 和 普通用户 两种用户来提供服务&#xff0c;并且各自的服务并不相同。 实现思路 一般写项目&#xff0c;每个独立的功能都会写成一个类&#xff0c;而有关联的功能&#xff0c;都会将多个类存放在一个包中&#xff0c;此项目我们将用 3 个包来体现我…

链表之第三回

欢迎来到我的&#xff1a;世界 该文章收入栏目&#xff1a;链表 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言第一题&#xff1a;判断是否为环形链表第二题&#xff1a;找到两条链表的相交点第三题&#xff1a;返回…

P17~P18 电路定理 电路中难得的精彩到极致的电路理论

特勒根定理、互易定理、对偶定理比较难&#xff0c;非常重要&#xff0c;因为他们可以解决其他定理无法解决的问题。 1、特勒根定理1——个人感觉像能量守恒 特勒根定理与基尔霍夫定理齐名&#xff0c;与拓扑结构有关。都适用于任何线性非线性&#xff0c;时变的非时变的元件…

分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测

分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测 目录 分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测 程序设计 完整源码和数据获取方式&#xff1a; …

网站老域名跳转到新域名有哪些方法?内网穿透内网主机让外网访问

在网站服务器变更及本地主机搭建时&#xff0c;我们经常会遇到老域名地址跳转到新URL的配置&#xff0c;一些朋友还会面对无公网IP让外网访问的问题。今天我们来了解下网站老域名跳转到新域名有哪些方法&#xff0c;以及如何通过内网穿透实现内网主机让外网访问。 网站老域名跳…

Mac上传项目源代码到GitHub的修改更新

Mac上传项目源代码到GitHub的修改更新 最近在学习把代码上传到github&#xff0c;不得不说&#xff0c;真的还挺方便 这是一个关于怎样更新项目代码的教程。 首先&#xff0c;在本地终端命令行打开至项目文件下第一步&#xff1a;查看当前的git仓库状态&#xff0c;可以使用git…

线上异常的处理

一、线上问题的排查 进程ID 简称为PID free -m 查看内存使用情况 iostat 查看磁盘读写活动情况 netstat 查看网络连接情况 df -h 查看磁盘空间使用情况 du -sh 查看文件大小情况 1.1、top 命令查看CPU占用情况 top -n num 查看CPU占用最高的num个进程top -Hp PID 或 top -H -p…

【ROS】参数服务器--理论模型与参数操作(C++)

一、概念介绍 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 作用&#xff1a;存储一些多节点…

【MySQL系列】SQL语句入门(创建删除操作)、字符集和数据类型详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

HummingBird 基于 Go 开源超轻量级 IoT 物联网平台

蜂鸟&#xff08;HummingBird&#xff09; 是 Go 语言实现的超轻量级物联网开发平台&#xff0c;包含设备接入、产品管理、物模型、告警中心、规则引擎等丰富功能模块。系统采用GoLang编写&#xff0c;占用内存极低&#xff0c; 单物理机可实现百设备的连接。 在数据存储上&…