ble_app_security选用USER_CFG_PRIV_GEN_RSLV_RND,绑定后无法连接。

18 posts / 0 new
Last post
daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
ble_app_security选用USER_CFG_PRIV_GEN_RSLV_RND,绑定后无法连接。

问题如标题,我们现在是想要每个设备不同的地址,在官方实例4中发现有相关内容。

发现:
定义USER_CFG_PRIV_GEN_STATIC_RND的话,虽说地址为随机生成,但是无法保存,下次上电地址就会变化。
定义USER_CFG_PRIV_GEN_RSLV_RND的话,虽然绑定后就算重新开机地址也不会变了,广播也都能发现,但是无法连接到设备。

请问这是怎么回事呢?

Device:
CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
你好, 请问是基于哪个工程开发的?

你好,

请问是基于哪个工程开发的?

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好! 呃就是基于官方实例4:security

您好!

呃就是基于官方实例4:security

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
你好,

你好,

你所说的官方实例,指的是哪份文档吗?

请描述你所用工程所属的SDK版本,比如SDK5.0.4中ble_app_barebone工程。

另外,连接不上,手机有什么提示,设备有什么打印信息(如果有开打印的话)?

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好!

您好!

是SDK5.0.4中的ble_app_security。并且只修改了#define USER_CFG_PRIV_GEN_RSLV_RND

我用nrf connect测试,是绑定后可以找到设备,但是连接并断开一次后,就无法再次连接了。

用BLE Scanner测试,绑定后直接就无法找到设备了。

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
“我用nrf connect测试,是绑定后可以找到设备

“我用nrf connect测试,是绑定后可以找到设备,但是连接并断开一次后,就无法再次连接了。”

可能是你没把手机系统设置蓝牙列表中的设备的配对信息删除掉

“用BLE Scanner测试,绑定后直接就无法找到设备了。”

可能是已经连接上了。建议将手机蓝牙关掉后,重新打开

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好!

您好!

用BLE scanner,重新启动手机蓝牙后可以发现,但是无法连接。

您前面一句话是什么意思?绑定了为什么要删除掉呢?

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
蓝牙加密连接,分几步

蓝牙加密连接,分几步

1、连接

2、配对,双方交换秘钥信息,方式有几种,常见的,就是手机上会弹出一个配对窗口,用户点确定之后,完成授权过程,之后配对成功

3、绑定,将第3步涉及到的秘钥信息,保存起来

4、链路加密,实现加密传输

完成绑定的设备,下次连接的时候,无需再进行配对,可直接从绑定的时候保存的信息中,获得秘钥,实现链路加密。

当手机、设备有一方丢失了绑定信息时,会导致连接失败

当手机、设备都清除绑定信息时,可重新配对、绑定。

清除手机已配对列表,可以清除该信息

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好!

您好!

可是我现在的情况没有丢失绑定信息呀?

我的步骤是:

连接,绑定,输入“123456”,断开连接,后面就无法再次连接了。

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
无法再次连接,一般的原因是有一方的配对信息丢失了。这时候

无法再次连接,一般的原因是有一方的配对信息丢失了。这时候,你就需要清空双方的配对信息,再重新连接。

清空双方的配对信息的方式是,手机端,清除配对列表中的设备;设备端,如果是 keil debug 模式,则重新上电,如果是烧录到 flash 中了,则重新烧录程序。

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
呃,为什么会丢失呢?这样不是连绑定都无法绑定了?

呃,为什么会丢失呢?这样不是连绑定都无法绑定了?

如果我的设备以后要正常长久的使用,该怎么办。

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
可将配对信息保存在 flash 中,相关的处理,见 app

可将配对信息保存在 flash 中,相关的处理,见 app_bond_db.c

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好!

您好!

工程默认就是将bond db保存在spi flash中的呀,我用snippet tool看也的确保存成功了。

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
你好,

你好,

对于问题:“我用nrf connect测试,是绑定后可以找到设备,但是连接并断开一次后,就无法再次连接了”

请问你的测试手机型号是?用其它手机会不会有这个问题?

另外,这个问题是因为改变蓝牙地址类型引起的吗?用默认的 public 蓝牙地址,会不会有这个问题?

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
您好!

您好!

我使用的手机是一加5,系统版本为8.1.0,用其他手机也有这个问题的。

是的,用默认的public和static都没问题。

可是我想做到每个设备有随机地址并且绑定后可以保存地址不再改变。可是用static的话重新上电就会重新生成新地址。

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
你好, 请问这样做的目的是什么?

你好,

请问这样做的目的是什么?

daniel59
Offline
Last seen:1 year 3 months ago
Joined:2016-01-08 04:34
呃,resoveable的不是安全性高吗?

呃,resoveable的不是安全性高吗?

public后续批量生产的话还要使用烧录器不是吗?

CYibin
Offline
Last seen:4 months 6 days ago
Staff
Joined:2017-12-14 02:48
你好,

你好,

地址分 public 和 random 类型。若想保持蓝牙地址在产品的整个生命周期不变,只能用 public 类型