中央支持多个外围连接

7个帖子/ 0个新
最后发表
MSun
离线
最后看到:7个月前
加入:2015-11-30 22:40
中央支持多个外围连接

我成功修改了DSPS 5.150.2以支持多外设。

但我还有一个小问题,我需要更好地理解。

当我连接到第一个外设一切正常。快速建立成功连接(可能< 100ms)

当我连接到第二个外围设备时,通常需要多次连接尝试才能成功连接。
我在user_on_connect_failed()中看到在后续不成功的连接尝试之间的连接失败回调
当它成功时,通常是在发起最后一次连接尝试后几秒钟。

我的问题与支持多个外设时推荐的中央操作有关:

-每次成功建立连接后,我是否应该重新启用扫描(user_scan_start) ?

当Central发送连接消息时,在它的user_central_conf数据结构中,它有两个设置…

///扫描间隔
.scan_interval = 0x180,//不知道这里的时间单位是什么…?
///扫描窗口大小
.scan_window = 0x160,

-这些扫描设置如何与user_scan_start()中引用的interval / window user_scan_conf设置相关?

///扫描间隔
.interval = 10,
///扫描窗口大小
.window = 5,

-我的间隔/窗口设置只是来自原始DSPS客户端应用程序的默认值。

-现在我支持多个同时的外围连接,是否有更多的最佳窗口/间隔/…我应该使用的设置?
当然,问题是试图修复我不稳定的连接问题时,试图连接到第二个外围设备。

-我的应用程序需要维持高达3KB/s的外围通知吞吐量每个外围连接。最多2个外围连接。
目前我已经测试了2KB/s的速率,并会做更多的测试来找到上限。
—DSPS默认连接间隔为12.5ms

谢谢你,马丁

设备:
MSun
离线
最后看到:7个月前
加入:2015-11-30 22:40
仅供参考

只是一个仅供参考

当第二次连接尝试失败时,如前所述。我看到一个回调user_on_connect_failed()

如果我有BLE嗅探器活动,我从来没有看到我的中央设备发出CONNECT_REQ消息。

因此,当前面已经建立了一个连接时,中央发送CONNECT_REQ似乎存在一些问题。

谢谢你,马丁

MSun
离线
最后看到:7个月前
加入:2015-11-30 22:40
对话专家

有中央行动的对话专家吗?

谢谢你,马丁

Gongyu_Dialog
离线
最后看到:1周17小时前
加入:2016-04-27 07:07
扫描间隔/窗口的单位

扫描间隔/窗口的单位是625us,可以参考Core 4.2 //
7.8.10 LE设置扫描参数命令//用于设置扫描的时间间隔和窗口
7.8.12 LE Create Connection命令//在连接过程中,主端需要确定扫描间隔和窗口来捕获从端的adv报文

不知道为什么有时会遇到第二次连接失败。
我上传了一个文件供你参考。

附件:
MSun
离线
最后看到:7个月前
加入:2015-11-30 22:40
嗨Gongyu_Dialog,

嗨Gongyu_Dialog,

谢谢您的回复。
好吧,我确实怀疑“创建连接”设置是为连接建立后的扫描设置。

从对话框的角度来看,我的怀疑是,如果现有连接存在较短的连接间隔(12.5ms或更短),DA14580很难为扫描操作安排时间。

这对你们来说很容易验证。Dialog内部有谁对这个问题有更深入的见解?

认为,马丁

MT_dialog
离线
最后看到:1个月18小时前
工作人员
加入:2015-06-08 34
嗨MSun,

嗨MSun,

实际上,当580处于连接状态且连接间隔为12.5或更短时,设备调度扫描操作的时间更少。它会试图跟上扫描间隔,但不会每次都成功,当然,扫描窗口将比代码指示的小得多。你可以使用Smart Snippets中的Power Profiler来观察这一点。从附件的图片中可以看到,顶部有点平的尖峰是设备为扫描过程分配的插槽,这些扫描事件的长度小于5毫秒甚至更小,所有其他尖峰是连接间隔。图像中的红线是一个扫描事件,它在活动时设法找到了广告字符串,请注意,所有其他扫描事件都没有设法找到任何东西。

所以在你的情况中,你有一个连接你找到一个外围一段时间后(因为需要好些时间扫描),你发出的连接命令,在命令发送到堆栈的连接中央将试图找到一个广告活动的空气为了发送CONNECT_REQ(因为它必须找到一个开放的接收机在广告方面),由于间隔的小连接中央必须保持与其他连接,它只能安排一个小的扫描窗口,以便为第二个设备找到下一个广告事件,这需要足够的时间。你得到user_on_connect_failed()的原因是因为当发送连接命令到堆栈时,你还启动了一个7秒延迟的定时器(我假设是DSPS),所以如果在7秒之后,中央还没有设法安排连接事件(因为它无法找到广告设备的adv消息),定时器就会取消它。尝试在取消连接事件之前增加时间,以便给中心时间建立连接。

由于MT_dialog

MSun
离线
最后看到:7个月前
加入:2015-11-30 22:40
嗨MT_dialog,

嗨MT_dialog,

谢谢你的回复。这说明了它是如何运行的,我将努力对我的间隔设置进行一些调整,看看我是否可以给扫描操作更多的时间。
我将更新我的最终进展。

谢谢你,马丁