在生产过程中刻录OTP NVDS内存中的设备名称

14 posts / 0 new
最后一篇
Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
在生产过程中刻录OTP NVDS内存中的设备名称

亲爱的读者,
根据外围示例代码,我为自己的BLE外设创建了自己的供应商定义了BLE配置文件。到目前为止,我一直成功地在从OTP内存运行的独立版本中运行固件。但是,目前我必须在固件中更改每个设备的设备名称并在生产过程中重建固件。我想在生产过程中刻录OTP NVDS内存(NVDS_TAG_DEVICE_NAME)中的设备名称。但是,我在这样做是不成功的;目前尚不清楚如何正确执行此操作,并且需要设置哪些值。你能帮助我吗?

到目前为止,我得到了以下内容:
我未定义:cfg_initialize_nvds_struct;cfg_development_debug.
我定义:cfg_boot_from_otp
使用SmartSnippet将二进制文件刻录到OTP,使用SmartSnippet,OTP NVDS内存块从0x40340开始仍然为空。当我用从另一个设备的OTP NVDS存储器创建的NVDS模板内存文件填充此区域时,该区域是运行用与仍然定义CFG_INITIALIZE_NVDS_STURE的代码编写的固件(并且代替NVDS.C中的NVDS调用),那么设备不会开始广告。

问候,
韦特

设备:
Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
亲爱的对话员工,

亲爱的对话员工,
你能回答吗?
问候,
韦特

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨wouter vos,

嗨wouter vos,

对不起延迟回复,同事正在调查它,我们会尽快通知您。

谢谢mt_dialog.

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter,

你好wouter,

我为延迟道歉。请找到对您的问题的分析..

您不会能够在OTP中保存部分NVDS和代码中的另一个部分。当您在没有的情况下刻录OTP中的代码cfg_initilialize_nvds_struct.定义了你留下整个。

OTP图像中的NVDS区域为空,为您使用NVDS OTP工具刻录。您必须使用OTP NVDS选项卡(内存偏移)稍后填写该区域0x340until0x440)。那么你
将使用代码中的NVDS数据刻录图像,或者在OTP NVDS工具之后将其燃烧。

您提到的#defines是定义/ undefine的适当的内容,以便在刻录过程中从OTP引导。确保OTP标题中的应用标志均刻录为“是”,以便引导加载程序使OTP镜像发生(您可以通过检查引导加载程序是否正在通过打开UART端口来检查并检查RX TX引脚是否执行此操作切换)。

如果这有助于您解决问题,请告诉我们,或者您还有更多问题..

问候,
lc_dialog

Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
亲爱的对话框,

亲爱的对话框,
谢谢您的回答。我知道你在回复中指出的物品。不幸的是,它没有帮助我。和cfg_initilialize_nvds_struct.定义该设备按照OTP正确运行并正确靴子。但是,当我称之为这个设备A并且我刻录一个名为B的第二个设备cfg_initilialize_nvds_struct.不明确的并使用OTP NVDS工具将NVDS内存从设备A复制到设备B的空NVDS内存,设备B未启动广告。设备B的程序计数器似乎在内存位置0x805b4时进入,而设备A的程序计数器在0x20000000以上。
起初我认为广告数据可能不正确,因为USER_ADVERTISE_DATA被定义为空字符串user_config.h.。但是在通过代码筛选后,我注意到它被附加了nvds_tag_device_name.在功能中app_easy_gap_undirected_advertise_start_create_msg.app.c.) 如果user_config.是定义的user_config.h.- 在我的代码中是这种情况。
Right now I am starting to wonder if it is possible to keepcfg_initilialize_nvds_struct.定义,但离开user_device_name.空in.user_config.h.烧了nvds_tag_device_name.它手动在OTP内存中的长度(因为它是一个或存储器,并且可以将零更改为Zero,但不是另外的方式)。

我还有一些额外的问题与上述情况无直接相关:
我们将设备作为SPI从站运行,并将数据发送到主机MCU。基于中断的通信已经实现和功能。但是,目前我们必须将SPI主SPI时钟设置为1 MHz,并在字节之间添加延迟,以确保正确转移。
a)SPI模块的时钟速度是多少?时钟分频器寄存器似乎设置为零,但我不知道这代表了哪些时钟速度。
b)在结构中nvds_data_storagenvds.c睡觉 (nvds_tag_sleep_enable.)已启用并外部唤醒(nvds_tag_ext_wakeup_enable.) disabled (they are fixed). What is then the impact ofcfg_external_wakeup.cfg_mem_map_deep_sleep.在设备的睡眠和唤醒行为上?当SPI通信发生时,我希望设备醒来。目前我有睡眠定义未定义。这是否意味着设备不会睡觉?

问候,
韦特

Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
你能回答吗?

你能回答吗?
问候

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter vos,

你好wouter vos,

我正在努力查询来获得解决方案。我会尽快回复解决方案。

谢谢!为了你的耐心。

问候,

LC.

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter vos,

你好wouter vos,

首先,您可以使用设备A中的NVDS数据并将其写入设备B,假设设备B配置为NVDS工具可编程(UNDEFcfg_initialize_nvds_struct.)。而且,您将能够使用工具写入NVDS时cfg_initialize_nvds_struct.已定义,填满可用0s。如此,我们没有尝试过,并不建议在您可以在NVDS内存中有随机定义的数据进行打磨。

a)主模式下的默认时钟速度设置为2MHz。为了修改时钟速度,您需要更改CLK_PER_REG(控制外围时钟)和SPI_INIT()函数中的SPI_XTAL_FREQ_T的SPI_DIV的值(这控制SPI块时钟的频率)。

B) Based on the type of selection, the repective memory ON/OFF will be managed. If the sleep defines are undefined the device will be in active mode always. In order to waku up using SPI, you can set up the external_wakeup mode and you can wake the system whenever you receive an external interrupt.

希望这是你的问题......

问候,

LC.

Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
亲爱的LC,

亲爱的LC,
谢谢您的回答。我把它搞定了。(不幸的是,我在从NVDS内存中读取名称标记的代码中发出了错误。)

关于a)
从代码中不清楚SPI_DIV的值(无数据表可用)。你能告诉我吗?

关于b)
所以,如果我理解它。必须在NVDS内存中启用NVDS_TAG_SLEEP_ENABLE和NVDS_TAG_EXT_WAKEUP_ENABLE,CFG_MEM_MAP_EXT_SLEEP和CFG_EXTERNAL_WAKEUP必须定义,必须在唤醒引脚中定义user_peripheral_setup.h.
如果在CFG_APP中定义了外部唤醒工作da1458x_config_basic.h.?因为cfg_app定义了ble_app_present,因此External_wakeup_enable()不会被执行Arch_main.c.

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter,

你好wouter,

I am glad to hear that you are able to get it working..

a)SPI_DIV是CLK_PER_REG寄存器的零件(位8,9),其将时钟控制到系统内的不同外围设备。这将通过为其提供的值划分XTAL时钟。并且您可以提供4个不同的值来将时钟划分为1/2 / 4/8次。这是在14580的数据表中引用(在我的情况下第29页),您可以在支持网站中下载。

b)关于这个,我想知道,

你使用任何外部处理器系统或累积量吗t app on 14580 M0? Since you've mentioned about waking from SPI communication, what is that connected to? Can you please elaborate this use case.

问候,

LC.

Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
你好LC,

你好LC,
b)DA14580充当收发器,可通过SPI连接的本地MCU之间交换数据包和遥控器启用平台。因此DA14580是空闲直到本地MCU或远程平台需要发送数据。

问候,
韦特

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter,

你好wouter,

如果我理解正确,您正在使用外部MCU配置?是MCU上的应用程序,您将通过GTL接口连接到外部MCU吗?

而且,我也建议你看看ble_app_all_in_one.或者ble_app_sleepmode.在SDK中提供的项目,因为它们展示使用外部唤醒使用SleepMode唤醒,这将为您提供从OTP可选的选项,否则必须强制启用deep_sleep_mode.

而且,我不会建议在工作中arch_main文件。一般来说,你应该是albe启用deep_sleep_mode.通过配置user_config.h.文件并通过设置所需的标志来关闭OTP内存的文件。这个简单的设置应该让您使用deep_sleep_mode.

问候,

LC.

Wouter Vos.
离线
最后一次露面:4年6个月前
加入:2016-02-18 15:45
你好LC,

你好LC,
I think I created a hybrid version; on the bluetooth module a stand-alone app is running that manages the connection and the SPI interface. The SPI interface is only used to send and receive data that respectively was received or needs to be sent over the air. This means that I have CF_APP defined inda1458x_config_basic.h.因此ble_app_present。
我不清楚我需要定义和未定义。

问候,
韦特

lc_dialog
离线
最后一次露面:2 weeks 3 days ago
职员
加入:2016-09-19 23:20
你好wouter,

你好wouter,

If I understood correctly, you have a single processor system only. So in a single processor system, you don't have to worry about CFG_EXTERNAL_WAKEUP, NVDS_TAG_EXT_WAKEUP_ENABLE and ext_wakeup_enable(). These are only intented for external processor configuration.

在您的单个处理器Configuratoin中,您必须在Config.h中启用睡眠模式类型(Deep_sleep或Extended_sleep)。启用各自的GPIO用于按钮按下按钮,并在检测按钮时设置回调函数。请参阅此支持门户网站上的项目BLE_APP_SLEEPMODE和用户手册文档UM-B-006。该项目设置了几个回拨功能,以便按下按钮,按下该按钮必须完成的内容。如果您在这方面有其他问题,请告诉我。

问候,

LC.