我有一个自定义板,在那里我为我的应用程序改编了示例ble_app_all_in_one。我使用ARCH_EXT_SLEEP_OTP_COPY_ON。到目前为止一切正常,但是当我禁用CFG_DEVELOPMENT_DEBUG时,设备会在几秒钟后一致地重新启动。
任何暗示可能正在发生的内容?
嗨螺旋,
这个宏启用开发/调试模式。对于生产模式构建,必须禁用它。请定义此宏并在调试模式下运行代码。你的固件会崩溃吗?
谢谢,PM_DIALOG.
是的,当我定义此宏时,所有操作都有效(无崩溃)。
我想为生产模式禁用它,但后来它在大约两秒钟后崩溃并重新启动 - 但只有当我将其刻录到闪存时,就不会在调试器中运行它时。
我在OTP中刻录了引导加载程序。
所以,你打算烧掉OTP然后从那里启动吗?当启用CFG_DEVELOPMENT_DEBUG时,它允许将OTP镜像模拟到System RAM。你能澄清一下你在OTP中烧毁了哪个引导程序吗?如果您将睡眠配置更改为ARCH_EXT_SLEEP_ON,您是否仍然面临同样的问题?
我们的HW制造商在OTP中刻录了一个引导加载程序,我们从那里启动,闪存中没有引导加载程序。不幸的是,我不知道它是哪个引导加载程序,但我怀疑它是漂亮的标准(但也许是一个较旧的SDK?)......
当我使用ble_app_all_in_one时,问题也会发生。我只添加了一个LED输出,看看FW何时运行,它何时重新启动...使用CFG_Development_debug启用所有工作效果很好。但是,当我禁用CFG_DEVELIMENT_DEBUG时,它每隔5秒重新启动一次。如果我通过BLE Quicky连接,在5秒之前,只要我保持连接,它就不会重启。一旦我断开连接,几秒钟后会重新启动。
这与ARCH_EXT_SLEEP_OTP_COPY_ON以及ARCH_EXT_SLEEP_ON ...
你能分享你所做的修改吗?请尝试使用SDK的BLE_APP_BAREBONE示例而无需休眠模式,并将CFG_DEVELVELMMENT_DEBUG未定义。从Flash启动时,您是否有同样的问题?请尝试从System-RAM启动。
我对BLE_APP_ALL_IN_ONE项目的唯一修改以及BLE_APP_BAREBONE正在将这些行添加到user_periph_setup.c gpio_reservations()和set_pad_functions()以关闭电路板LED。Bootloader打开所有三个LED,因此我可以看到重新启动时LED的状态发生。
#define GPIO_RED_LED_PORT GPIO_PORT_0 #define GPIO_RED_LED_PIN gpio_pin2 #define GPIO_GREEN_LED_PORT GPIO_PORT_2 #define GPIO_GREEN_LED_PIN GPIO_PIN_5 #define GPIO_BLUE_LED_PORT GPIO_PORT_2 #define GPIO_BLUE_LED_PIN GPIO_PIN_9 RESERVE_GPIO(LED, GPIO_RED_LED_PORT, GPIO_RED_LED_PIN, PID_GPIO)Reserve_gpio (led, gpio_green_led_port, gpio_green_led_pin, pid_gpio);Reserve_gpio (led, gpio_blue_led_port, gpio_blue_led_pin, pid_gpio);GPIO_ConfigurePin(GPIO_RED_LED_PORT, GPIO_RED_LED_PIN, OUTPUT, PID_GPIO, true);GPIO_ConfigurePin(GPIO_GREEN_LED_PORT, GPIO_GREEN_LED_PIN, OUTPUT, PID_GPIO, true);GPIO_ConfigurePin(GPIO_BLUE_LED_PORT, GPIO_BLUE_LED_PIN, OUTPUT, PID_GPIO, true);
问题:
你有定制板吗,或者你正在使用我们的开发套件?由于这两个项目都在活动模式下工作,并且CFG_DEVELOPMENT_DEBUG未定义,我猜问题可能与睡眠模式有关。你使用哪个时钟作为低功率时钟?
是的,很明显这个问题与睡眠模式有关。
问题发生在定制板上,如上所述。定制板上的OTP被烧毁了。
我还有一个基本的开发套件,有问题不会发生,但OTP也没有在那里烧毁。
我的OTP标题表示睡眠时钟源=外部水晶。HW文档还确认32K辅助器用作扩展睡眠模式的时钟。也许我在应用程序中没有正确配置?检查什么?
当然我可以烧SPI flash,但如果我烧引导加载程序到flash和OTP也烧,它会使用flash中的引导加载程序吗?看来不是,我今天也试过了。当我将引导加载程序刻录到Flash时也会发生这个问题。
当我通过调试器下载通过keil的固件。使用调试器时不会发生问题。是否有任何方法可以通过keil下载固件,然后分离调试器?
好的,我已经将其追溯到Arch_Main.c中的以下两行:
setbits16(sys_ctrl_reg,dev_phase,1);保留_ram_blocks = ret_mode;
如果存在这些,就像定义了Developing_debug时,没有崩溃/重启。
根据DA14585 datasheet, SYS_CTRL_REG的DEV_PHASE位域设置开发阶段模式。如果设置了这个位,结合OTP_COPY位,OTP DMA将模拟系统RAM的OTP镜像。没有实际写入RAM,但花费的时间与镜像发生的时间完全相同。这是为了模仿行为,就好像系统代码已经在OTP中了,镜像在唤醒后发生,但是(开发)代码仍然驻留在外部源中。如果这个位被设置为'0'并且OTP_COPY='1',那么OTP DMA将在唤醒时实际执行OTP镜像。
因此,在具有开发阶段模式时,代码在所有情况下都正确运行?
是的,这就是我上面所说的。是的,我读过数据表。
谢谢您的指示。
问候,PM_Dialog
有什么消息吗?你认为我应该在产品版本中启用这个标志吗??对我来说,这个问题还没有解决。这充其量是一种变通方法。
您是否在BLE_APP_ALL_IN_ONE项目中完成了任何其他修改?默认SDK在广告期间使用OTP副本使用扩展睡眠模式。请检查user_app_adv_start()。如果您有cfg_development_debug,我假设您应该刻录OTP。但是,请注意,OTP代表一个时间可编程,因此您无法多次擦除并重新编写OTP,但您只能将仍设置为0的位并将其转换为1。
嗨螺旋,
这个宏启用开发/调试模式。对于生产模式构建,必须禁用它。请定义此宏并在调试模式下运行代码。你的固件会崩溃吗?
谢谢,PM_DIALOG.
是的,当我定义此宏时,所有操作都有效(无崩溃)。
我想为生产模式禁用它,但后来它在大约两秒钟后崩溃并重新启动 - 但只有当我将其刻录到闪存时,就不会在调试器中运行它时。
我在OTP中刻录了引导加载程序。
嗨螺旋,
所以,你打算烧掉OTP然后从那里启动吗?当启用CFG_DEVELOPMENT_DEBUG时,它允许将OTP镜像模拟到System RAM。你能澄清一下你在OTP中烧毁了哪个引导程序吗?如果您将睡眠配置更改为ARCH_EXT_SLEEP_ON,您是否仍然面临同样的问题?
谢谢,PM_DIALOG.
我们的HW制造商在OTP中刻录了一个引导加载程序,我们从那里启动,闪存中没有引导加载程序。不幸的是,我不知道它是哪个引导加载程序,但我怀疑它是漂亮的标准(但也许是一个较旧的SDK?)......
当我使用ble_app_all_in_one时,问题也会发生。我只添加了一个LED输出,看看FW何时运行,它何时重新启动...使用CFG_Development_debug启用所有工作效果很好。但是,当我禁用CFG_DEVELIMENT_DEBUG时,它每隔5秒重新启动一次。如果我通过BLE Quicky连接,在5秒之前,只要我保持连接,它就不会重启。一旦我断开连接,几秒钟后会重新启动。
这与ARCH_EXT_SLEEP_OTP_COPY_ON以及ARCH_EXT_SLEEP_ON ...
嗨螺旋,
你能分享你所做的修改吗?请尝试使用SDK的BLE_APP_BAREBONE示例而无需休眠模式,并将CFG_DEVELVELMMENT_DEBUG未定义。从Flash启动时,您是否有同样的问题?请尝试从System-RAM启动。
谢谢,PM_DIALOG.
我对BLE_APP_ALL_IN_ONE项目的唯一修改以及BLE_APP_BAREBONE正在将这些行添加到user_periph_setup.c gpio_reservations()和set_pad_functions()以关闭电路板LED。Bootloader打开所有三个LED,因此我可以看到重新启动时LED的状态发生。
问题:
嗨螺旋,
你有定制板吗,或者你正在使用我们的开发套件?由于这两个项目都在活动模式下工作,并且CFG_DEVELOPMENT_DEBUG未定义,我猜问题可能与睡眠模式有关。你使用哪个时钟作为低功率时钟?
谢谢,PM_DIALOG.
是的,很明显这个问题与睡眠模式有关。
问题发生在定制板上,如上所述。定制板上的OTP被烧毁了。
我还有一个基本的开发套件,有问题不会发生,但OTP也没有在那里烧毁。
我的OTP标题表示睡眠时钟源=外部水晶。HW文档还确认32K辅助器用作扩展睡眠模式的时钟。也许我在应用程序中没有正确配置?检查什么?
当然我可以烧SPI flash,但如果我烧引导加载程序到flash和OTP也烧,它会使用flash中的引导加载程序吗?看来不是,我今天也试过了。当我将引导加载程序刻录到Flash时也会发生这个问题。
当我通过调试器下载通过keil的固件。使用调试器时不会发生问题。是否有任何方法可以通过keil下载固件,然后分离调试器?
好的,我已经将其追溯到Arch_Main.c中的以下两行:
如果存在这些,就像定义了Developing_debug时,没有崩溃/重启。
嗨螺旋,
根据DA14585 datasheet, SYS_CTRL_REG的DEV_PHASE位域设置开发阶段模式。如果设置了这个位,结合OTP_COPY位,OTP DMA将模拟系统RAM的OTP镜像。没有实际写入RAM,但花费的时间与镜像发生的时间完全相同。这是为了模仿行为,就好像系统代码已经在OTP中了,镜像在唤醒后发生,但是(开发)代码仍然驻留在外部源中。如果这个位被设置为'0'并且OTP_COPY='1',那么OTP DMA将在唤醒时实际执行OTP镜像。
因此,在具有开发阶段模式时,代码在所有情况下都正确运行?
谢谢,PM_DIALOG.
是的,这就是我上面所说的。是的,我读过数据表。
嗨螺旋,
谢谢您的指示。
问候,PM_Dialog
有什么消息吗?你认为我应该在产品版本中启用这个标志吗??对我来说,这个问题还没有解决。这充其量是一种变通方法。
嗨螺旋,
您是否在BLE_APP_ALL_IN_ONE项目中完成了任何其他修改?默认SDK在广告期间使用OTP副本使用扩展睡眠模式。请检查user_app_adv_start()。如果您有cfg_development_debug,我假设您应该刻录OTP。但是,请注意,OTP代表一个时间可编程,因此您无法多次擦除并重新编写OTP,但您只能将仍设置为0的位并将其转换为1。
谢谢,PM_DIALOG.