14个职位/ 0个新职位
最后发表
zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
连接稳定性问题

嗨,对话框中,

我正在开发一对基于DA14580的BLE设备,包括服务器和从服务器。在相互连接之后,即使我让这些处理器处于空闲状态(没有BLE读/写/通知,没有i2c, gpio…但它们仍然是随机断开的。看起来其中一个损坏在链接层,因为断开后,他们不能再次连接。下面是我为这个连接和一些wireshark捕获设置的参数。

味精- > nb_peers = 1;
memcpy ((void *)味精- >[0]。addr, (void *)peer_addr, BD_ADDR_LEN);
味精- >[0]。addr_type = peer_addr_type;
msg-> con_intv_max = 10;
味精- > con_intv_min = 10;
msg-> ce_len_max = 0x20;
msg-> ce_len_min = 0x20;
msg-> con_latency = 0;
味精- > superv_to = 100;
味精- > scan_interval = 0 x180;
味精- > scan_window = 0 x160;
味精- > op。代码= GAPM_CONNECTION_DIRECT;

wireshark截图:

9796 61.273854000主从机BLE数据26空数据PDU
9797 61.275295000 Slave Master BLE Data 26空数据PDU
9798 61.286603000主从BLE Data 26空数据PDU
9799 61.287569000 Slave Master BLE Data 26空数据PDU
9800 61.298855000主从BLE Data 26空数据PDU
9801 61.299789000 Slave Master BLE Data 26空数据PDU
9802 62.320227000 AB_MAT5 BLE ADV 48 ADV_IND
9803 62.321788000 ab_mat5 BLE ADV 48 ADV_IND

服务器和客户端保持60s的连接,无法相互连接。

我仍然可以看到slave端广告,但即使使用带有LightBlue应用程序的Iphone,我也无法再连接到slave端。
Wireshark截图:
25 6.273182000 ab_mat4 BLE ADV 48 ADV_IND
26 6.274736000 50:0B:F8:18:AC:29 80:EA:CA:00:00:41 BLE ADV 60 Connect_Req
27 6.276461000主从机BLE数据26空数据PDU
28 6.303327000主从BLE Data 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 ADV 48 ADV_IND
41 7.642505000 AB_MAT4 BLE ADV 48 ADV_IND

在这个测试中,我将连接间隔设置为12.5毫秒。在这种情况下,服务器和客户端将在连接60秒到45分钟后随机断开连接。

在后面的测试中,我将连接间隔更改为30毫秒。他们可以保持更长时间的联系(超过10个小时),但仍然会断开。

我假设如果我让处理器处于空闲状态,一切都应该由BLE堆栈自动处理,并且发送空值来保持连接应该与我的应用程序代码无关。而且,当它们断开连接时,我没有任何应用程序活动。

请帮我找出断开的原因,以及如何提高连接的稳定性。

非常感谢。

关键词:
设备:
zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
一些更新,

一些更新,

从我的通宵测试来看,似乎ble定时器没有正常工作。
首先,它可以工作大约3个小时(可能更多)。我们可以看到,正如我设置的值,master每30毫秒向slave发送一个空PDU。
726216 10926.699285000主从BLE Data 26空数据PDU
726217 10926.699861000 Slave Master BLE Data 26空数据PDU
726218 10926.729275000主从BLE Data 26空数据PDU
726219 10926.729815000从站主机BLE数据26空数据PDU
726220 10926.759274000主从BLE Data 26空数据PDU
726221 10926.760253000从站主板数据26空数据PDU
726222 10926.789250000主从机BLE数据26空数据PDU
726223 10926.790219000 Slave Master BLE Data 26空数据PDU
726224 10926.818524000主从BLE Data 26空数据PDU
我猜嗅探员在这里丢了一个。
726225 10926.848719000主从BLE Data 26空数据PDU
726226 10926.850223000 Slave Master Data 26空数据PDU
由于某种原因,我失去了大约10个小时的捕获。幸运的是,就在它们断开连接之前,嗅探器又收到了信号。但是在这个时候,主端似乎表现得很疯狂,它每2ms发送一个空的PDU给客户端,或者当它从从端收到一个空的PDU的时候。
726227 47816.865216000主从BLE Data 26空数据PDU
726228 47816.866244000 Slave Master BLE Data 26空数据PDU
726229 47816.867143000主从BLE Data 26空数据PDU
726230 47816.868015000从机主机BLE数据26空数据PDU
726231 47816.868887000主从BLE Data 26空数据PDU
726232 47816.869742000 Slave Master BLE Data 26空数据PDU
726233 47816.870613000主从BLE Data 26空数据PDU
726234 47816.871492000 Slave Master BLE Data 26空数据PDU
.......
726560 47817.196839000主从BLE Data 26空数据PDU
726561 47817.197927000 Slave Master BLE Data 26空数据PDU
726562 47817.198787000主从BLE Data 26空数据PDU
726563 47817.199657000 Slave Master BLE Data 26空数据PDU
726564 47817.201497000 ab_mat5 BLE ADV 48 ADV_IND
726565 47817.202433000 ab_mat5 BLE ADV 48 ADV_IND

我希望这些信息能让你们对这个问题有更多的认识,谢谢。

谢谢!

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨zwang308,

嗨zwang308,

您在当前实现中使用的是哪个SDK ?您拥有的开发工具包是什么?就我所知,你使用的连接参数几乎与DSPS项目相同。你的假设是正确的,当你连接到一个设备时,堆栈将通过交换空数据包来保持连接,而不要求应用程序做任何事情。

从第一个日志我可以看到,你的主人停止发送空数据包,以保持连接活着,因此没有响应的奴隶端,超时发生和连接丢失,当这种情况发生时,也许你应该检查你的主机的状态。

从第2条日志来看,从服务器似乎没有响应来自主机的连接请求,检查你是如何在外围代码中处理连接请求的,并检查设备是否到达连接确认。

关于第3个日志,这似乎很奇怪,我不能想象为什么中央会开始发送空包在如此高的速率,特别是如果没有数据发送,中央本身或设备。

由于MT_dialog

zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
我使用的是SDK 3.0.10.1。

我使用的是SDK 3.0.10.1。

问题是连接会随机中断。

12ms连接间隔,有时连接正常时间超过1小时;但有时两分钟后就断了。

在将连接间隔更改为30ms后,平均连接时间更长。但他们仍然随机断开连接,

当它们断开连接时,实际上没有应用程序活动。我假设BLE堆栈将处理连接,在此期间自动发送/ack空PDU。
而且,即使它们断开连接,也应该能够重新连接。但一旦它们断开,我就不能再连接到slave,无论我使用我的主应用程序或使用一些标准设备,如IPhone。

对我而言,它看起来像Slave的BLE堆栈的一部分搞砸了:从机可以接收来自Master的连接请求(它停止广告),但它无法发送ACK。所以,两侧刚刚在1秒后断开连接。奴隶开始再次宣传奴隶。

这是我考试的全部资料。

非常感谢你的帮助!

zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
顺便说一下,我使用相同的

顺便说一下,我对所有测试使用相同的代码库。我确定从端发送连接请求确认,否则他们不会连接。同样,问题是connect-----保持连接的时间是随机的——断开连接,再也无法重新连接。

谢谢,

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨zwang308,

嗨zwang308,

我已经实现了一个中央和外设上的SDK 3.0.10.1(没有配置文件包括),我已经设置连接参数到主机与您的相同的连接间隔等于12.5毫秒之间的专业和基本套件。到目前为止,一切似乎都是正确的,连接持续到我可以看(超过两个小时),我也能够重新连接到主机,(在延长睡眠模式)。您是否实现了任何配置文件或任何其他功能,以尝试和再现您的问题?

由于MT_dialog

zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
嗨MT_dialog,

嗨MT_dialog,

我所做的和你的DSPS项目差不多。

我开发了一个I2C驱动程序,并把数据放入nvram,当我收到一个包。在app_asynch_trim函数中,我提取缓冲区并通过BLE发送数据。

但在我的测试中,我禁用了app_asynch_trim中的I2C驱动程序和pull函数。在测试中,当两个da14580断开连接时,它们实际上什么都不做。

根据我的观察,他们持续发送空的PDU一段时间,突然主人停止发送空的PDU。我们有方法知道为什么主停止发送空PDU?我们能从内核得到一条消息来知道他们为什么断开连接吗?

在我看来,它们似乎是随机断开的。我们上周做了很多测试,有时连接良好超过16个小时;有时他们会在两分钟后断开连接。

这让我很困惑。

谢谢!

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨zwang308,

嗨zwang308,

您可以运行主表​​单keil并检查此问题时检查,您的主人是什么状态?您的处理程序也表明当您停止主机接收数据时,主站或至少由您的从站断开连接。您可以将休闲点放在您的设备上,并检查您作为断开连接的原因。没有办法检查主设备不会发送任何数据,错误指示或类似的东西,因为这不应该发生堆栈应该始终保持连接。

由于MT_dialog

zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
嗨mt_dialog,

嗨mt_dialog,

他们第一次断开连接。外围设备上的错误代码为0x13(远程用户终止连接),而中心侧的错误代码为0x08(连接超时)。

之后,外设端的错误码总是0x08,中央端的错误码是0x3e(CONNECTION FAILED TO BE ESTABLISHED)。

我不认为代码实际上停止了一点,因为双方一直在广告/扫描和连接状态之间切换。

我们知道为什么会这样吗?

我们是否有一个软复位芯片的方法(从开头运行固件而无需重新加载固件或仅重置BLE堆栈)?

非常感谢。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨zwang308,

嗨zwang308,

在我们执行的测试中,我们没有观察到任何类似的情况(例如,中央停止发送数据包),尽管我们设法跟踪了一个边角情况,其中外设在特定情况下无法连接,针对特定边角情况的补丁还没有发布。对于这种情况,我们建议对580执行一个sw复位或重置堆栈。

您可以尝试发出重置使用SW_RESET SYS_CTRL_REG字段,设置sysram起始地址(请检查数据表),尽管它不是一个好主意,然后重新引导从原始图像者优先(下载使用引导装载程序中的代码580)你也可以试着发送GAPM_RESET命令以重置堆栈。

是否有可能共享一些代码(中心和设备)以便查看,因为我们无法复制我们这边的问题?

由于MT_dialog

zwang308
离线
最后看到:4年9个月前
主
加入:2014-07-02福音14:15
嗨MT_dialog,

嗨MT_dialog,

你能给我一个发送代码的邮箱地址吗?你可以通过电子邮件和我联系。

非常感谢,

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨zwang308,

嗨zwang308,

问题是由于过时的SDK。

由于MT_dialog

menson
离线
最后看到:3年4个月前
加入:2018-01-16 08:09
嗨,mt_dialog。

嗨,mt_dialog。
我正在遭受与Zwang308先生的错误相同的错误。我正在使用SDK版本v3.0.8。你说这是由于一个过时的SDK,请告诉我哪个SDK没问题。谢谢。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨menson,

嗨menson,

最新的SDK是580设备的5.0.4。

由于MT_dialog