连接稳定性问题

14个员额/0个新员额
最后一篇
Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
连接稳定性问题

嗨,对话,

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

msg-> nb_peers = 1;
memcpy((void*)和msg->peers[0]。addr,(void*)peer\u addr,BD\u addr\u LEN);
msg->peers[0]。地址类型=peer\u地址类型;
味精- > con_intv_max = 10;
msg-> con_intv_min = 10;
味精- > ce_len_max = 0 x20;
味精- > ce_len_min = 0 x20;
味精- > con_latency = 0;
msg-> superv_to = 100;
msg-> scan_interval = 0x180;
msg-> scan_window = 0x160;
msg-> op.code = gapm_connection_direct;

线鲨捕获:

9796 61.273854000主从BLE Data 26空数据PDU
9797 61.275295000从机主BLE数据26空数据PDU
9798 61.286603000主从BLE数据26空数据PDU
9799 61.287569000从站主机BLE数据26空数据PDU
9800 61.298855000主从电池数据26空数据PDU
9801 61.29978900从主机BLE数据26空数据PDU
9802 62.320227000 ab_mat5 BLE ADV 48 ADV_IND
9803 62.321788000 ab_mat5 ADV 48 ADV_IND

服务器和客户端保持连接60秒,不能再相互连接。

我仍然可以看到从机端的广告,但即使使用带有LightBlue应用程序的Iphone,我也无法再连接到从机。
线鲨捕获:
25 6.273182000资产负债表48资产负债表
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数据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主从可编程逻辑器件数据26空数据PDU
39 6.633361000主从可编程逻辑器件数据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分钟后随机断开连接。

在后一种测试中,我将连接间隔更改为30ms。他们可以保持连接更长(超过10小时),但仍然脱离了。

我会假设,如果我让处理器处于空闲状态,所有事情都应该由BLE堆栈自动处理,并且发送empty以保持连接应该与我的应用程序代码无关。此外,在断开连接时,我没有任何应用程序活动。

请帮我找到断开连接和如何提高连接稳定性的原因。

非常感谢。

关键词:
设备:
Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
一些更新,

一些更新,

从我隔夜的测试来看,ble定时器似乎工作不正常。
首先,它将OKEY工作约3小时(可能更多)。我们可以看到主机将空的PDU发送到从每30ms设置为从Alave作为我设置的值。
726216 10926.699285000主从池数据26空数据PDU
726217 10926.699861000从站主板数据26空数据PDU
726218 10926.729275000主从机BLE数据26空数据PDU
726219 10926.729815000从机主BLE数据26空数据PDU
726220 10926.759274000主从BLE数据26空数据PDU
726221 10926.760253000 Slave Master BLE Data 26空数据PDU
726222 10926.789250000主从BLE Data 26空数据PDU
726223 10926.790219000从机主BLE数据26空数据PDU
726224 10926.818524000主从BLE数据26空数据PDU
我猜嗅探器丢失了一个捕获。
726225 10926.848719000主从BLE数据26空数据PDU
726226 10926.850223000从机主BLE数据26空数据PDU
出于某种原因,我丢失了大约10个小时的捕获。幸运的是,就在他们断开之前,嗅探器再次获得信号。但是此时,主侧似乎表现出疯狂,它每次约2ms向客户端发送一个空的PDU,或者一旦收到来自从机的空的PDU,就会向客户端发送。
726227 47816.865216000主从机BLE数据26空数据PDU
726228 47816.866244000从站主板数据26空数据PDU
726229 47816.867143000主从BLE数据26空数据PDU
726230 47816.868015000 Slave Master BLE Data 26空数据PDU
726231 47816.868887000主从BLE数据26空数据PDU
726232 47816.869742000从机主BLE数据26空数据PDU
726233 47816.8706106070主从电池数据26空数据PDU
726234 47816.871492000从机主BLE数据26空数据PDU
.......
726560 47817.196839000主从机BLE数据26空数据PDU
726561 47817197000从机主BLE数据26空数据PDU
726562 47817.19878000主从机BLE数据26空数据PDU
726563 47817.199657000从主BLE数据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个月2周前
职员
加入:2015-06-08 34
你好,zwang308,

你好,zwang308,

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

从第一个日志中,我可以看到您的主站停止发送空数据包,以便保持连接,因此对从侧没有响应,发生超时,并且当您应该检查主机时,连接丢失。

从第2个日志似乎从主机响应从主机的连接请求,检查如何在外围代码中处理连接请求,并检查设备是否达到连接确认。

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

谢谢mt_dialog.

Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
我正在使用SDK 3.0.10.1。

我正在使用SDK 3.0.10.1。

问题是连接随机打破。

对于12ms的连接间隔,有时连接正常超过一小时;但有时他们只是在2分钟后断开连接。

当我将连接间隔更改为30毫秒后,平均连接时间会变得更长。但它们仍然是随机断开的,

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

在我看来,从服务器的BLE堆栈的一部分被搞糟了:从服务器可以收到来自主服务器的连接请求(它停止发布消息),但它不能发送ack。所以两边在1s之后就断开了。之后,奴隶又开始做广告。

这些是我从考试中得到的一切。

非常感谢您的帮助!

Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
顺便说一下,我也用这个

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

谢谢

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 34
你好,zwang308,

你好,zwang308,

I VE在SDK 3.0.10.1上实现了一个中心和外围设备(包括配置文件)I VE将连接参数设置为与您的主机相同的主机,其中连接间隔等于Pro和基本套件之间的12.5ms。到目前为止,一切似乎都是正确的,并且只要我能观看(超过两个小时),即可持续的连接也能够重新连接到主机,(尚未扩展睡眠模式)。您是否实施了任何配置文件或任何其他功能,以便尝试和重现您的问题?

谢谢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小时;有时,它们在2分钟后断开连接。

我真的很困惑。

非常感谢!

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 34
你好,zwang308,

你好,zwang308,

你能运行你的主窗体keil和检查当这个问题发生时,你的主窗体是什么状态?同样,你的处理程序表明有一个断开,要么是由主人或至少是由你的奴隶,当他停止接收数据从你的主机。你可以在你的设备上设置一个断点,并检查你得到的断开原因。没有办法检查为什么主服务器不发送任何数据,错误指示或类似的东西,因为这应该不会发生,堆栈应该总是保持连接。

谢谢mt_dialog.

Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
嗨MT_Dialog,

嗨MT_Dialog,

他们第一次断开了联系。外设上的错误码是0x13(REMOTE USER TERMINATED CONNECTION),而中央端的错误码是0x08(CONNECTION TIMEOUT)。

之后,外设侧的错误代码始终为0x08,中心侧为0x3e(连接无法建立)。

我认为代码实际上停止在某种程度上,因为这两个方面都在广告/扫描和连接状态之间保持切换。

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

我们有一个方法软复位芯片(运行固件从一开始没有重新加载固件或只是重置BLE堆栈)?

非常感谢。

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 34
你好,zwang308,

你好,zwang308,

We haven't observed anything similar in tests we performed (i.e. the central to just stop sending packets) although we managed to track a cornercase where the peripheral isn't able to connect under specific circumstances, the patch for the specific cornercase isn't yet released. For this kind of situations we propose either to perform a sw reset to the 580 or reset the stack.

您可以尝试使用sys_ctrl_reg的sw_reset字段发出重置,并将启动地址设置为sysram(请检查数据表)虽然它不是一个好主意,并优先从原始图像重新启动(下载代码580使用引导加载程序)也可以尝试发送GapM_Reset命令以重置堆栈。

由于我们无法复制问题,是否可以共享一些代码(中央和设备)以便查看?

谢谢mt_dialog.

Zwang308.
离线
最后一次露面:4年9个月前
掌握
加入:2014-07-02 14:15
嗨,MT_dialog,

嗨,MT_dialog,

您能否向我提供发送代码的电子邮件地址?你可以通过电子邮件亲自到达我。

非常感谢,

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 34
你好,zwang308,

你好,zwang308,

问题是由过时的SDK造成的。

谢谢mt_dialog.

孟森
离线
最后一次露面:3年4个月前
加入:2018-01-16 08:09
嗨,MT_dialog。

嗨,MT_dialog。
我犯了和zwang308先生一样的错误。我使用的是sdk版本V3.0.8。你说因为SDK已经过时了,请告诉我哪个SDK是可以的。谢谢。

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 34
嗨menson,

嗨menson,

最新的SDK是580设备的5.0.4。

谢谢mt_dialog.