Bluedroid 在频道切换期间挂起 >45 毫秒
Bluedroid hangs up for >45 ms during channel switch
我有一个应用程序需要将数据突发传输到 android 设备。
附加了此突发期间的一系列数据包。我们观察到在频道更改期间,堆栈太忙并且在 ~45-48 毫秒内没有传输任何内容。
这会导致传输设备上的数据丢失。我们无法在发射器上保存那么多数据来应对 bluedroid 中的延迟。
AOSP/bluedroid 中是否有任何建议的更改可以改善这种情况?关于从哪里开始寻找的任何建议?
目标设备是带有 AOSP 5.1 的 Nexus 7 2013 (flo)。1_r14
这可能是硬件特定的行为。也许硬件缓冲区限制为 4 个数据包,并且驱动程序 delivers/fetches 数据包仅在中断期间 CI 过去。
MD 列是 "More Data" 它告诉发送器是否有更多数据要发送。在这种情况下,Slave 在每个 CI 的第 4 个传输数据包上设置 MD=0,因此 master 离开。主人检查下一个 CI 空包。
在我的应用程序中,由于协商 ConnInterval 的问题,这个间隔不知何故为 46 毫秒,因此 master 默认为 48.75 毫秒 CI。所以它睡了 ~46ms
我的数据丢失是由于@Gaurav 提到的问题而发生的,但在 Slave 上,即 Slave LL 正在丢弃提供给它的数据包,而它已经有 4 个数据包。 [这是猜测]我会确认并更新
更新
看起来 CONNECT_IND 在捕获的日志中包含 2.5ms 的 transmitWindowSize,传输 4 个数据包将花费 2.3+ms,而第 5 个数据包将不适合 2.5ms。 transmitWindowSize 可能是每个 CI 传输不超过 4 个数据包的真正原因,但仍然没有解释第 4 个数据包中的 MD=0。
我有一个应用程序需要将数据突发传输到 android 设备。
附加了此突发期间的一系列数据包。我们观察到在频道更改期间,堆栈太忙并且在 ~45-48 毫秒内没有传输任何内容。
这会导致传输设备上的数据丢失。我们无法在发射器上保存那么多数据来应对 bluedroid 中的延迟。
AOSP/bluedroid 中是否有任何建议的更改可以改善这种情况?关于从哪里开始寻找的任何建议?
目标设备是带有 AOSP 5.1 的 Nexus 7 2013 (flo)。1_r14
这可能是硬件特定的行为。也许硬件缓冲区限制为 4 个数据包,并且驱动程序 delivers/fetches 数据包仅在中断期间 CI 过去。
MD 列是 "More Data" 它告诉发送器是否有更多数据要发送。在这种情况下,Slave 在每个 CI 的第 4 个传输数据包上设置 MD=0,因此 master 离开。主人检查下一个 CI 空包。
在我的应用程序中,由于协商 ConnInterval 的问题,这个间隔不知何故为 46 毫秒,因此 master 默认为 48.75 毫秒 CI。所以它睡了 ~46ms
我的数据丢失是由于@Gaurav 提到的问题而发生的,但在 Slave 上,即 Slave LL 正在丢弃提供给它的数据包,而它已经有 4 个数据包。 [这是猜测]我会确认并更新
更新
看起来 CONNECT_IND 在捕获的日志中包含 2.5ms 的 transmitWindowSize,传输 4 个数据包将花费 2.3+ms,而第 5 个数据包将不适合 2.5ms。 transmitWindowSize 可能是每个 CI 传输不超过 4 个数据包的真正原因,但仍然没有解释第 4 个数据包中的 MD=0。