我已经成功地修改了DSPS 5.150.2以支持多个外设。
但我还有一个小问题,我需要更好地理解这个问题。
当我连接到第一个外围,一切都是好的。快速建立成功的连接(可能小于100ms)
当我连接到第二个外设时,它通常需要几次连接尝试才能成功连接。
我在user_on_connect_failed()中看到在后续不成功的连接尝试之间的连接失败回调
当它成功时,通常是在发起最后一次连接尝试后几秒。
我的问题与支持多个外围设备时推荐的中央操作有关:
-每次成功建立连接后,我应该重新启用扫描(user_scan_start)吗?
当中心发送一个连接消息时,在它的user_central_conf数据结构中,它有2个设置…
/ / /扫描间隔
.scan_interval = 0 x180,//不确定这里的时间单位是什么…?
///扫描窗口大小
.scan_window = 0 x160,
-这些扫描设置与user_scan_start()中提到的interval / window user_scan_conf设置有什么关系?
/ / /扫描间隔
.interval = 10,
///扫描窗口大小
.window = 5,
-我的间隔/窗口设置只是从原来的DSPS客户端应用程序的默认设置。
-现在我支持多个同时的外围连接,是否有更多的最佳窗口/间隔/…我应该使用的设置?
当然,问题是试图修复我的不稳定的连接问题时,试图连接到第二个外设。
我的应用程序需要每个外设连接维持高达3KB/s的外设通知吞吐量。最大2个外设连接。
目前我已经测试了2KB/s的速率,并将做更多的测试来找到上限。
—DSPS默认连接间隔为12.5ms
谢谢你,马丁
设备:
只是一个仅供参考
当第二次连接尝试失败时。我看到user_on_connect_failed()上有一个回调
如果BLE嗅探器处于活动状态,我就不会看到我的Central设备发送CONNECT_REQ消息。
因此,当已经有一个先前建立的连接时,Central在发送CONNECT_REQ时出现了一些问题。
谢谢你,马丁
有中央行动的对话专家吗?
谢谢你,马丁
扫描间隔/窗口的单位是625us,可以参考Core 4.2 //
7.8.10 LE Set Scan Parameters命令//用于扫描过程,确定扫描间隔和窗口
7.8.12 LE创建连接命令//对于连接过程,master需要确定扫描间隔和窗口来捕获从端的adv报文
不知道为什么有时会遇到第二次连接失败。
我上传了一个文件供您参考。
嗨Gongyu_Dialog,
谢谢您的回复。
好的,我确实怀疑“创建连接”设置是在连接建立后进行扫描设置。
我从Dialog的角度怀疑,如果现有连接的连接间隔很短(12.5ms或更短),那么DA14580在安排扫描操作的时间上有困难。
这对你来说是一个很容易验证的测试。在Dialog中有人对这个问题有更深入的了解吗?
认为,马丁
嗨MSun,
事实上,当580处于连接状态且连接间隔小于12.5时,设备调度扫描操作的时间就会减少。它将尝试跟上扫描间隔,但不会每次都成功,当然,扫描窗口将会比代码指示的窗口小得多。您可以通过使用智能片段中的Power Profiler来观察这一点。正如你所看到的图片,有点平的尖刺上面的槽设备已经分配的扫描过程中,这些扫描事件的长度小于5甚至更小的女士,所有其他的峰值是连接的时间间隔。图像中的红线是一个扫描事件,它在广告字符串处于活动状态时找到了它,注意,所有其他扫描事件都没有找到任何东西。
所以在你的情况下,当你有一个连接,你找到一个外设后一段时间(因为它需要相当长的时间扫描它),你发出一个连接命令,后连接命令发送到堆栈中央将试图找到一个广告活动的空气为了发送CONNECT_REQ(因为它必须找到一个开放的接收机在广告方面),由于间隔的小连接中央必须保持与其他连接,它只能安排一个很小的扫描窗口,以便为第二个设备找到下一个广告活动,这需要足够的时间。原因得到user_on_connect_failed()因为当发送命令连接到堆栈还启动一个计时器,7秒延迟(dsp)我想如果在7秒中央没有设法安排连接事件(因为它不能够找到的副词消息广告设备)计时器cancels it. Try to increase the time before cancelling the connection event in order to give time to central to establish the connection.
由于MT_dialog
嗨MT_dialog,
谢谢你的回复。这让我明白了它是如何操作的,我将对我的间隔设置进行一些调整,看看能否给扫描操作更多的时间。
我会更新我的最终进展。
谢谢你,马丁