BLE 外设吞吐量限制

2023-11-22

我们正在开发一款与 iPad 配合使用的 BLE 传感器外设,需要使用 TI CC2541 BLE 模块和自定义配置文件实现以下 BLE 通知特征(无应答)的数据吞吐量:

每 10 毫秒 1 个 20 字节(GATT 最大标准数据包),或者由于我们似乎限制每个连接间隔 4 个数据包,因此这相当于每 40 毫秒一个连接间隔。所需的吞吐量为每秒 2,000 字节,TI 网站建议将 CC2541 BLE 解决方案用于需要此级别数据吞吐量的多个传感器设备。

BLE 模块的配置文件设置的最小和最大连接间隔分别为 20ms 和 40ms,这应该足够了。 《苹果产品蓝牙配件设计指南》文档表明,我们设置的最小和最大连接间隔(如上所述)是正确的。我们在新的 Mac Mini / Mac Book 上使用适用于 iOS 6 的最新 iPad 和 Apple 工具。

通过 iPad 上的简单测试程序,我们可以使链接正常工作,以 20 毫秒的间隔向 BLE 外设发送 20 字节数据包,但是一旦我们根据需要将其降低到 10 毫秒,我们就会开始丢失数据包或收到损坏的数据包,我们有FIFO 空中断关闭,以便我们可以更快地处理向 BLE 模块 FIFO 的发送,并且我们使用最大波特率 230400 将 20 字节数据包从 micro 发送到 BLE TX FIFO。

我们意识到我们正处于 BLE 传输限制和可能性的顶端。谁能建议是否有解决方案可以使用 TI CC2541 BLE 芯片/模块和最新的 iPad 实现每秒 2000 字节的吞吐量?


我们成功地将 TI 2540(BLE 堆栈版本 1.3.2)与 iPad/iPod/iPhone(iOS 6.x 和 7.x)结合使用。目前,我们发送 75 个通知,每秒 20 字节 => 1500 字节/秒。但我尝试过发送 125 条通知,效果也很好。

当然,发送的数据越多,丢失数据的可能性就越大,例如,重新发送 HACK 消息的时间就越短。

我经历过 iOS 的 BLE 堆栈可能会进入一种模式,开始连续 NACK 消息。如果发生这种情况,您将丢失很多消息。我已向 Apple 报告了有关此问题的错误。 (这个问题似乎已经在iOS 7.1.beta3/4中得到修复。)

我目前有:

// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     10

// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     20

是的,它不符合苹果的指导方针。但我相信在我们的情况下他们可以放松。

更新:我还尝试使用 iDevice 作为外围设备,即两个 iDevice 之间的 BTLE。这里我每秒发送 150 条消息,没有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BLE 外设吞吐量限制 的相关文章

  • 使用 iPhone 摄像头检测心率 [重复]

    这个问题在这里已经有答案了 可能的重复 使用摄像头检测心率 https stackoverflow com questions 9274027 detecting heart rate using the camera 我正在研究 iOS
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 尝试复制文件时出错

    我正在尝试使用 NSFileManager 将临时文件复制到另一个位置 但是它失败并抱怨其中一个文件不存在 Copy temp file NSError error BOOL exists fileManager fileExistsAtP
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • BLE 堆栈的开源实现

    除了 BlueZ 和 Bluedroid 之外 还有其他 BLE 堆栈的开源实现吗 有几个开源 BLE 堆栈 NimBLE http mynewt apache org network ble ble intro Apache mynewt
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • 如何告诉 JAXB 不要生成 @XmlSchemaType 注释

    以下xsd 部分
  • 在 OSX 上以编程方式确定物理内存大小

    我们试图找出运行 Mac OS X 的计算机中安装了多少物理内存 我们找到了 BSD 函数 sysctl 问题是该函数想要返回 32 位值 但某些 Mac 能够寻址最多 32 GB 而这不适合 32 位值 实际上 即使 4 GB 也无法容纳
  • 运行 servlet 时出现“Batik not in classpath”错误

    我正在编写 Apache FOP 中包含的 FopServlet java 的扩展 我的平台是Linux CentOS 5 7 64位 Tomcat 5 5 The servlet 有效 但我无法处理 SVG 文件 Tomcat运行时出现的
  • Yii 插入...重复更新

    我正在做一个 Yii 项目 如何使用 MySQL 的 ON DUPLICATE 功能 http dev mysql com doc refman 5 0 en insert on duplicate html 在 Yii 模型上执行 sav
  • OmniAuth 和 Facebook:证书验证失败[重复]

    这个问题在这里已经有答案了 我已经关注了轨道广播 235尝试设置最低限度的 Facebook 身份验证 我首先设置了 Twitter 身份验证 正如 Ryan 本人所做的那样 这工作完美无缺 然后我开始添加 Facebook 登录信息 但是
  • 子进程 popen.communicate() 与 stdin.write() 和 stdout.read()

    我注意到两种不同的行为和两种方法应该会产生相同的结果 目标 使用子进程模块执行外部程序 发送一些数据并读取结果 外部程序为PLINK 平台为WindowsXP Python版本3 3 主要思想 execution C Pr plink ex
  • 是否可以通过 HQL 批量删除多对多关联?

    如果是这样 语法是什么 假设我希望 Foo 的实例与 Bar 的所有实例解除关联 在 SQL 中 它只是 delete from FOO BAR MAPPING where FOO ID 在 HQL 中 我假设它会是这样的 delete f
  • MySQL 按相关性排序

    我有一个搜索表单 可以搜索网站内容表以拉回适当的结果 我想搜索标题和内容字段并按相关性顺序拉回结果 给予标题最高优先级 假设我们有一个表 tblContent intID strTitle txtContent 1 Smith John L
  • 何时选择 nls() 而不是 loess()?

    如果我有一些 x y 数据 我可以轻松地通过它绘制直线 例如 f glm y x plot x y lines x f fitted values 但对于弯曲的数据 我想要一条曲线 看来可以使用 loess f loess y x plot
  • 如何使用“find”通过正则表达式搜索文件名

    我试图查找所有日期为 3 天或更早的文件 find home test name test log d 4 d 2 d 2 zip mtime 3 它没有列出任何东西 这有什么问题吗 find home test regextype pos
  • 在node.js中一次读取一行文件?

    我正在尝试一次一行读取一个大文件 我发现Quora 上的一个问题涉及到这个主题 但我缺少一些联系来使整个事情结合在一起 var Lazy require lazy new Lazy process stdin lines forEach f
  • 如何将数组传递到 Scipy Interpolate RectBivariateSpline 中?

    我正在创建一个 Scipy Interpolate RectBivariateSpline 如下所示 import numpy as np from scipy interpolate import RectBivariateSpline
  • ES6 React - 引用、浅复制和深复制之间有什么区别以及如何比较它们?

    我知道这个问题已经讨论过很多次了 我想我已经有了一个基本的想法 我从 StackOverflow 找到了一些评价最高的答案 深拷贝和浅拷贝有什么区别 深拷贝和浅拷贝 但所有的答案对我来说似乎都很模糊 让我们考虑下面的例子 const use
  • 如何列出 Cloud Firestore 文档中的子集合

    假设我将这个最小数据库存储在 Cloud Firestore 中 我怎样才能检索到的名字subCollection1 and subCollection2 rootCollection aDocument someField value 1
  • iPhone 室内定位应用程序

    我正在研究如何为我的工作创建一个应用程序 允许客户下载该应用程序 最好通过应用程序商店 并使用某种 wifi 三角测量 指纹能够确定他们的位置 以进行本质上的交互式游览 现在 我的具体问题是 iPhone 的最佳选择是什么 预计所有客户都不
  • Eclipse 生成的 Web 服务客户端速度极慢

    一些预先信息 我有一个 SOAP 服务 使用 JAX WS 端点类 托管 但我认为这并不重要 我可以通过 Visual Studio 生成客户端 C 来连接并使用 Web 服务 我使用 Eclipse Web Tools 生成了一个 jav
  • 有没有办法从准备好的语句中检索自动增量ID

    当使用带有准备好的语句的 java 查询时 有没有办法从数据库查询中检索自动生成的密钥 例如 我知道 AutoGenerateKeys 可以按如下方式工作 stmt conn createStatement stmt executeUpda
  • 如何为Android实现自定义设备照片库?

    我正在开发 Android 应用程序 它将包含基本的图片库功能 我已经成功构建了从应用程序后端 API 获取照片列表并在活动布局内的 android gridview 中渲染它们的活动 This is how it looks like a
  • JPA Hibernate 运行时动态实体映射和持久化

    基本上 我们有一个 Spring Boot 应用程序 它要求用户可以定义他 她自己的一组字段 并且这些字段应在运行时通过 JPA Hibernate 持久保存在自己的类 表中 这些类将通过bytebuddy动态生成 所有这些都应该动态完成
  • BLE 外设吞吐量限制

    我们正在开发一款与 iPad 配合使用的 BLE 传感器外设 需要使用 TI CC2541 BLE 模块和自定义配置文件实现以下 BLE 通知特征 无应答 的数据吞吐量 每 10 毫秒 1 个 20 字节 GATT 最大标准数据包 或者由于