我正在使用SDK 3.0.6,并尝试编写NVDS。然而,当启用读/写(#define NVDS_READ_WRITE 1)时,尝试调用nvds_put()会导致链接器错误:".\out\full_emb_sysram. "axf: Error: L6218E: Undefined symbol nvds_put (reference from nvds.o)."
如何编写NVDS ?我特别感兴趣的是配置设备的名称(NVDS_TAG_DEVICE_NAME)和BD地址(NVDS_TAG_BD_ADDRESS)。作为生产的一部分,这两种配置都将通过来自主机MCU的外部命令进行,并且对于每一个制造的设备都是不同的。
你好eli.iser,
我理解了
nvds_put.
未在代码中实现,因此链接器错误。不幸的是,我没有关于外部处理器的经验。要在广告数据包中更改设备名称,请参阅文件app_your_project_proj.c ..,具体为广告功能app_adv_func.
。您可以在其中找到结构Gapm_start_advertise_cmd * cmd作为参数。您可以使用此指针设置广告数据和设备名称。要设置设备名称:的memcpy(&CMD-> info.host.adv_data [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
对不起,我不能帮你
bd_addr.
。地址不是广告数据的一部分感谢您的答复。
是的,我知道我可以每次启动时在运行时更改设备名称。这是一个可接受的解决方法 - 读取BT地址并将设备名称设置为包含它。
但是,我必须能够更改BT地址。从我所看到的,它可以存储在OTP或NVDS中。我们希望在生产过程中设置每个设备的BT地址。还有另一种方法吗?
你好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寄存器* /
#define BLE_BDADDRU_REG (0x40000028) /* BLE设备地址MSB寄存器*/
你好Eli,我要求团队联系你讨论:你的设置有几个因素,他们需要澄清。我已经把robert寄给了这个帖子的副本,并让他保持联系好像我没有弄错,他本周去过你了。
嗨Vesan,谢谢你的评论!
BR JE_DIALOG.
谢谢你转发这个问题来支持。事实上,罗伯特周二来过,但我直到昨天才发现这个问题。
嗨,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之前提供的蓝牙地址()运行和应用的蓝牙地址到堆栈,或在设备运行由UART获得BD地址,并将其复制到dev_bdaddr变量,那么你将有发送GAPM_RESET_CMD为了堆栈采取新的BD地址。由于在规范中的BLE设备上的BD地址表示为固定或随机的BD地址,但是如果这是您想做的,因此,这是一种方法,因为这是一种方法,这是一种方法。
谢谢mt_dialog.