如何通过 BLE 传输数据?

How to stream data via BLE?

我目前正在评估Maxim Integrated的电路板MAXREFDES100#。作为我论文的一部分,我想研究是否有可能使用 BLE 进行数据流。

supplied software功能齐全,已经可以传输数据了。当然,只有较长时间段内的较小数据包,例如温度或预先计算的心率值。我知道 BLE 不适合并且没有被设计为连续传输数据。尽管如此,我还是想尝试通过 BLE 接口传输 ECG 原始数据。为了检查我的数据是否及时完整正确地到达(心电图数据的先决条件),我开发了以下测试设置:

目前,我将一个正弦波的数据存储到一个大的FIFO中,并将20字节的正弦数据包传输到一个特性中。到目前为止,一切都很好。我使用 Android 设备和 BLE 嗅探器捕获数据包并检查正弦波是否有任何中断。下图取自更长时间的测量:(我已经测试了我的 FIFO,正弦数据是完整的,没有任何中断):这是我的 Android 和我的 BLE Sniffer 的捕获:数据包丢失。

正弦和频谱图图像

进一步的测量表明错误不是按顺序发生的,它们总是可以在不同的时间发现。 (Fifo 实现必须正确)

正弦和频谱图图像 2

由于我的 phone 和我的 Adafruit BLE 嗅探器在同一个地方有相同的错误,板端的数据包一定是损坏的。我怀疑它们在某些协议级别丢失(可能是 GAP?)。有趣的是,错误影响至少 200 个后续字节(256 字节数据是一个完整的正弦)。这意味着每 20 字节至少需要 10 个数据包才能获得这样的图形。

最好的问候,Emin

  • What options are there for continuously sending data via the BLE interface?
  • Is it possible to send the data directly via L2CAP without GATT/ATT?

BLE v4.1 引入了 LE Connection-Oriented Channels,这是一种无需 GATT/ATT 即可通过 L2CAP 直接发送数据的方式(想想网络套接字)。另见蓝牙核心规范卷。 3 A 部分第 3.4 节

您使用的开发板有一个似乎支持 BLE v4.1 的 EM9301 BLE 芯片。但是,您使用的 mbed 库不允许您使用它们。请参阅 here,您有一个用于 connect/disconnect 回调和 GATT 特征的接口 read/write/notification。与 LE 面向连接的通道无关。