0

我基于处理 BLE 5 的 nRF52 SOC 构建了一个自定义 ARM 设备。我使用 Core Bluetooth 框架在 SWIFT/X-Code/IB 中编写了一个自定义应用程序,并且无法以超过 12 kbs 的速度从 ARM 设备流式传输数据。使用数据包嗅探器,我可以看到 ARM 设备实时发送了所有数据包,但 iPhone 读取它们的速度不会超过每秒几次。在极少数情况下,iPhone 会快速读取所有内容。蓝牙连接协商到 12-24 毫秒的延迟。我使用的是 Nordic nRF52 SDK 版本 16。当时 iPhone 没有连接到任何其他 BLE 设备。

其他人遇到过这个问题吗?如果有帮助,我可以发布在 ARM 设备上使用的代码和 XCode 代码。

4

1 回答 1

0

当您使用北欧板时,有几件事需要检查以“加快进程”。首先,我假设您是通过通知发送的。其次,您需要知道什么构成了您的数据速率。他们是:

  • 每个通知的位数
  • 连接间隔
  • 每个连接间隔的事件
  • 数据通讯类型

您还可以将多个数据包排队存储,直到它们通过通知发送(填充缓冲区)。

所以一些有用的设置。首先,最重要的是最大化您每个数据包发送的数据。例如,如果您发送 10 个字节的数据发送更多,这将被限制为北欧板上的最大数据大小(247)。然后增加 GAP 长度。所以我建议开始的一些设置是:

  • 转到 sdk_config.h
  • 将 NRF_SDH_BLE_GAP_EVENT_LENGTH 更改为 400(认为默认值为 6)
  • 将 MTU 大小增加到 247

然后在板上运行,你可能会得到一个错误,说 change ram and start location。这将打印到终端。你可以这样做:

  • 项目
  • 选项
  • 常见的
  • 按向上箭头直到在项目下
  • 链接器
  • 部分放置宏。

从那里将您的 ram 启动和分配变量更改为终端/腻子/调试器中打印的内容。也不确定 iphone 应用程序的 API,但 android 具有将蓝牙硬件设置为高功率模式的功能,这增加了我在传输数据时的吞吐量,只需在数据传输后禁用它。您使用的 API 可能具有类似的功能。

对于参考代码,sdk 中有一个名为 maximum_throughput 的示例,这应该是一个很好的参考点。

于 2020-05-14T07:44:52.927 回答