亲爱的读者,
我已经创建了自己的供应商定义保佑概要文件为我的保佑外围,基于外围示例代码。到目前为止,我已成功地运行一个独立的版本的固件运行OTP存储器。但是,现在我必须改变每个设备的固件的设备名称和重建固件在生产过程中。我想烧OTP nvd内存的设备名称(NVDS_TAG_DEVICE_NAME)在生产过程中。然而,我一直在这样做不成功;目前尚不清楚如何正确做到这一点,需要设置值。你能帮帮我吗?
到目前为止我有以下几点:
我未定义:CFG_INITIALIZE_NVDS_STRUCT;CFG_DEVELOPMENT_DEBUG
我定义:CFG_BOOT_FROM_OTP
当我燃烧的二进制的OTP正确使用SmartSnippets OTP头,OTP nvd内存块从0 x40340仍然是空的。当我填补这个领域创建一个nvd模板十六进制文件与另一个设备的OTP nvd内存运行固件CFG_INITIALIZE_NVDS_STRUCT还写代码中定义(nvd stuct nvd。c是代替),那么该设备不会开始广告。
问候,
Wouter
设备:
亲爱的员工对话框,
你能回答吗?
问候,
Wouter
嗨Wouter Vos,
对不起延迟反应,一个同事正在调查它,我们将尽快让你知道。
由于MT_dialog
你好Wouter,
很抱歉延迟。请查收我们的分析你的问题. .
你习惯能够保持的nvd OTP的一部分,另一部分在你的代码。当你OTP中的代码没有燃烧CFG_INITILIALIZE_NVDS_STRUCT你把整个定义。
OTP nvd区域图像空nvd OTP工具为你燃烧。你需要填写这个区域后通过使用OTP nvd选项卡(内存所抵消0 x340直到0 x440)。所以你
将不得不与nvd燃烧图像数据在代码中或燃烧之后的OTP nvd工具。
#定义你提到是适当的定义/未定义为了从OTP在燃烧过程中引导。确保应用程序在OTP头都烧国旗是为了引导装载程序实现OTP镜(你可以检查这仅仅通过检查如果引导装载程序执行打开UART港口和检查如果RX TX针连接)。
请让我们知道如果这帮你解决问题或如果你有更多的问题……
问候,
LC_Dialog
亲爱的对话框,
谢谢你的回答。我知道你指出的你的回复。不幸的是,它不帮助我。与
CFG_INITILIALIZE_NVDS_STRUCT
定义该设备按预期和靴子从OTP正确地运行。然而,当我把这个设备,我烧一个设备称为BCFG_INITILIALIZE_NVDS_STRUCT
未定义的并复制nvd记忆装置的空nvd记忆装置B使用OTP nvd工具,设备B不开始广告。设备的程序计数器B似乎在内存位置0 x805b4,而设备的程序计数器是介于0 x20000000。起初我以为广告的数据可能是不正确的,因为
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
——这是我的代码的情况。现在我开始想能否保持
CFG_INITILIALIZE_NVDS_STRUCT
定义的,但离开USER_DEVICE_NAME
空的user_config.h
和燃烧NVDS_TAG_DEVICE_NAME
手动及其长度的OTP存储器(因为它是一个可以改变或内存和0的,但不是相反)。我有一些额外的问题没有直接关系到上图:
我们有设备运行作为SPI奴隶和从一个主机单片机发送数据。基于中断通信和功能已经实现。但是,当前我们必须设置下面的SPI主SPI时钟1 MHz并添加字节之间的延迟,以确保正确的转移。
一)SPI模块的时钟速度是多少?时钟分频器注册似乎被设置为零,但我不知道这代表了时钟速度。
B)结构
nvds_data_storage
在nvds.c
睡眠(NVDS_TAG_SLEEP_ENABLE
和外部唤醒(启用)NVDS_TAG_EXT_WAKEUP_ENABLE
)禁用(它们是固定的)。然后的影响是什么CFG_EXTERNAL_WAKEUP
和CFG_MEM_MAP_DEEP_SLEEP
在设备的睡眠和唤醒行为?我想醒来当SPI通信发生的设备。目前我有睡眠定义定义。这是否意味着该设备不睡觉?问候,
Wouter
你能回答吗?
问候
你好Wouter Vos,
我在你的查询来获得一个解决方案。我将尽快回复您的解决方案。
谢谢你!对你的耐心。
问候,
信用证
你好Wouter Vos,
首先,您可以使用nvd数据从设备并将它写入设备配置假设设备B nvd工具可编程(undefCFG_INITIALIZE_NVDS_STRUCT)。,您将能够编写nvd时使用的工具CFG_INITIALIZE_NVDS_STRUCT定义,填充可用的0。这一点,我们没有试过,不建议这样做你可能终结有随机nvd内存中的数据定义。
一)在主模式下默认时钟速度设置为2 mhz。为了修改时钟速度需要更改的值在CLK_PER_REG SPI_DIV(控制外围时钟)和SPI_XTAL_Freq_t spi_init()函数(这SPI块时钟的频率控制)。
B)基于类型的选择、记忆开/关管理背景不同而存在差异。如果睡眠定义了未定义的设备将在主动模式。为了waku使用SPI,你可以设置external_wakeup模式,当你收到一个外部中断唤醒系统。
希望这anweres你的问题…
问候,
信用证
亲爱的信用证,
谢谢你的回答。我明白了我想要工作。(不幸的是,我犯了一个错误代码,从nvd内存中读取标签名称)。
关于一个)
目前还不清楚从代码SPI_DIV的值是什么意思(没有可用的数据表)。你能告诉我吗?
关于B)
如果我的理解正确。NVDS_TAG_SLEEP_ENABLE和NVDS_TAG_EXT_WAKEUP_ENABLE必须启用nvd内存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
。你好Wouter,
我很高兴听到你能得到它的工作. .
)SPI_DIV是(比特8、9)的一部分CLK_PER_REG寄存器控制时钟系统中不同的外围设备。这将把晶体时钟通过您提供的价值。你可以提供4种不同的值时钟除以1 / 2 / 4/8乘以。这是14580年的数据表中引用(第29页就我而言),你可以在支持网站下载。
关于这个,我想知道,
你使用任何外部处理器系统或应用程序驻留在14580 M0 ?既然你提到从SPI通信醒来,那是什么连接?你能详细描述这个用例。
问候,
信用证
你好,信用证,
B) DA14580作为收发器之间交换数据包当地单片机通过SPI和远程连接,蓝牙的平台。所以DA14580空转,直到当地单片机或远程平台需要发送数据。
问候,
Wouter
你好Wouter,
如果我理解正确的话,你使用一个外部的单片机配置吗?应用单片机和你连接到外部单片机GTL接口?
我也推荐你看ble_app_all_in_one或ble_app_sleepmodeSDK提供的项目,因为他们展示使用sleepmode唤醒使用外部唤醒,这将给你一个选项来从OTP否则强制启用可选deep_sleep_mode。
我不推荐的工作arch_main文件。一般来说你应该再启用deep_sleep_mode通过配置的user_config.h文件并运行应用程序的OTP存储器通过设置所需的旗帜。这个简单的设置应该让你使用deep_sleep_mode。
问候,
信用证
你好,信用证,
我认为我创建了一个混合动力版;蓝牙模块上的一个独立的应用程序正在运行,管理和SPI接口的连接。SPI接口仅用于发送和接收数据,分别收到或需要通过空气发送。这意味着我有CF_APP中定义
da1458x_config_basic.h
因此BLE_APP_PRESENT。目前还不清楚我需要定义和定义。
问候,
Wouter
你好Wouter,
如果我理解正确的话,你有一个单处理器系统。所以在一个单处理器系统中,你不必担心CFG_EXTERNAL_WAKEUP, NVDS_TAG_EXT_WAKEUP_ENABLE和ext_wakeup_enable ()。这些只是打算为外部处理器配置。
在单处理器configuratoin,您必须在配置中启用睡眠模式的类型。h (deep_sleep或extended_sleep)。使各自的gpio exterrnal输入按钮按下,在检测按钮按下设置一个回调函数。请参考项目ble_app_sleepmode和可用的用户手册文档嗯- b - 006支持门户。项目设置几回调函数来检测按钮按下,必须做些什么当按钮被按下。请让我知道如果你在这方面有进一步的问题。
问候,
信用证