I'm working with SDK 3.0.6 and trying to write the NVDS. However, when enabling read/write (#define NVDS_READ_WRITE 1), trying to call nvds_put() results in a linker error: ".\out\full_emb_sysram.axf: Error: L6218E: Undefined symbol nvds_put (referred from nvds.o)."
How can NVDS be written? Specifically I am interested in configuring the device's name (NVDS_TAG_DEVICE_NAME) and the BD address (NVDS_TAG_BD_ADDRESS). Both of these will be configured via an external command from a host MCU as part of production, and will be different for every device manufactured.
Hello eli.iser,
我理解了
nvds_put.
未在代码中实现,因此链接器错误。不幸的是,我没有关于外部处理器的经验。要在广告数据包中更改设备名称,请参阅文件app_your_project_proj.c .., specifically advertising functionapp_adv_func.
。您可以在其中找到结构Gapm_start_advertise_cmd * cmd作为参数。您可以使用此指针设置广告数据和设备名称。要设置设备名称:memcpy(&cmd-> info.host.addata [cmd-> info.host.add_data_len + 2],device_name_temp_buf,device_name_length);
也许这不是直接您的兴趣,但这是广告数据有效载荷的一个例子。您在那里找到您的设备名称。长度为0x08,类型为0x09(完整的本地名称)
0000 02 01 06 08 09 41 42 43 44 45 46 47 ...... ABCDEFG
Sorry, I can't help you with
bd_addr.
。地址不是广告数据的一部分感谢您的答复。
是的,我知道我可以每次启动时在运行时更改设备名称。这是一个可接受的解决方法 - 读取BT地址并将设备名称设置为包含它。
但是,我必须能够更改BT地址。从我所看到的,它可以存储在OTP或NVDS中。我们希望在生产过程中设置每个设备的BT地址。还有另一种方法吗?
Hello eli.iser,
希望有人知道比我好。
我猜打开的BD_ADDR不太容易。我只发现了HCI读取功能。这里是关于OTP设置地址,第9.1节和第18页。
文件Arch_main.c.呼叫
nvds_read_bdaddr_from_otp.
功能。该功能是实施的nvds.c。该函数从OTP内存中读取BD_ADDR并将其存储到dev_bdaddr。我无法追踪此变量的实际用于最终设置地址的方式。我不知道是否是修改的好主意Arch_main.c.并使其从外部处理器读取BD_ADDR,而是从OTP读取(使其等待,例如,UART数据)。
我也发现这些寄存器datasheet.h.,但他们没有记录在实际数据表中:
#define ble_bdaddrl_reg(0x40000024)/ * ble device地址lsb寄存器* /
#定义BLE_BDADDRU_REG (0 x40000028) / * BLE设备address MSB register */
你好Eli,我要求团队联系你讨论:你的设置有几个因素,他们需要澄清。我已经把robert寄给了这个帖子的副本,并让他保持联系好像我没有弄错,他本周去过你了。
嗨Vesan,谢谢你的评论!
BR JE_DIALOG.
谢谢你转发这个issue to support. Indeed, Robert visited on Tuesday, but I didn't identify this issue until yesterday.
嗨,je_dialog,
我也对Wethe我可以通过修改NVDS_TAG_BD_ADDRESS在NVDS刻录后的NVDS_TAG_BD_ADDRESS来更改BD地址的问题感兴趣。
我们希望我们的设备的BD地址可以根据从UART收到的数据进行更改。
嗨祖马,
由BLE规范定义的BD地址有很少的选项,设备可以携带公共或随机地址,随机地址类型分为静态和私有,然后私有地址分为不可解析和可解析。我相信你想拥有的BD地址是公共场所(如果我错了,请纠正我)。设备在启动期间获得BD地址,在NVDS_READ_BDADDR()函数中(设备检查来自BD地址的NVDS结构或OTP的位置),并将获得的VED_BDDDR变量中的所获得的值放置在保存的地址中设备。
关于在运行时更改,如果您对随机的内容感兴趣,则随机地址模式可以为您做到这一点,但如果您想指定UART获得的确切地址,则必须在NVDS_READ_BDADDR之前提供BD地址()运行并将BD地址应用于堆栈,或者在设备运行时获取UART获取BD地址并将其复制到DEV_BDADDR变量,然后您将必须发送GAPM_RESET_CMD以便堆栈拍摄新BD地址。由于在规范中的BLE设备上的BD地址表示为固定或随机的BD地址,但是如果这是您想做的,因此,这是一种方法,因为这是一种方法,这是一种方法。
谢谢mt_dialog.