我有一个自定义板,我适用于我的应用程序的示例ble_app_all_in_one。我使用ARCH_EXT_SLEEP_OTP_COPY_ON。到目前为止,一切都适用,但是当我禁用cfg_development_debug时,设备一直在几秒钟后一直重新启动。
对可能发生的事情有任何提示吗?
嗨,螺旋,
此宏支持开发/调试模式。对于生产模式,必须禁用它。请在调试模式下定义此宏并运行代码。您的固件是否会崩溃?
谢谢,PM_Dialog
是的,当我定义这个宏一切工作(没有崩溃)。
我想在生产模式下禁用它,但大约两秒钟后它崩溃并重新启动——但只有当我把它刻录到Flash时,而不是当我在调试器中运行它时。
我在OTP中刻录了引导加载程序。
那么,你打算燃烧OTP并从那里启动吗?启用CFG_Development_debug时,它允许将OTP镜像仿真到系统RAM。你能澄清你在OTP中刻录哪个引导加载程序吗?如果将睡眠配置更改为Arch_ext_sleep_on,您还在面临同一问题吗?
我们的HW制造商烧毁了一个引导加载程序在OTP,我们从那里引导,在flash中没有引导加载程序。不幸的是,我不知道它到底是哪个引导加载程序,但我怀疑它是相当标准的(但可能是一个较老的SDK?)
当我使用ble_app_all_in_one时也会发生这个问题。我只是添加了一个LED输出来查看FW何时运行,何时重启……启用CFG_DEVELOPMENT_DEBUG后,所有工作都很好。但是当我禁用CFG_DEVELOPMENT_DEBUG时,它每5秒重新启动一次。如果我通过BLE快速连接,在5秒之前,它不会重启,只要我保持连接。当我断开连接后,几秒钟后它会重新启动。
这发生在ARCH_EXT_SLEEP_OTP_COPY_ON和ARCH_EXT_SLEEP_ON…
能分享一下你做了哪些修改吗?请尝试使用没有睡眠模式的ble_app_barebone SDK示例,并且CFG_DEVELOPMENT_DEBUG未定义。当从Flash启动时,你有同样的问题吗?请尝试从系统ram引导。
我对ble_app_all_in_one项目和ble_app_barebone所做的唯一修改是将这些行添加到user_peri_setup .c GPIO_reservations()和set_pad_functions()以关闭面板led。引导加载程序将所有三个led都打开,因此我可以通过led的状态看到何时发生重新启动。
的#define GPIO_RED_LED_PORT GPIO_PORT_0的#define GPIO_RED_LED_PIN GPIO_PIN_2的#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);保留_GPIO(LED,GPIO_GREEN_LED_PORT,GPIO_GREEN_LED_PIN,PID_GPIO);保留_GPIO(LED,GPIO_BLUE_LED_PORT,GPIO_BLUE_LED_PIN,PID_GPIO);gpio_configurepin(gpio_red_led_port,gpio_red_led_pin,输出,pid_gpio,true);GPIO_CONFIGUREPIN(GPIO_GREEN_LED_PORT,GPIO_GREEN_LED_PIN,输出,PID_GPIO,TRUE);gpio_configurepin(gpio_blue_led_port,gpio_blue_led_pin,输出,pid_gpio,true);
问题:
您有定制董事会,或者您正在使用我们的任何开发套件?由于两个项目都在活动模式下工作并具有CFG_Development_Debug未定义,因此问题可能与睡眠模式有关。您使用哪个时钟作为低功耗时钟?
是的,显然问题与睡眠模式有关。
如上所述,在定制板上发生了问题。定制板有OTP刻录。
我也有一个基本的开发工具包,那里的问题没有发生,而且OTP也没有烧毁那里。
我的OTP头说睡眠时钟源=外部晶体。HW文档也证实了32k振荡器被用作延长睡眠模式的时钟。也许我在我的应用程序中没有正确配置?检查什么?
当然,我可以刻录SPI闪光灯,但是如果我将引导加载程序刻录到闪存,而OTP也刻录,它会在Flash中使用Bootloader吗?似乎没有,我今天也测试过。当我将引导加载程序刻录到闪存时,问题也会发生。
当我下载固件通过Keil,通过调试器。使用调试器时不会发生此问题。有没有办法下载固件通过Keil然后分离调试器?
好的,我已经在arch_main.c中追踪到以下两行:
SetBits16 (SYS_CTRL_REG DEV_PHASE 1);retained_ram_blocks = ret_mode;
如果存在这些,就像定义DEVELOPMENT_DEBUG时一样,则不会出现崩溃/重新引导。
根据DA14585数据表,sys_ctrl_reg的dev_phase位字段设置开发阶段模式。如果该位与OTP_Copy位组合设置,则OTP DMA将使OTP镜像映射到系统RAM。没有实际写入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
是的,当我定义这个宏一切工作(没有崩溃)。
我想在生产模式下禁用它,但大约两秒钟后它崩溃并重新启动——但只有当我把它刻录到Flash时,而不是当我在调试器中运行它时。
我在OTP中刻录了引导加载程序。
嗨,螺旋,
那么,你打算燃烧OTP并从那里启动吗?启用CFG_Development_debug时,它允许将OTP镜像仿真到系统RAM。你能澄清你在OTP中刻录哪个引导加载程序吗?如果将睡眠配置更改为Arch_ext_sleep_on,您还在面临同一问题吗?
谢谢,PM_Dialog
我们的HW制造商烧毁了一个引导加载程序在OTP,我们从那里引导,在flash中没有引导加载程序。不幸的是,我不知道它到底是哪个引导加载程序,但我怀疑它是相当标准的(但可能是一个较老的SDK?)
当我使用ble_app_all_in_one时也会发生这个问题。我只是添加了一个LED输出来查看FW何时运行,何时重启……启用CFG_DEVELOPMENT_DEBUG后,所有工作都很好。但是当我禁用CFG_DEVELOPMENT_DEBUG时,它每5秒重新启动一次。如果我通过BLE快速连接,在5秒之前,它不会重启,只要我保持连接。当我断开连接后,几秒钟后它会重新启动。
这发生在ARCH_EXT_SLEEP_OTP_COPY_ON和ARCH_EXT_SLEEP_ON…
嗨,螺旋,
能分享一下你做了哪些修改吗?请尝试使用没有睡眠模式的ble_app_barebone SDK示例,并且CFG_DEVELOPMENT_DEBUG未定义。当从Flash启动时,你有同样的问题吗?请尝试从系统ram引导。
谢谢,PM_Dialog
我对ble_app_all_in_one项目和ble_app_barebone所做的唯一修改是将这些行添加到user_peri_setup .c GPIO_reservations()和set_pad_functions()以关闭面板led。引导加载程序将所有三个led都打开,因此我可以通过led的状态看到何时发生重新启动。
问题:
嗨,螺旋,
您有定制董事会,或者您正在使用我们的任何开发套件?由于两个项目都在活动模式下工作并具有CFG_Development_Debug未定义,因此问题可能与睡眠模式有关。您使用哪个时钟作为低功耗时钟?
谢谢,PM_Dialog
是的,显然问题与睡眠模式有关。
如上所述,在定制板上发生了问题。定制板有OTP刻录。
我也有一个基本的开发工具包,那里的问题没有发生,而且OTP也没有烧毁那里。
我的OTP头说睡眠时钟源=外部晶体。HW文档也证实了32k振荡器被用作延长睡眠模式的时钟。也许我在我的应用程序中没有正确配置?检查什么?
当然,我可以刻录SPI闪光灯,但是如果我将引导加载程序刻录到闪存,而OTP也刻录,它会在Flash中使用Bootloader吗?似乎没有,我今天也测试过。当我将引导加载程序刻录到闪存时,问题也会发生。
当我下载固件通过Keil,通过调试器。使用调试器时不会发生此问题。有没有办法下载固件通过Keil然后分离调试器?
好的,我已经在arch_main.c中追踪到以下两行:
如果存在这些,就像定义DEVELOPMENT_DEBUG时一样,则不会出现崩溃/重新引导。
嗨,螺旋,
根据DA14585数据表,sys_ctrl_reg的dev_phase位字段设置开发阶段模式。如果该位与OTP_Copy位组合设置,则OTP DMA将使OTP镜像映射到系统RAM。没有实际写入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