你好,先生,
我们想让我们的设备有随机地址,发现ble\u app\u security都引入了这个功能。
但我发现:
如果我定义USER\u CFG\u PRIV\u GEN\u STATIC\RND,地址只保留在这个生命周期中,即使我绑定了设备,在设备关闭后,地址也改变了。
如果我定义USER\u CFG\u PRIV\u GEN\u RSLV\u RND,在我绑定设备后,地址被保留,但我无法连接到它。
为什么会这样?有什么不对劲吗?
丹尼尔
设备:
你好daniel59,
如果我从你的线程中正确地理解了你所说的,当你定义了USER\u CFG\u PRIV\u GEN\u STATIC\u RND时,你可以连接你的设备并且BD被改变了。你的问题是你拒绝了用户的请求,对吗?这个定义是生成可解析的私有随机BD地址。可解析专用地址(RPA)由IRK和prand生成,这是随机生成的。有关RPA的更多信息,请阅读BLE规范。请注意,如果您定义了用户\u CFG\u PRIV\u GEN\u RSLV\u RND,则应该保留未定义的用户\u CFG\u PRIV\u GEN\u STATIC\u RND。我试图复制你的问题,我定义了用户\u CFG\u PRIV\u GEN\u STATIC\u RND,但我能够将DA14580 Pro DK与移动BLE应用程序连接起来。当设备与移动应用程序断开连接,并且我从应用程序中刷新BLE设备的列表时,我可以使用不同的BD地址再次连接。你能澄清一下你是在使用SKD的ble\u app\u安全,还是你做了任何配置?另外,如果您想用RPA配置漫游设备,请告诉我好吗?请尝试从应用程序中刷新BLE设备的列表,并确保BD已更改。
谢谢,下午好
我只想我的设备有随机地址,和债券后的地址可以保留。
我尝试了2种方法在ble\u app\u安全项目中生成随机地址。
一种是定义用户\u CFG\u PRIV\u GEN\u STATIC\u RND和未定义用户\u CFG\u PRIV\u GEN\u RSLV\u RND,
它可以生成随机地址并保留地址,但在设备重新启动后,地址发生了变化。
即使我绑定了设备,设备重启也会改变地址。
所以我觉得这个方法不是我想要的。
另一种是定义用户\u CFG \u PRIV \u GEN \u RSLV \u RND和未定义用户\u CFG \u PRIV \u GEN \u STATIC \u RND,
它可以生成随机地址,地址在150s内改变,如用户配置所定义。
在我绑定设备之后,地址stop会改变,reboot也不会改变地址。
但我把它绑起来之后,它就不能连接了。
还有什么我需要配置的吗?
你好daniel59,
对不起,我有点搞不懂你想做什么?你想有随机的BD地址,但重新启动后地址不会改变吗?如果您定义USER\u CFG\u PRIV\u GEN\u STATIC\u RND,那么USER\u config.h头文件中USER\u adv\u conf结构的addr\u src项将配置为GAPM\u GEN\u STATIC\u RND\u addr。因此,如果您检查app\u easy\u gap\u undirected\u advertise\u start\u create\u msg()函数,则每次开始播发时都会触发generate\u static\u random\u address(),BD地址也会更改。你能澄清一下你想实现什么,如果你想你的设备有私人的静态随机BD地址或可解析的BD地址吗?
谢谢,下午好
嗨,PM\U对话,
是的,我想有随机的BD地址,但重新启动后地址不会改变。
静态随机BD地址和可解析BD地址都可以。
但我在4号柱子试过了,
静态随机BD地址在重启后会改变,即使我绑定它,
可解析BD地址将在150s后更改,并且在绑定后不会更改。
所以我认为可解析的BD地址符合我的要求,但为什么绑定后不能连接呢?
丹尼尔
你好daniel59,
正如我在上一篇文章中已经提到的,重新启动后随机的BD地址将会改变。对于您的实现,一个可能的解决方案是将随机BD地址存储到SPI闪存或OTP中,因此在重新启动或关闭电源后,您应该从那里读取它。如果您只想在重新启动后保留它,而不想在关机后保留,可以将它存储在保留RAM中。另外,请注意,BD地址遵循标准格式,并且符合BLE规范。有关其格式的更多信息,请阅读BLE规范。关于可解析的BD地址,您的意思是,连接后,您从对等设备断开连接,您无法再次连接?我从我这边测试,我能够连接到可解析的BD地址配置。
谢谢,下午好
嗨,PM\U对话,
好的,我将尝试将随机BD地址存储到SPI闪存中。
关于可解析的BD地址,我的意思是连接后,我连接,然后从对等设备断开,我不能再连接。
丹尼尔
你好daniel59,
请尝试从“应用程序”面板刷新可用设备的列表。如果您发现以上任何答案有用,请将其中一个标记为已接受。
谢谢,下午好
嗨,PM\U对话,
关于可解析的BD地址,我仍然无法解决。
粘合后,连接,然后断开。可以找到设备,但无法连接。
连接后,先连接,然后断开。可以找到设备,但也无法连接。
好像只能连接一次。
丹尼尔
你好daniel59,
无法重新连接的最可能原因是,您正在使用的BLE应用程序可能已兑现您的绑定设备。请尝试从BLE应用程序中刷新可用设备的列表,并确保设备未被缓存,并且刷新后BD地址已更改,好吗?我试着从我身边,我能够重新连接后,粘结程序。
谢谢,下午好
嗨,PM\U对话,
我使用“nrf connect”,但仍然无法连接。
在安卓系统上有没有其他你推荐的BLE应用?
丹尼尔
你好daniel59,
推荐的android移动BLE应用程序是“BLE扫描仪”. 我从我身边测试,我能够重新连接。如果使用SDK(5.0.4版)的默认ble\u app\u安全示例,并且在USER\u config.h头文件中定义了USER\u CFG\u PRIV\u GEN\u RSLV\u RND宏,则应该能够重新连接,因为BD地址已更改。另外,我建议您从应用程序的“Near-By”面板中刷新可用的BLE设备,并确保BD地址已更改。
谢谢,下午好
嗨,PM\U对话,
使用“BLE扫描器”,我找不到我的设备后,债券。
是的,我只将“undef USER\u CFG\u PRIV\u GEN\u RSLV\RND”更改为“define USER\u CFG\u PRIV\u GEN\u RSLV\RND”。
丹尼尔
你好daniel59,
我用Pro-Dk和SDK5.0.4进行了测试,但是我无法复制您的问题。你在做哪个SKD?您是否尝试刷新“附近”面板?我强烈建议您将固件运行到调试模式,以便检查代码是否卡在Watchdog或Hardfault处理程序中。此外,请尝试使用SmartSnippets工具箱,以确保断开连接后,您的设备仍处于广告状态。请您澄清一下,您使用的是DA14580定制板还是我们的任何开发板?
谢谢,下午好
嗨,PM\U对话,
我用的是带1M winbond flash的定制板。
是的,我使用调试模式,但基尔没有显示任何错误。
如果我使用的是定制板,是否可以使用SmartSnippets工具箱来确保我的设备在绑定后仍处于广告状态?
所有的问题都在邦德之后。我使用Android默认系统功能,输入123456绑定我的设备,会不会出错?
丹尼尔
你好daniel59,
请确保位于SDK的DA1458x\U SDK\5.0.4\utilities\Flash\U programmer文件夹路径中的Flash编程器支持您使用的SPI Flash。否则,您应该将这个SPI Flash自己添加到Flash程序员中。如果您想使用SmartSnippets工具箱烧录SPI闪存,请告诉我好吗?我建议您看看常见问题,在开发工具包和参考设计部分,有一个问题“如何使用开发工具包(基本或专业)编程定制板”。
https://support.dialog-semiconductor.com/guide/faq-dev-kits-ref-designs
此外,您还可以检查SDK的ble\u app\u安全示例的user\u app\u disconnect()回调函数。此回调将在断开连接时触发,因此您将看到断开连接后的设备通过执行user\u app\u adv\u start()函数重新启动播发。你能在用户app\u disconnect中的user\u app\u adv\u start()中添加一个断点并在开发模式下运行你的代码吗?
谢谢,下午好
嗨,下午好,
是的,我在设备上使用w25x10cl。附件是存储在spi flash中的bond db。
我看到代码进入了用户app\u adv\u start(),所以我重启了手机上的蓝牙功能,然后设备就可以启动了。
但仍然无法连接到它。
这可能是因为在我断开连接后,虽然我将其绑定,这意味着地址被保存到SPI闪存中,但断开连接后地址仍然会更改吗?然后因为地址不对,就不能接通了。
你好daniel59,
你能在没有SPI闪光灯的情况下运行它并告诉我结果吗?我试图复制你的问题,但我仍然能够重新连接没有SPI闪存与矿石。
谢谢,下午好
嗨,PM\U对话,
我将user_config中的代码更改为#undef user_CFG_APP_BOND_DB_USE_SPI_FLASH。
这个装置的作用是一样的。粘接后不能连接。当我删除键合后,它就可以连接了。
丹尼尔
你好daniel59,
由于BD地址已更改,您应该能够重新连接。可能,绑定的BD地址是从您的智能手机缓存的,这就是为什么您可以重新连接,如果您删除绑定的设备。另外,您的问题的一个可能原因是您的智能手机不支持可解析的BD地址。你能用另一部手机(带和不带SPI闪光灯)检查一下吗?如果您发现以上任何答案有用,请将其中一个标记为已接受。
谢谢,下午好
嗨,PM\U对话,
是的,当我发现这个问题时,我试过用其他手机,但它们的行为都是一样的。
我试过另一种方法:
我设置了两个断点,一个在user\u app\u connection中,称为A,另一个在user\u app\u disconnect中,称为B,然后开始我的操作。
先用手机键合芯片,A触发,然后输入123456,按OK,现在都键合好了。然后我关掉手机的蓝牙功能,B触发。
然后我打开BLE扫描器尝试连接到它,芯片可以在附近的标签和显示。我按下连接按钮,
A没有触发。
所以也许这就是我无法连接到它的原因?为什么会这样?
你好daniel59,
可能,这是智能手机方面的问题,因为我仍然无法复制您的问题。你能分享一下你在SDK的默认ble\u app\u睡眠模式示例中所做的配置/定义吗,以便再次尝试用你正在使用的相同配置复制你的问题?只有使用可解析的BD地址,您才能重新连接?
谢谢,下午好
嗨,PM\U对话,
是的,只有可解析的BD地址我不能连接后,债券和断开。也许我应该用苹果手机试试?
附件是我使用的项目。请试一试。
你好daniel59,
我测试了你的项目,在亲DK和附加的SPI闪存工作,但我仍然无法复制你的问题。断开连接后,能否从“历史记录”面板中删除设备,然后尝试重新连接?你能在Pro-DK中测试你的项目吗?
谢谢,下午好
嗨,PM\U对话,
删除历史后,我仍然无法连接到它后债券。
我没有专业dk。。。。。
我想我只能将随机静态地址保存到spiflash来实现我的目标。
非常感谢。
你好daniel59,
是的,请尝试将静态随机BD地址存储到SPI闪存。您希望实现什么样的功能?
谢谢,下午好
嗨,PM\U对话,
我只希望我们的设备有随机地址。
在知道将静态随机BD地址存储到SPI flash可以达到我的目的后,我想弄明白为什么可解析的不能。
谢谢你对我问题的评论。
你好daniel59,
在您的情况下,我建议您使用USER\u CFG\u PRIV\u GEN\u STATIC\u RND definition并将BD地址存储到SPI Flash中。我不必使用可解析的BD地址,
谢谢,下午好