我正在使用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);
也许这不是直接的兴趣,但这里是广告数据有效载荷的例子。你在那里找到你的设备名称。长度为0×08和类型09(完整的本地名)
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存储器,并将其存储到dev_bdaddr读取BD_ADDR。我无法追踪这个变量实际上是如何使用的最终设置地址。我不知道这是否是修改一个好主意arch_main.c并使其从外部处理器从代替OTP(使其等待,例如,UART数据)读出的BD_ADDR。
我还发现,这些寄存器从datasheet.h,但他们没有记录在实际数据表:
的#define BLE_BDADDRL_REG(0x40000024)/ * BLE设备地址LSB寄存器* /
#define BLE_BDADDRU_REG (0x40000028) /* BLE设备地址MSB寄存器*/
你好礼,我要求团队与您联系并讨论:有一对夫妇的有关您的设置,他们将需要澄清的因素。我已经派罗伯特该线程的副本,并要求他取得联系,如果我没有记错,他本周访问你。
VesaN您好,感谢您的意见了!
BR JE_Dialog
谢谢你转发这个问题来支持。事实上,罗伯特周二来过,但我直到昨天才发现这个问题。
嗨,JE_Dialog,
我也有兴趣在这个问题是阉我可以通过动态地修改NVDS_TAG_BD_ADDRESS在NVDS改变BD地址特别是在固件烧毁。
我们希望,我们的设备的蓝牙地址可以根据从UART接收到的数据进行更改。
嗨祖马
如由BLE规范所定义的BD地址有几个选项,设备可以携带一个公共或随机地址和随机地址类型中的静态和私人,然后私人地址以不可分辨的和可分辨分割被分割。我相信,蓝牙地址,你想有一个公共一个(纠正我,如果我错了)。该设备获得(从其中可以得到BD地址或者NVDS结构或OTP设备检查)启动,在nvds_read_bdaddr()函数中保持的地址的BD地址和地的dev_bdaddr变量所得到的值装置。
至于改变,它在运行的时候,如果你有兴趣的东西随机随机地址模式可以做到这一点对你,但如果你想指定由UART得到一个确切的地址,你将不得不要么nvds_read_bdaddr之前提供的蓝牙地址()运行和应用的蓝牙地址到堆栈,或在设备运行由UART获得BD地址,并将其复制到dev_bdaddr变量,那么你将有发送GAPM_RESET_CMD为了堆栈采取新的BD地址。因为作为规范指示是固定的或随机的一个BLE装置的蓝牙地址上面的过程没有进行测试,但如果这是你想要做什么,这是一种方式,你可以做到这一点。
由于MT_dialog