C 如何通过BLE传输数据?

C 如何通过BLE传输数据?,c,arm,embedded,bluetooth-lowenergy,mbed,C,Arm,Embedded,Bluetooth Lowenergy,Mbed,我目前正在评估Maxim Integrated董事会。作为我论文的一部分,我想研究是否有可能将BLE用于数据流 功能齐全,可以传输数据。当然,在较长的时间内,只有较小的数据包,如温度或预先计算的心率值。我知道BLE不适合,也没有设计成连续传输数据。尽管如此,我还是想尝试通过BLE接口传输ECG原始数据。为了检查我的数据是否及时、完整地到达(ECG数据的先决条件),我开发了以下测试设置: 目前,我将正弦波数据存储到一个大型FIFO中,并将20字节的正弦波数据包传输到一个特征。到目前为止,一切都很顺

我目前正在评估Maxim Integrated董事会。作为我论文的一部分,我想研究是否有可能将BLE用于数据流

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

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

正弦和特殊程序图像

进一步的测量表明,误差不是连续发生的,它们总是在不同的时间被发现。(Fifo执行必须正确)

正弦和Spektrogram图像2

因为我的手机和Adafruit嗅探器在同一个地方有相同的错误,所以板端的数据包一定是损坏的。我怀疑他们在某种协议层面上迷失了方向(可能是差距?)。有趣的是,错误至少会影响后面的200个字节(256个字节的数据是一个完整的正弦)。这意味着每20个字节至少需要10个数据包才能获得这样的图形

  • 通过BLE接口连续发送数据有哪些选项
  • 是否可以在没有GATT/ATT的情况下通过L2CAP直接发送数据
  • 是否还有其他允许数据流传输的无线低功耗协议?(所以​​与TCP一样确认完整性和时间顺序正确性)
向你问好,艾敏

  • 通过BLE接口连续发送数据有哪些选项
  • 是否可以在没有GATT/ATT的情况下通过L2CAP直接发送数据
介绍了BLEV4.1,这是一种通过L2CAP直接发送数据的方法,无需GATT/ATT(考虑网络套接字)。另请参见蓝牙核心规范第3卷第A部分第3.4节


您正在使用的板有一个EM9301 BLE芯片,它似乎支持BLE v4.1。但是,您正在使用的mbed库不允许您使用它们。请参阅,您有一个用于连接/断开回调和GATT特征读/写/通知的接口。没有关于LE连接导向通道的内容

你的设备使用哪个版本的BLE?你说数据包丢失了。在我看来,从这些数字来看,一些数据块被发送了两次。另外,下图是什么?如果你通过广告发送所有数据会发生什么?您可以将每个20字节的块打包到一个广告中,然后一个接一个地发送它们。使用嗅探器,您可以检查在这种情况下是否有任何数据块丢失。如果是这样,则原点可能不是GATT/ATT层。@ricc BLE规范4.1。芯片:EM9301。下图是同一图的光谱图。我认为包不会被发送两次。如果我像以前一样重复所有测试,丢失的数据包会出现在不同的位置/时间。我的crc计算不正确,所以数据包被丢弃。这仍然会导致丢失数据包。@ricc My fifo的编程(和测试)也会使一个项目一旦被标记为已读,就不能再被读取。谢谢。mBed库包含一个文件“L2C”(但只有一个二进制lincense,没有源代码)。但如果我只使用19个字节作为数据,而不是20个字节,并使用一个字节作为计数器:[1,X,X,…,X][2,X,X,…,X][3,X,X,…,X]。。。返回接收到的数据1到1,并检查它们是否与原始数据对应。(如果错误,则再次发送相同的数据包,如果正确,则发送下一个号码)。我认为我无法避免在关贸总协定的基础上制定自己的议定书。