我已成功修改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
谢谢,马丁
设备:
只是A.供参考
如上所述,当第二连接尝试失败时。我看到user_on_connect_failed()上的回调
如果我有一个嗅探器活动,我从不看到我的中央设备发出connect_req消息。
因此,当之前建立一个连接时,它会出现在发送CONNECT_REQ时存在一些问题。
谢谢,马丁
任何对话专家都在那里进行中央操作?
谢谢,马丁
扫描间隔/窗口的单位是625us,可以在核心4.2 //中引用
7.8.10 LE设置扫描参数命令//用于扫描过程,确定扫描间隔和窗口
7.8.12 LE创建Connection Command // for Connect过程,主服务器需要确定扫描间隔和窗口以捕获从站捕获Adv数据包
不确定为什么你有时会遇到第二个连接的失败。
我上传文件供您参考。
嗨gongyu_dialog,
感谢您的答复。
好的,我确实怀疑在建立连接后,“创建连接”设置是用于扫描设置。
我的怀疑是从对话框的角度来看,如果现有连接存在短连接间隔(12.5ms或更小),则DA14580难以调度扫描操作的时间。
这将是您身边的简单测试才能验证。对话框中的任何人都会有更多的洞察力吗?
问候,马丁
嗨msun,
实际上,当580有关并且连接间隔为12.5或更少时,设备需要更少的时间来调度扫描操作。它将尝试跟上扫描间隔,但每次和校正扫描窗口都不会成功,扫描窗口将要小得多,即代码指示的窗口要小得多。您可以通过使用智能片段中的电源分析器来观看此操作。您可以从附加的图像中看到,顶部有一点平板的尖峰是设备已经设法为扫描过程分配的插槽,那些扫描事件的长度小于5毫秒,更小,所有其他尖峰都是连接间隔。图像中的红线是一个扫描事件,在它处于活动状态时设定了一个广告字符串,请注意所有其他扫描事件都没有设法找到任何内容。
所以在你的情况下,当你有一个连接时,你找到了一段时间后的外设(因为它需要很长时间扫描它),并且您发出连接命令,在连接命令被发送到堆栈之后,中央将尝试找到一个在空中的广告事件为了发送Connect_Req(因为它必须在广告侧找到一个开放式接收器),由于中央必须保持另一个连接的小连接间隔,它只能安排一个小扫描窗口为了找到第二个设备的下一个广告活动,这需要足够的时间。您获得user_on_connect_failed()的原因是因为在将Connect命令发送到堆栈时,您还可以启动一个7秒延迟的计时器(我想这是DSP),所以如果在第7秒之后,中央尚未设法安排连接事件(因为它无法找到广告设备的adv消息),计时器取消它。尝试在取消连接事件之前增加时间,以便为中央建立连接。
谢谢mt_dialog.
嗨mt_dialog,
感谢你的回复。阐明了它的运行方式,我将努力对我的间隔设置进行一些调整,以查看我是否可以提供更多时间扫描操作。
我会通过最后的进展更新。
谢谢,马丁