嗨,对话框中,
我开发一双BLE设备,服务器和奴隶,DA14580基地。后连接到对方,即使我离开这些处理器空闲(没有祝福读/写/通知,没有i2c, gpio……随机活动),但是他们仍然脱节。它看起来像一个腐败在链路层,因为他们又不能重新连接断开。下面是我设置的参数连接和一些wireshark捕获。
味精- > nb_peers = 1;
memcpy ((void *)味精- > [0]。(void *) peer_addr addr, BD_ADDR_LEN);
味精- > [0]。addr_type = peer_addr_type;
味精- > con_intv_max = 10;
味精- > con_intv_min = 10;
味精- > ce_len_max = 0 x20;
味精- > ce_len_min = 0 x20;
味精- > con_latency = 0;
味精- > superv_to = 100;
味精- > scan_interval = 0 x180;
味精- > scan_window = 0 x160;
味精- > op。代码= GAPM_CONNECTION_DIRECT;
wireshark截图:
9796年61.273854000主从bie 26空数据PDU
9797年61.275295000奴隶主人祝福PDU数据26空数据
9798年61.286603000主从bie 26空数据PDU
9799年61.287569000奴隶主人祝福PDU数据26空数据
9800年61.298855000主从bie 26空数据PDU
9801年61.299789000奴隶主人祝福PDU数据26空数据
9802年62.320227000 ab_mat5 BLE副词48 ADV_IND
9803年62.321788000 ab_mat5 BLE副词48 ADV_IND
服务器和客户端保持连接60年代,不能连接到彼此了。
我还能看到奴隶广告,但即使使用与LightBlue Iphone应用程序,我不能连接到奴隶了。
Wireshark截图:
25 6.273182000 ab_mat4 BLE副词48 ADV_IND
26日6.274736000 50:0b: f8:18:交流:80:29日ea: ca: 00:00:41 60 CONNECT_REQ BLE副词
27 6.276461000主从BLE 26空数据PDU
28日6.303327000主从BLE 26空数据PDU
29日6.333342000主从BLE 26空数据PDU
30 6.363329000主从BLE 26空数据PDU
31日6.393384000主从BLE 26空数据PDU
32 6.423327000主从BLE 26空数据PDU
33 6.453367000主从BLE 26空数据PDU
34 6.483385000主从BLE 26空数据PDU
35 6.513421000主从BLE 26空数据PDU
36 6.543378000主从BLE 26空数据PDU
37 6.573448000主从BLE 26空数据PDU
38 6.603361000主从BLE 26空数据PDU
39 6.633361000主从BLE 26空数据PDU
40 7.640482000 ab_mat4 BLE副词48 ADV_IND
41 7.642505000 ab_mat4 BLE副词48 ADV_IND
在该测试中,我设置了连接间隔是12.5毫秒。在这种情况下,服务器和客户机将随机60年代到45分钟后断开连接。
在我后一个测试,我更改连接间隔30 ms。他们可以保持更长时间的连接(超过10小时),但他们仍然脱节。
我认为如果我离开处理器空闲状态,一切应该由BLE栈自动处理和发送空保持连接应该与我的应用程序代码。我也没有任何应用程序活动时断开连接。
请帮我找到原因断开和如何提高连接的稳定性。
非常感谢。
一些更新,
一夜之间从我的测试中,它看起来像ble计时器不适当的工作。
首先,它可以适合约3小时(可能更多)。我们可以看到主发送一个空的PDU从每30女士为我设置的值。
726216年10926.699285000主从bie 26空数据PDU
726217年10926.699861000奴隶主人祝福PDU数据26空数据
726218年10926.729275000主从bie 26空数据PDU
726219年10926.729815000奴隶主人祝福PDU数据26空数据
726220年10926.759274000主从bie 26空数据PDU
726221年10926.760253000奴隶主人祝福PDU数据26空数据
726222年10926.789250000主从bie 26空数据PDU
726223年10926.790219000奴隶主人祝福PDU数据26空数据
726224年10926.818524000主从bie 26空数据PDU
我想嗅探器失去一个捕获。
726225年10926.848719000主从bie 26空数据PDU
726226年10926.850223000奴隶主人祝福PDU数据26空数据
某些原因,我失去了捕获大约10个小时。幸运的是,就在他们断开,再嗅探器的信号。但在这个时候,主人似乎表现得疯狂,它向客户端发送一个空的PDU每约2毫秒或者当它收到一个空PDU的奴隶。
726227年47816.865216000主从bie 26空数据PDU
726228年47816.866244000奴隶主人祝福PDU数据26空数据
726229年47816.867143000主从bie 26空数据PDU
726230年47816.868015000奴隶主人祝福PDU数据26空数据
726231年47816.868887000主从bie 26空数据PDU
726232年47816.869742000奴隶主人祝福PDU数据26空数据
726233年47816.870613000主从bie 26空数据PDU
726234年47816.871492000奴隶主人祝福PDU数据26空数据
.......
726560年47817.196839000主从bie 26空数据PDU
726561年47817.197927000奴隶主人祝福PDU数据26空数据
726562年47817.198787000主从bie 26空数据PDU
726563年47817.199657000奴隶主人祝福PDU数据26空数据
726564年47817.201497000 ab_mat5 BLE副词48 ADV_IND
726565年47817.202433000 ab_mat5 BLE副词48 ADV_IND
我希望这些信息给你们更多关于这个问题,非常感谢。
谢谢!
嗨zwang308,
SDK您正在使用您的当前实现和开发工具包是什么呢?我可以告诉您正在使用的连接参数与需求方的项目几乎相同。你的假设是正确的,当你与一个设备堆栈将保持连接,交换空包没有要求从应用程序做任何事。
从1日日志我可以看到,你的主人停止发送空包为了保持连接活着为奴隶,所以没有响应超时和连接丢失,当这一切发生的时候也许你应该检查您的主机的状态。
从2日日志似乎奴隶不回应来自主机的连接请求,检查你如何处理你周边的连接请求的代码,并检查该设备是否达到连接确认。
3日日志,这似乎非常奇怪,我不能想象为什么中央将开始发送空包在如此高的速度特别是如果没有数据发送,中央本身或设备。
由于MT_dialog
我用SDK 3.0.10.1。
问题是随机连接中断。
12连接间隔女士,有时连接顺利一个多小时;但有时他们只是2分钟后断开。
我改变连接间隔30 ms后,平均连接时间会更长。但他们仍然断开随机,
当他们被断开,真的没有应用程序的活动。我想祝福栈会照顾的连接,自动发送/ ack空PDU。
另外,就算他们断开连接,他们应该能够重新连接。但一旦断开,我不能连接到奴隶了,无论我用主应用程序或使用一些标准设备如IPhone。
对我来说,它看起来像奴隶BLE堆栈是搞砸了的一部分:奴隶可以从主收到连接请求(停止广告),但它不能发送ack。因此,双方只是1 s后断开。Afert,奴隶开始做广告了。
这些都是我从我的测试获得的一切。
谢谢你的帮助!
顺便说一下,我对所有的测试使用相同的代码基。我相信奴隶发送连接请求确认,否则他们不会连接。再一次,问题是连接————小随机时间的连接断开,无法连接了。
谢谢,
嗨zwang308,
我已经实现了一个中央和周边SDK 3.0.10.1(不包括概要文件)我将连接参数设置为主机相同的与你的连接间隔等于12.5 ms pro和基本工具。到目前为止一切都正确,连接持续只要我能看(两个多小时)也我能重新连接到主机,(在延长睡眠模式)。你有没有实现配置文件或任何其他functionallity为了尝试复制你的问题?
由于MT_dialog
嗨MT_dialog,
我所做的都是一样的你的项目。
我开发一个I2C司机,把数据转换成nvram当我收到一个包。在app_asynch_trim函数中,通过祝福我把缓冲区和发送数据。
但在我的测试中,我关闭app_asynch_trim I2C司机拉功能。在测试中,两个DA14580s断开时真的是什么都不做。
从我的观察,他们总把空PDU,大师突然停止发送空的PDU。我们有方法知道为什么主人停止发送空的PDU ?我们可以得到一个消息从内核到知道他们为什么断开。
对我来说,似乎他们断开随机。上周我们做了很多测试,有时连接好超过16小时;有时他们2分钟后断开。
我很困惑。
谢谢!
嗨zwang308,
你能运行你的主人凯尔和检查这个问题发生时,你的主人的状态是什么?表明有一个断开也处理程序通过主或者至少你的奴隶当他停止您的主机接收数据。你可以将断点设备和检查你得到一个断开的原因。没有办法检查主为什么不发送任何数据,一个错误指示或类似,因为这应该不会发生堆栈应该保持连接。
由于MT_dialog
嗨MT_Dialog,
他们第一次断开连接。外围的错误代码为0 * 13(远程用户终止连接),而中心一侧的错误代码是0((连接超时)。
之后,错误代码在外围一边总是(和中央为0 x3e(建立连接失败)。
我不认为代码实际上停止点,因为双方保持广告/扫描和连接状态间切换。
我们知道原因吗?
我们有软复位芯片的方法(从开始运行固件没有重新加载固件或重置BLE堆栈)?
非常感谢。
嗨zwang308,
我们没有观察到任何类似的测试执行(即中央就停止发送数据包)虽然我们设法找到一个cornercase外围无法连接在特定情况下,特定的补丁cornercase尚未公布。对于这种情况我们建议执行sw重置为580或重置堆栈。
您可以尝试发出重置使用SW_RESET SYS_CTRL_REG字段,设置sysram起始地址(请检查数据表),尽管它不是一个好主意,然后重新引导从原始图像者优先(下载使用引导装载程序中的代码580)你也可以试着发送GAPM_RESET命令以重置堆栈。
还能分享一些代码(中部和设备)为了看一看,因为我们不能复制这个问题在我们这边?
由于MT_dialog
嗨MT_dialog,
你能提供我一个电子邮件地址发送的代码吗?你可以联系我通过电子邮件。
非常感谢,
嗨zwang308,
问题是由于一个过时的SDK。
由于MT_dialog
嗨,MT_dialog。
我痛苦zwang308先生的一样的错误。我用V3.0.8 sdk版本。你说,这是由于一种过时的SDK, SDK可以请告诉我。谢谢。
嗨menson,
最新的SDK的5.0.4 580设备。
由于MT_dialog