/*在arch_system.c::system_init()中,使用otp_hdr_get_bd_address()从OTP位置OTP_HDR_BDADDR_ADDR *读取BD地址并复制到dev_bdaddr变量。如果OTP没有被编程,* dev_bdaddr将是blank_otp_bdaddr (DA14531)或co_null_bdaddr (DA1458x)。当标签为NVDS_TAG_BD_ADDRESS时,变量* dev_bdaddr只在nvds.c::nvds_get_func中使用。* *在nvds.c::nvds_get_func(tag=NVDS_TAG_BD_ADDRESS)中,检查dev_bdaddr的值,如果*不是空/空,则返回其值。否则用户配置值为* nvds_data_storage。bd_address将被使用,它被静态地分配给CFG_NVDS_TAG_BD_ADDRESS *(在da1458x_config_advanced.h中定义)。这个函数是从ROM代码中调用的。*/ extern struct bd_addr dev_bdaddr;/*< arch_system.c */ /*用户配置值(NVDS_TAG_BD_ADDRESS)不需要更新,因为:这是不可能的,因为nvds_data_storage在nvds.c * 2中是静态const。 It is not used if dev_bdaddr is not blank/null */ /* Update value which was read from OTP in arch_system.c::system_init() */ memcpy(dev_bdaddr.addr, public_address, sizeof(dev_bdaddr.addr)); /* This function is not implemented (returns NVDS_FAIL), but try anyway */ nvds_put(NVDS_TAG_BD_ADDRESS, NVDS_LEN_BD_ADDRESS, dev_bdaddr.addr); /* Actually set current BD address */ lld_util_set_bd_address(&dev_bdaddr, 0);
尽管后来读的时候
struct bd_addr resp_addr;/* Read back set address */ lld_util_get_bd_address(&resp_addr);
实际设置了新地址(resp_addr。addr== public_address), but when advertising is started afterwards, DA14585 advertises with old address.
嗨moguilevski,
谢谢你在网上的帖子。如果我理解正确的话;您希望在设备启动时使用不同的DB地址发布。如果我错了,请纠正我。您可以使用随机静态BD地址,因此您应该将user_config.h头文件中的USER_CFG_ADDRESS_MODE宏更改为APP_CFG_ADDR_STATIC。
谢谢,PM_Dialog
你好PM_Dialog,
谢谢您的回复。它与随机静态BD地址工作良好。然而,当我从NVDS读取BD地址时,它仍然是由CFG_NVDS_TAG_BD_ADDRESS定义的公共地址。
这两种类型的地址都应该存储在设备存储器中吗?那么随机静态地址存储在哪里?
亲爱的团队对话框,
我们有几乎相同的情况-公共BD地址在上电后通过UART接收,需要通过编程设置,覆盖CFG_NVDS_TAG_BD_ADDRESS定义。
使用以下方法是不起作用的(public_address变量是6字节的缓冲区,带有接收到的公共BD地址):
尽管后来读的时候
实际设置了新地址(resp_addr。addr== public_address), but when advertising is started afterwards, DA14585 advertises with old address.
基地CYibin的评论,上面的工作,但我怀疑只有在user_app_init()中设置。以后如何随时更改地址?
编辑:对于那些想知道的人,我刚刚发现了一种有效的方法。为设置公共地址,以下
必须用
回读保持不变
你好bojanpotocnik,
非常感谢你的贡献。
嗨bojanpotocnik,
谢谢您的意见和指示。
谢谢,PM_Dialog