中央支持多个外围连接

7个帖子/ 0新
最后一篇
MSUN
离线
最后一次露面:7个月1周前
加入:2015-11-30 22:40
中央支持多个外围连接

我已成功修改DSPS 5.150.2以支持多个外围设备。

但我剩下一个小问题,我需要更好地了解。

当我连接到第1个外设时,一切都可以。成功的连接非常快(可能<100ms)

当我连接到第二个外设时,它通常需要多个连接尝试在成功连接之前。
我在随后的不成功的连接尝试之间看到user_on_connect_failed()中的连接失败回调
成功后,它通常在启动最后一个连接尝试后几秒钟。

我的问题涉及推荐在支持多个外围设备时的中央操作:

-在建立每个成功的连接后,我应该重新启用扫描(User_scan_start)吗?

当中央发送连接消息时,在它的user_central_conf数据结构中,它有2个设置...

///扫描间隔
.scan_interval = 0x180,//不确定时间单位在这里......?
///扫描窗口大小
.scan_window = 0x160,

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

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

- 我的间隔/窗口设置默认从原始DSPS客户端应用程序中默认。

-既然我支持多个同时的外设连接,有更多的最佳窗口/ interval / ...设置我应该使用?
当然,令人担忧,试图在尝试连接到第二个外设时修复我的错误连接问题。

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

谢谢,马丁

设备:
MSUN
离线
最后一次露面:7个月1周前
加入:2015-11-30 22:40
只是一只福..

只是A.供参考

如上所述,当第二连接尝试失败时。我看到user_on_connect_failed()上的回调

如果我有一个嗅探器活动,我从不看到我的中央设备发出connect_req消息。

因此,当之前建立一个连接时,它会出现在发送CONNECT_REQ时存在一些问题。

谢谢,马丁

MSUN
离线
最后一次露面:7个月1周前
加入:2015-11-30 22:40
任何对话专家

任何对话专家都在那里进行中央操作?

谢谢,马丁

Gongyu_dialog.
离线
最后一次露面:1周14小时前
加入:2016-04-27 07:07
扫描间隔/窗口单位

扫描间隔/窗口的单位是625us,可以在核心4.2 //中引用
7.8.10 LE设置扫描参数命令//用于扫描过程,确定扫描间隔和窗口
7.8.12 LE创建Connection Command // for Connect过程,主服务器需要确定扫描间隔和窗口以捕获从站捕获Adv数据包

不确定为什么你有时会遇到第二个连接的失败。
我上传文件供您参考。

依恋:
MSUN
离线
最后一次露面:7个月1周前
加入:2015-11-30 22:40
嗨gongyu_dialog,

嗨gongyu_dialog,

感谢您的答复。
好的,我确实怀疑在建立连接后,“创建连接”设置是用于扫描设置。

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

这将是您身边的简单测试才能验证。对话框中的任何人都会有更多的洞察力吗?

问候,马丁

mt_dialog.
离线
最后一次露面:1个月15小时前
职员
加入:2015-06-08 11:34
嗨msun,

嗨msun,

实际上,当580有关并且连接间隔为12.5或更少时,设备需要更少的时间来调度扫描操作。它将尝试跟上扫描间隔,但每次和校正扫描窗口都不会成功,扫描窗口将要小得多,即代码指示的窗口要小得多。您可以通过使用智能片段中的电源分析器来观看此操作。您可以从附加的图像中看到,顶部有一点平板的尖峰是设备已经设法为扫描过程分配的插槽,那些扫描事件的长度小于5毫秒,更小,所有其他尖峰都是连接间隔。图像中的红线是一个扫描事件,在它处于活动状态时设定了一个广告字符串,请注意所有其他扫描事件都没有设法找到任何内容。

所以在你的情况下,当你有一个连接时,你找到了一段时间后的外设(因为它需要很长时间扫描它),并且您发出连接命令,在连接命令被发送到堆栈之后,中央将尝试找到一个在空中的广告事件为了发送Connect_Req(因为它必须在广告侧找到一个开放式接收器),由于中央必须保持另一个连接的小连接间隔,它只能安排一个小扫描窗口为了找到第二个设备的下一个广告活动,这需要足够的时间。您获得user_on_connect_failed()的原因是因为在将Connect命令发送到堆栈时,您还可以启动一个7秒延迟的计时器(我想这是DSP),所以如果在第7秒之后,中央尚未设法安排连接事件(因为它无法找到广告设备的adv消息),计时器取消它。尝试在取消连接事件之前增加时间,以便为中央建立连接。

谢谢mt_dialog.

MSUN
离线
最后一次露面:7个月1周前
加入:2015-11-30 22:40
嗨mt_dialog,

嗨mt_dialog,

感谢你的回复。阐明了它的运行方式,我将努力对我的间隔设置进行一些调整,以查看我是否可以提供更多时间扫描操作。
我会通过最后的进展更新。

谢谢,马丁