我正在使用SDK 3.0.6,并试图编写NVDS。然而,当启用read/write (#define NVDS_READ_WRITE 1)时,尝试调用nvds_put()会导致链接错误:". out\ full_emb_syram . "axf: Error: L6218E: Undefined symbol nvds_put(引用自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。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
对不起,我帮不了你
BD_ADDR
.地址不是广告数据的一部分谢谢你的回复。
是的,我知道我可以在运行时每次设备启动时更改设备名称。这是一个可接受的解决方案——读取BT地址并设置设备名称来包含它。
但是,我必须能够改变BT地址。在我看来,它可以存储在OTP或NVDS中。我们希望在生产过程中设置每个设备的BT地址。还有别的方法吗?
你好eli.iser,
希望有人比我更懂。
我想动态地改变BD_ADDR不是很容易。我只找到了hci的read函数。这里是关于OTP设置地址第9.1节和第18页。
文件arch_main.c调用
nvds_read_bdaddr_from_otp
函数。中实现该函数nvds.c.函数从OTP内存中读取BD_ADDR,并将其存储到dev_bdaddr。我无法追踪这个变量是如何最终用于设置地址的。我不知道改一下是不是个好主意arch_main.c并使它从外部处理器而不是从OTP读取BD_ADDR(使它等待,例如,uart数据)。
我还发现了这些收银机datasheet.h,但它们没有在实际的数据表中记录:
#define BLE_BDADDRL_REG (0x40000024) /* BLE设备地址LSB寄存器*/
#define BLE_BDADDRU_REG (0x40000028) /* BLE设备地址MSB寄存器*/
你好,Eli,我已经让团队联系您讨论:关于您的设置,有几个因素他们需要澄清。如果我没弄错的话,我已经给罗伯特寄去了这个帖子的副本,请他与你联系,他这周拜访过你。
你好,VesaN,再次感谢你的评论!
BR JE_Dialog
感谢您转发这个问题来支持。的确,Robert周二拜访了我,但我直到昨天才发现这个问题。
嗨,JE_Dialog,
我也感兴趣的问题,我是否可以通过修改NVDS中的NVDS_TAG_BD_ADDRESS动态更改BD地址,特别是在固件烧毁后。
我们希望我们设备的BD Address可以根据收到uart的数据更改。
嗨,祖马,
BLE规范定义的bd地址有几个选项,设备可以携带公共地址或随机地址,随机地址类型分为静态地址和私有地址,私有地址分为不可解析地址和可解析地址。我相信您想要的屋宇署地址是公开的(如果我说错了请指正)。设备在启动过程中获得bd地址,在nvds_read_bdaddr()函数中(设备从可以获得bd地址的NVDS结构或OTP的地方检查),并将获得的值放在保存设备地址的dev_bdaddr变量中。
关于在运行时改变,如果你感兴趣的一些随机随机地址模式可以为你但如果你想指定一个确切的地址通过UART你需要提供nvds_read_bdaddr前的bd地址()运行和bd地址适用于堆栈,或者当设备运行时,通过uart获取bd地址并将其复制到dev_bdaddr变量,然后您必须发送一个GAPM_RESET_CMD以便堆栈获取新的bd地址。上面的过程没有测试,因为BLE设备上的bd地址是固定的或随机的,但如果这是你想做的,这是一种方法。
由于MT_dialog