【发布时间】:2012-05-08 10:28:54
【问题描述】:
Follow-Up question on Electrical Engineering Stackexchange
我想在短时间内重复写入 Bluetooth Low Energy 特性的值(作为一个可能的用例,想象一个鼠标)。
- 128 位 UUID 的特征是 20 字节 长。因此,它可以写在单个 Low Energy 事务中。
- 写入频率为 50 Hz,相当于每 20 毫秒一次写入。
- 因此,写入 20 * 50 * 8 = 8 kbit/s。
- 我正在使用 Command / Write without response 模式来写入特征。因此,属性层上不会发生任何确认。
- 未连接其他蓝牙或蓝牙低功耗设备。没有通过 WLAN 执行任何操作。在测试期间不会读取或写入其他特征。
我通过从 iPhone 4S 发送包含序列号的数据包来测试程序。每发送一个数据包,序列号就加一。
在接收端,使用包含CSR1000 BLE 芯片的可编程开发板接收数据包并将接收到的序列号打印到串行连接。
我的问题如下:
-
一段时间后,数据包开始被丢弃。前约 100 个数据包在 50 Hz 下工作正常。从那时起,数据包开始被丢弃。
0x00 - 0x46 received 0x47, 0x48 missing 0x49, 0x4a, 0x4b, 0x4c received 0x4d missing 0x4e, 0x4f, 0x50, 0x51 received 0x52 missing 0x53, 0x54, 0x55, 0x56 received 0x57 missing ...大多数情况下,一包四个数据包可以正常传输(很少只有两个数据包)。然后,1-7 个数据包丢失。
当我减小特征值大小时,问题仍然存在。
当我以 100Hz 而不是 50Hz 写入时,图片是相同的 - 只是在大约 35 个数据包之后开始发生丢包,并且在四个数据包的成功传输之间丢包了 5-7 个数据包。
对于丢失的数据包,产生的传输速率约为 5 kbit/s,无论写入频率如何。这显然低于蓝牙低功耗技术上应该可行的约 305 kbit/s。
当我从开发板向iPhone 4S发送数据包时,问题也出现在相反的方向。同样,5 kbit/s 是我得到的最大值。通知机制用于这种情况。同样,属性层上不会发生任何确认。
当我尝试同时向两个方向发送时,事情开始恶化,以至于我必须重置开发板和 iPhone 4S。
问题:
-
这可能是开发板上使用的低功耗蓝牙芯片的问题吗?
如果是,为什么问题也出现在相反的方向,即 iPhone 充当接收器?
市面上有支持高频访问特性的开发板吗?
-
问题的根源可能是什么?
除了假设之外,还请尝试参考蓝牙规范/演示幻灯片/文章的部分内容。
市场上有蓝牙低功耗鼠标。鼠标的典型轮询速率为 125 Hz,并且必须至少发送两个 16 字节的值以及每个滴答的额外 HID 开销。因此,我的问题应该有解决方案。
更新
LE 连接完成事件在Bluetooth Specification Version 4.0 Vol 2 Part E Section 7.7.65.1中有描述。我收到以下不同连接参数的值:
Parameter Value Description
--------------------------------------------------
Conn_Interval 0x0054 Time = 105 ms
Conn_Latency 0x0000 Time = 0 ms
Supervision_Timeout 0x00fc Time = 2520 ms
Master_Clock_Accuracy 0x05 50 ppm
【问题讨论】:
-
你用的是什么 LE 芯片/开发板?
-
您为连接设置了哪些参数 - 您使用的是默认值吗?
-
你怎么看连接时间?
-
@Wilhelmsen:LE 连接完成事件 公开了参数。请参阅蓝牙核心规范版本 4.0 第 2 卷 E 部分第 7.7.65.1 节。我可以在外围设备上查看这些值。
-
看实际的时序参数还是你设置的外设要求的参数?即,参数是“实时”数据吗?
标签: ios performance bluetooth packet bluetooth-lowenergy