嗨 .............
我们使用da14580作为外围设备。我们的连接参数是——
connection_interval_max = = 1秒
connection_interval_min = = 500 ms
延迟= = 0
supervision_timeout = = 6秒
问题是我们的BLE很快就断开了与主服务器的连接(最大连接时间是15 mn),然而主服务器和从服务器之间的距离是2米。我们必须使用哪些参数来克服这个问题?
谢谢. .
设备:
嗨,玛雅,
这与连接参数没有关系,如果连接参数在规范的限制内,中央接受外设发送的参数更新(主是指定连接参数的,外围设备可以指示他的要求,如果他接受或不接受的话,由中心决定)除非中心或外围设备失去通信(中心无法在预定义的连接间隔接收外围设备),否则您的连接应该是可靠的。虽然如果增加延迟和监控超时,可以增加连接的容忍度,但是中央也会考虑这些参数,即使外设发送一个更新参数请求,也不意味着中央会接受它们。
由于MT_dialog
嗨……MT_dialog
谢谢你的回复。正如您所说的,设置连接参数是主任务。现在我用一个狙击手,找出从服务器的请求和主服务器的响应
连接参数。
slave请求的参数:-
连接手柄:0x0000
连接间隔最小值:400
Connection Interval Max:800
延迟时间:2
监督超时:600
主人回答:-
EVT (GAP_CHANGE_PARAM_REQ_CMP_EVT)
+-------------------------------------------------------------------------------------------+
状态:0 x00
区间:800
延迟时间:2
监督超时:600
现在我认为这些参数不会出现连接丢失的问题。BLE栈是否有问题,导致连接不在连接间隔内发生?
嗨,玛雅,
使用上述配置,我不认为将出现参数更新(您可能会看到这些值从嗅探器接受,但实际连接间隔将保持不变,可能非常小,这就是为什么您无法看到断开连接 - 您可以检查从电源分析器测量连接间隔之间的距离),我不知道值在您提到的参数中的度量,但是您可以设置主服务器可以选择的最大间隔值(800)大于监控就越超时,据我所知,你的连接将保持与之前相同的连接间隔。您在2中设置了从站的延迟,这意味着设备(如果中央选择800)将忽略第一个和第一个第二个连接间隔和侦听第三个间隔,因此外围设备将每2400ms收听。
一般来说,由于施加了这种限制,就不会有丢失数据包的空间(最大间隔时间为800ms,延迟时间为2,至少需要大于2400的超时时间,但是在第一个丢失的包——这意味着没有的数据交换4800 ms -超时会发生,你将因监管宽松的链接超时自设备将认为自己断开连接后2400 ms没有数据包交换)和通信以来空气会导致包丢失你给你的参数更多的填充,以使你的连接更宽容的空中通信。
我不看到你的第二个帖子中的值对应于你提到的值在第一篇文章但参数对第一篇文章我能保持一个连接超过15分钟,可能更拥挤的地方有丢失的数据包需要更多填充,以使您的连接更加tollerant。
由于MT_dialog
嗨……MT_dialog
我觉得你搞错了。时间为十六进制格式。
因此,Maximum interval为1 sec min interval .5 sec, supervision timeout为6 sec, latency为2。和主人接受参数,我们检查CRO和在每一秒外围监听。但过了一段时间,联系中断了。中间没有拥挤的人群。
嗨,玛雅,
是上面提到的值来自您正在使用的嗅探器,或者是您在连接更新函数中设置的参数,如果您使用的嗅探器有不同的方式将.hex值映射到毫秒,但如果这些是您在更新函数中拥有的值,请检查以下.hex数字对应于毫秒的值,这就是为什么我提到我没有看到这些值如何对应于您在第一篇文章中提到的次数。
1)连接间隔最小0x400 - > 1024 * 1.25 = 1280 ms - > 1.28秒
2)连接间隔最大0x800 -> 2048 * 1.25 = 2560毫秒-> 2.56秒
3)连接延迟2(如果主服务器接受延迟2,外围设备每秒是如何监听的?)
4)连接监控超时0x600 -> 1536 * 10 = 15360ms -> 15.36秒
无论哪种情况,这两个连接参数都会给你留下2个数据包的填充(因为你使用了2个延迟),如果你失去一个数据包,这是可以的,但如果你连续失去第二个数据包,那么你的连接将被认为是终止的。你可以通过检查断开原因,看看它的GAP_ERR_TIMEOUT,然后这是你的设备断开的原因。我尝试了你指定的连接参数1秒。con_min = 500ms con_max = 1000ms .latency = 2(也。latecy = 0)和。timeout = 6000ms。在我运行测试的半个多小时后,我看不到任何断开。
由于MT_dialog