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.adv_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设备地址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的位置),并将所获得的值放在vid_bdaddr变量中,该变量保存了该地址的设备。
关于在运行时更改,如果您对随机的内容感兴趣,则随机地址模式可以为您做到这一点,但如果您想指定UART获得的确切地址,则必须在NVDS_READ_BDADDR之前提供BD地址()运行并将BD地址应用于堆栈,或者在设备运行时获取UART获取BD地址并将其复制到DEV_BDADDR变量,然后您必须发送GAPM_RESET_CMD,以便堆栈拍摄新的BD地址。由于规范所示的BLE设备上的BD地址指示是固定的或随机的,因此不测试上述过程,但如果这是您想做的,那就是您可以执行的方式。
谢谢mt_dialog.