如何解决connection断开的问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
YaTr_3516311
Level 5
Level 5
25 sign-ins First solution authored 100 replies posted

Hi,

设备(设备暂时叫BTU)根据ota_firmware_upgrade移植了一下ota功能,然后用pc的蓝牙及工具测试此功能。发现用电脑paired设备建立好connection后,BTU很快会收到断开的提示,提示为connection_down 28 56 5a 89 46 6c  conn_id:1 reason:19, Op Index:0。我查了一下reason:19的原因是GATT_CONN_TERMINATE_PEER_USER           = HCI_ERR_PEER_USER,                    /**< Connection terminated by peer user  */。但我不知道是什么原因电脑断开了BTU的设备?怎么解决这个问题?

如下是电脑的截图

pastedImage_0.png

0 点赞
1 解答
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

抱歉让您久等了。

我这边在WICED STUDIO 6.2版本下,使用CYBT-343026-EVAL和CYW920706WCDEVAL这两块板子同时测试了你的代码和对照组。得到如下几个结果:

  • 选用CYBT-343026-EVAL,编译您提供的工程,使用参数“BTU-CYBT_343026_EVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,但运行时无法检测到蓝牙设备。不指定蓝牙地址时也无法检测到名为“BTU”的设备。
  • 选用CYW920706WCDEVAL,编译您提供的工程,使用参数“BTU-CYW920706WCDEVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,但运行时无法检测到蓝牙设备。不指定蓝牙地址时也无法检测到名为“BTU”的设备。
  • 选用CYBT-343026-EVAL,编译WICED的snip.ota_firmware_upgrade工程,使用参数“snip.ota_firmware_upgrade-CYBT_343026_EVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,运行时能检测到蓝牙设备,也能使用windows的OTA升级程序进行固件更新。不指定蓝牙地址时也可检测到名为“OTA20706A2”的设备。
  • 选用CYW920706WCDEVAL,编译WICED的snip.ota_firmware_upgrade工程,使用参数“snip.ota_firmware-CYW920706WCDEVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,运行时能检测到蓝牙设备,也能使用windows的OTA升级程序进行固件更新。不指定蓝牙地址时也可检测到名为“OTA20706A2”的设备。

所以烦请确认一下,您这边是如何在烧写后成功启动固件的?因为我这边烧写您的固件后无法找到相应的蓝牙设备,两个COM端口也无任何日志输出,使用ClientControl也连接不上板子以输出BTSpy日志。亦即,我这边跑您的代码会出现假死现象。

PS:

如果您移植的是完整的官方OTA代码,那需要说明的是,官方的OTA升级流程中,是不需要电脑端和板子预先配对的,也不可以预先让windows和板子配对和连接。正常的升级办法,是在板子启动后,直接使用命令“.\WsOtaUpgrade.exe BTU-CYBT_343026_EVAL-rom-ram-Wiced-release.ota.bin”运行windows平台的OTA更新程序即可。详情参见OTA指导手册

OTA升级不需要和设备配对和绑定,它的原理是在建立不绑定的连接后采用GATT直写的方式来实现的。

而您预先使用电脑和板子配对的话,这会违反操作流程,故后续使用windows的OTA升级程序时,它试图重新建立connection,这干扰了windows原先建立的配对和连接并造成其断开,但OTA升级程序此时已经运行异常,无法继续,故便导致了您遇到的connection断开的情况。

<<<<<<<<<<<<<>>>>>>>>>>>>>

Sincere regards from​ C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

在原帖中查看解决方案

0 点赞
21 回复数
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

应该是电脑端主动断开连接了,请问使用OTA的demo或者其他的demo连接的时候是否会断开?

0 点赞

OTA demo不会。所以是我的自己的版本有问题,但是不知道是哪里出了问题导致电脑端断开了

0 点赞

该问题请帮忙看一下,需要我把code发过来吗

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

你可以先对比一下蓝牙的配对和连接过程是否和demo一致,如果找不到问题的话,可以将你的工程发过来看下。

0 点赞
lock attach
Attachments are accessible only for community members.

请看一下我的程序,我这边比下来没有看出什么问题。我这边时间比较紧张,希望能尽快解决,谢谢您

0 点赞

请问有啥进展吗

0 点赞

请问看的如何了?有进展吗

0 点赞

更新一点我这边测试的结果,我发现hello_sensor和hello_client的demo程序进行测试(用PC的蓝牙去链接开发板),也是会出来connection_down 28 56 5a 89 46 6c  conn_id:1 reason:19的

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

我大致了解了一下进展,想请您这边排查一下如下三个疑点:

  1. 您换另一台电脑尝试一下,看情况是否有改善?只是换另一台电脑,设备和其固件保持一致,WICED STUDIO和电脑端升级程序保持不变。
  2. 您在您当前这台故障电脑上,插上一个新的USB接口的BLE蓝牙收发器,然后在设备管理器里停用电脑集成的蓝牙模块(确保后续OTA过程不使用电脑集成的蓝牙模块),再测试一下,看情况是否有改善?
  3. 您是否x64和x86的两个编译版本的电脑端OTA程序都使用过,结果一样吗?

这几个测试应该可以排查出故障是否来自电脑这侧。

<<<<<<<<<<<<<>>>>>>>>>>>>>
Best Regards
C. L.
<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞

Hi,

感谢您的回复。

1. 我已经试过换了一台电脑,还是同样的结果(电脑端paird好后,设备端就出现connection_down 28 56 5a 89 46 6c  conn_id:1 reason:19, Op Index:0)。

2 我不认为是电脑的问题,因为同一台电脑,同一块开发板,如果是ota的demo程序,就不会有这个问题,而如果是hello_sensor/client的demo就会出现同样的问题(我自己的demo程序也是这个问题)

3. 我的程序已经发送给您,希望能尽快帮我看看是哪里出现了问题,我们这边时间比较紧张,谢谢您的支持

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

你这个情况比较特殊,工程文件方面还没找到什么问题,还需要继续分析一下。

想再确认一下您方面使用的是WICED STUDIO的6.4版本还是6.2版本?

据此前的报告,6.4版本的基带控制有些bug,可能会导致连接失常,您先回退到6.2试试?

<<<<<<<<<<<<<>>>>>>>>>>>>>

Best Regards

C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞

Hi,

我用的就是6.2的. Demo发给你们了,看不出来吗?希望能尽快解决, 我们这边的项目时间很紧张

BR,

Treacy

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

从工程来看是看不出您是在使用哪个WICED STUDIO的噢。

还有麻烦您提供一下您这个工程使用的Kit板名称,以及您现在使用的编译命令,我方便编译和核对一下。

<<<<<<<<<<<<<>>>>>>>>>>>>>

Best Regards

C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞

Hi,

开发板是CYBT-343026-EVAL 02.

编译指令:demo.BTU-CYBT_343026_EVAL UART=COM4 download OTA_FW_UPGRADE=1

BR,

Treacy

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

抱歉让您久等了。

我这边在WICED STUDIO 6.2版本下,使用CYBT-343026-EVAL和CYW920706WCDEVAL这两块板子同时测试了你的代码和对照组。得到如下几个结果:

  • 选用CYBT-343026-EVAL,编译您提供的工程,使用参数“BTU-CYBT_343026_EVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,但运行时无法检测到蓝牙设备。不指定蓝牙地址时也无法检测到名为“BTU”的设备。
  • 选用CYW920706WCDEVAL,编译您提供的工程,使用参数“BTU-CYW920706WCDEVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,但运行时无法检测到蓝牙设备。不指定蓝牙地址时也无法检测到名为“BTU”的设备。
  • 选用CYBT-343026-EVAL,编译WICED的snip.ota_firmware_upgrade工程,使用参数“snip.ota_firmware_upgrade-CYBT_343026_EVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,运行时能检测到蓝牙设备,也能使用windows的OTA升级程序进行固件更新。不指定蓝牙地址时也可检测到名为“OTA20706A2”的设备。
  • 选用CYW920706WCDEVAL,编译WICED的snip.ota_firmware_upgrade工程,使用参数“snip.ota_firmware-CYW920706WCDEVAL download  OTA_FW_UPGRADE=1 BT_DEVICE_ADDRESS=1234567890AB”,能编译通过并正常烧写,运行时能检测到蓝牙设备,也能使用windows的OTA升级程序进行固件更新。不指定蓝牙地址时也可检测到名为“OTA20706A2”的设备。

所以烦请确认一下,您这边是如何在烧写后成功启动固件的?因为我这边烧写您的固件后无法找到相应的蓝牙设备,两个COM端口也无任何日志输出,使用ClientControl也连接不上板子以输出BTSpy日志。亦即,我这边跑您的代码会出现假死现象。

PS:

如果您移植的是完整的官方OTA代码,那需要说明的是,官方的OTA升级流程中,是不需要电脑端和板子预先配对的,也不可以预先让windows和板子配对和连接。正常的升级办法,是在板子启动后,直接使用命令“.\WsOtaUpgrade.exe BTU-CYBT_343026_EVAL-rom-ram-Wiced-release.ota.bin”运行windows平台的OTA更新程序即可。详情参见OTA指导手册

OTA升级不需要和设备配对和绑定,它的原理是在建立不绑定的连接后采用GATT直写的方式来实现的。

而您预先使用电脑和板子配对的话,这会违反操作流程,故后续使用windows的OTA升级程序时,它试图重新建立connection,这干扰了windows原先建立的配对和连接并造成其断开,但OTA升级程序此时已经运行异常,无法继续,故便导致了您遇到的connection断开的情况。

<<<<<<<<<<<<<>>>>>>>>>>>>>

Sincere regards from​ C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞

Hi,

1. 我这个是通过hci command来实现各种功能的,所以一开机会打印log出来,后来就没有了。所以发送“19 01 02 01 00 01”的命令去avdertise,那么其他的蓝牙就可以搜到了。抱歉我没有跟你说清楚。请您再按照这个步骤测试一下
2. 您确定不需要先建立链接吗?gatt的数据交换应该在建立链接之后吧?至于操作步骤,我是按照你们给的文档进行操作的,是需要先建立连接的

pastedImage_0.png

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

  1. 好的,我会用WICED HCI命令的方式再测试一下您的固件,看看是否有连接断开的情况和原因。
  2. 的确是不需要预先配对的,不配对直接搜索设备并升级是可行的,后续的文档也都没有提到预先配对的操作了。您可以自行使用官方的OTA的demo测试一下。Windows在配对后会直接自行管理或创建连接,很多时候会造成麻烦。并且,您参考的是EZSerial的说明,并且是WICED STUDIO 5.x时候的操作流程,可能并不适用于6.2版本下的情况。

<<<<<<<<<<<<<>>>>>>>>>>>>>

Sincere regards from​ C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞

OTA升级不需要和设备配对和绑定,它的原理是在建立不绑定的连接后采用GATT直写的方式来实现的。

请问建立不绑定的连接来直写GATT是哪个函数决定的?比如我要是也想实现这样的功能,A设备与B设备connection上以后(不需要paried)直接对B设备gatt写入或者读出,或者B设备indication data过来。那我需要调用哪个接口函数?或者修改哪些值?

0 点赞

请问这个问题有没有什么进展?

0 点赞

请问这个问题看了吗,请尽快支持一下,谢谢

0 点赞
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

这个问题烦请您新建一个Thread来跟踪噢。

简单而言,BLE建立连接的操作和配对及绑定的操作没有附属关系。BLE直接搜索peer device并建立连接后,便可以读写不需要加密和认证的GATT,配对和绑定都是针对那些需要加密和认证的GATT资源的。

请参见:

http://codeitbro.blogspot.com/2017/04/ble-pairing-vs-bonding.html

<<<<<<<<<<<<<>>>>>>>>>>>>>

Sincere regards from​ C. L.

<<<<<<<<<<<<<>>>>>>>>>>>>>

0 点赞