DA1468X延长睡眠 - 呼吸定时器和LED

了解更多常见问题解答教程

17个帖子/ 0新
最后一篇
bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
DA1468X延长睡眠 - 呼吸定时器和LED

您好

由于Free_rtos的空闲任务,我愿意将我的设备延长睡眠。到目前为止,我面临着一些问题。

我的代码基于对话框的示例代码。系统启动,Freertos正在启动,已正确加载任务。

我正在在主要任务中运行一个循环,我确实闪烁了LED以检查系统是否存在并执行1秒睡眠。

我可以追踪系统,直到正确执行WFI。此时,呼吸定时器已关闭,LED关闭。

在WFI的出口处,呼吸计时器不会唤醒。

Currently breath_config breath_cfg, hw_led_set_ledX_src(...), hw_breath_init(&breath_cfg); and hw_breath_enable(); are all located in prvSetupHardware. If I do put any of these in periph_init, no led light up at all even in active or idle mode.

你能告诉我吗?

- 呼吸计时器的初始顺序是什么?

- 休眠期间保留呼吸定时器寄存器?

- that Breath timer state and dependencies are being managed by current firmware ?

调试此类案例的步骤是什么?

先感谢您

最好的祝福

Keywords:
设备:
pw_dialog.
离线
最后一次露面:4 days 21 hours ago
员工
加入:2019-04-03 02:54
嗨,

嗨,

我可以知道哪个示例代码是基于的代码,以及您的修改是什么?您是否正在实现用于为外部LED进行自动呼吸功能的功能?

对于LED的呼吸功能,以下代码显示示例:

呼吸_config config = {
.dc_min = dc_min,
.dc_max = dc_max,
.dc_step = dc_step,
.freq_div = freq_div,
.polarity = hw_breath_pwm_pol_pos.
};

/*
*设置呼吸定时器配置,因此硬件可以自动驱动LED。
* /
hw_breath_init(&config);

/*
*设置LED1输出由定时器驱动。
* /
hw_led_set_led1_src(HW_LED_SRC1_BREATH);
hw_led_enable_led1(真实);

/*
*Then start breath timer.
* /
hw_breath_enable();

更多详细信息可以在SDK的Peripherals_Demo中找到。

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

我的代码基于freertos_retarget源代码。

我正准确使用你给了我

静态void prvsetuphardware(void)
{
// Activate Interrupts

....

呼吸_config呼吸_cfg = {

.dc_min = 9,//灯功率 - 1
.dc_max = 10, // light power is set to 10/255
.dc_step = 255,
.freq_div = 255,
.polarity = hw_breath_pwm_pol_pos.
};

/ * init硬件(OTPC,Cache,ADC,DCDC,USB焊盘,RF,适配器,公共汽车,设备,看门狗)* /
pm_system_init(periph_init);

// Init Interrupt Controller
hw_wkup_init(&wkup_cfg);

//配置LED1,红色
hw_led_set_led1_src(HW_LED_SRC1_BREATH);
hw_led_enable_led1(false);
//配置LED2,绿色
hw_led_set_led2_src(hw_led_src2_breath);
hw_led_enable_led2(true);
// configure LED3, Blue
hw_led_set_led3_src(hw_led_src3_breath);
hw_led_enable_led3(false);
//配置RGB LED所需的呼吸计时器
hw_breath_init(&zerate_cfg);
hw_breath_enable();

}

If I do put the previous code in periph_init, no led is light up.

从Extended_sleep唤醒后留下留下。

先感谢您

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
它似乎比

它似乎比the LED.

在睡眠前:WFI和PM_SYSTEM_WAKE_UP 0x50000066 = 0x2之后0x50000066 = 0x3。

数据表指出安全启动(我正在使用WatchDog测试生产模式,但尚未安全启动)。

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
New Hint 0x500030D0=0 before

其他提示0x500030D0 = 0睡前,0x500030d0 = 1睡眠。唤醒后,似乎此功能不会正确恢复。

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
Next Hint is 0x50000022 =

下一个提示是睡眠前的0x50000022 = 0x54b7,睡眠后0x54b6。RC16在延长睡眠期间停止,而不是在它之后再次启动。DCDC依靠它在运营期间被杀死。(0x5000002A = 0x20D2睡眠后:1V8和1V8P下)

我试图将系统放在DG_CONFIGUSE_DCDC = 0中以停止使用DCDC。

As a result 0x50000022 = 0xE7D3 before and after sleep. I have no more crashes after sleep.

But I still have no LED

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
新提示。呼吸计时器

新提示。LED_CONTROL_REG正在被SYS_TCS删除。如果y在periph_init中设置了LED源,那么它们被Sys_tcs在启动和唤醒时擦除。

I am not using OTP, why would this register be the only one set by sys_tcs at these 2 moments ?

While looking at Appendix H of UM-B-044, it seems that the LED_CONTROL_REG is being used during production.

您能否在DA14683上运行的Freertos_Retarget示例代码查看此功能?

Up to now I can not use sleep mode. Energy is critical for my product.

谢谢

PM_DIALOG.
离线
最后一次露面:13小时7分钟前
员工
加入:2018-02-08 11:03
嗨鲍勃,

嗨鲍勃,

您可以尝试在使用睡眠模式的SDK的任何一个BLE示例中实现它吗?您如何测试设备无法入睡?还有,这是您在Periph_init中的配置?

谢谢,PM_DIALOG.

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

我没有时间使用我的原型使用。BSP现在非常大,所以这种集成已经搬走,因为蓝牙不在我们最低可行的产品中。

Periph_Init目前只有GPIOS / OUT配置,GPIO高/低,在执行期间固定,现在呼吸计时器初始化。

I managed to get extended sleep working:

- 禁用DCDC

- >你能告诉我为什么RC16在睡眠期间停止,而不是重新开始?

- 通过从电源管理中删除sys_tcs。

- >您能否向我确认如何使用重置值(0x80)停止从OTP重新加载LED_CONTROL_REG?(在定制板上的DA14683,OTP从未使用过)

- 通过移动呼吸计时器init / config在periph_init中

- > LED在睡眠期间关闭。结果,我只能在执行时间期间使用LED。

- 在主任务中使用一个简单的循环

如果我要加载比主循环更多的代码,我确实得到了各种崩溃/麻烦:

- If I use hw_i2c

- >硬故障。(我需要移动到AD_I2C唤醒后重新加载控制器状态)。

- 如果UART在CPU即将入睡或睡眠时收到数据(我认为外部调制解调器发送时钟更新)

- >在UART中断处理程序中断,位于hw_uart_int_busy_detected。我可以看到代码中的rbr_thr_dll相关的注释。如果你在这里有任何想法,我会很高兴。

- the UART misses some communications with the external modem so my app does not behave properly.

- >我确实在这里需要硬件流量,但我的硬件不太好。如果您对UART的硬件流控制有异步通信的参考实现,我会很高兴。我目前在与外部调制解调器通信时,我目前在线程中调用ad_uart_read等待数据,但似乎它似乎错过了一些字节。

可能更多的麻烦是睡眠功能。到目前为止,我无法以可靠的方式使用它。

先感谢您

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

I moved my code from hw_i2c to ad_i2c. I have no more issues on this side.

在UART方面,

- I disabled level shifters that serve my external modem during the sleep period so I have no message coming in during sleep. This does not change anything.

- I used a JTAG probe to check the context of that break. It seems that the issue is related to uart console because my code does not use async communication so no IRQ is generated on the UART I use to communicate with my external modem. The only IRQ I get are from console service.

你能解决这个问题吗?following ?

- 唤醒后RC16 / DCDC关闭

- SYS_TCS从OTP重新加载值时,在没有使用OTP时

- __brk中的控制台服务中断结尾

先感谢您

PM_DIALOG.
离线
最后一次露面:13小时7分钟前
员工
加入:2018-02-08 11:03
嗨鲍勃,

嗨鲍勃,

对不起,但我很困惑。我强烈建议您不要修改SDK文件。HW_I2C是低级驱动器(LLD),AD_I2C是I2C的适配器。我强烈建议使用适配器E建议使用适配器来访问硬件外围设备,因为不仅提供对外围设备的访问权限,还要确保当前访问它的其他任务,直到外围设备暂停其操作再次发布。因此,如果另一个任务在同一时间访问相同的外围设备,则不必担心。此外,在睡眠模式下,所有外围块都断电。

谢谢,PM_DIALOG.

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
你能解决这个问题吗?

您好

Can you please have a look at the following ?

1.控制台服务在__brk中生成UART中断结尾。这一问题就在激活延长睡眠时发出。

Hardfault Analysis:

- LR指向UART_INTRUPT_HANDLER(HW_UART1),用于控制台服务。

- PC point to CONFIG_UART_IGNORE_BUSY_DETECT case in void UART_Interrupt_Handler(HW_UART_ID uart)

我尝试使用no dma配置为UART。没有变化。

2. sys_tcs在没有使用OTP时从OTP重新加载值。解决此问题以避免修改BSP文件。

- See my previous analysis. I could figure out using a JTAG probe that LED_CONTROL_REG is the only register reloaded by sys_tcs_apply(tcs_system); functions. Reloaded value is 0x80. It clear retained state of my leds.

3.唤醒后RC16 / DCDC关闭。LDO可以执行作业,直到延长睡眠可以与DCDC一起使用。

在这里,我只看到睡眠前/睡眠前/后RC16位进入零,永远不会返回到1.在DS V3.1规范中,第6章,DCDC依赖于RC16,因此唤醒后它不能还活着。

先感谢您

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

新的硬故障:在睡眠发生后,我在AD_GPADC_READ()中获得一个新的一个。我检查了GPADC寄存器,它们处于重置状态。

你能证实吗?

- 睡眠模式后,所有适配器都已测试?

- I can have adapter "open" function in constructors ?

- 在正常操作期间,我不需要再次调用“打开”。(这包括唤醒后)?

先感谢您

PM_DIALOG.
离线
最后一次露面:13小时7分钟前
员工
加入:2018-02-08 11:03
Hi bob,

Hi bob,

I am really confused for the changes that you have done.

  1. 不得修改适配器和LLD驱动程序等SDK文件。
  2. 所有适配器都经过测试
  3. 在使用适配器之前,您应该初始化和关闭它们。
  4. Regarding the WDOD, you should debug your program and find where the code gets stuck.
  5. 在活动模式下,系统将使用16MHz时钟运行。在睡眠模式中,它带有32kHz时钟。

我的建议是阅读UM-B-044:DA1468X软件平台参考andUM-B-056: DA1468x Software Developer's Guide为了理解SDK架构。您还可以在DA1468X支持门户中找到“适配器”示例。

谢谢,PM_DIALOG.

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

您可以在DA14683上启动FreerTOS_Retaget,点亮LED并激活Extended_sleep(使用PrintF / Console重定向到UART,DCDC和DMA)?

- what is the value of LED_CONTROL_REG before sleep ? after ?

- what is the value of RC16 enable bit before sleep ? after ? is the DCDC still alive ?

感谢您阅读手册的建议,但它看起来像SDK中的错误,我很高兴您在您身边检查。我从板上的支持包中获得了硬故障。

谢谢

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

好消息。我终于设法让睡眠功能没有崩溃工作。

由于在保留LDO上,我正在击中3.3V的BOD。

在激活闪光灯1V8关闭功能后,事情可以正常,从而卸载3V3 RET LDO。

坏消息n°1。7分钟后系统停止睡觉。没有识别的错。

坏消息N°2。如果我能启用外部外围设备,我仍然会击中3v3的bod。

Do you know what is the power budget for 3.3V RET LDO while in extended sleep (please don't answer 10mA there are lot of stuff attached to it) ?

I have 1.2mA on 1V8P and 300µA on 3V3 theoretical absolute maximum but when sleep is enabled I do hit BOD and end up with a Power-On reset.

谢谢

bobspam@free.fr.
离线
最后一次露面:2周4天前
加入:2018-06-20 08:07
您好

您好

我终于设法解决了最后一个问题

- 我必须手动将交换机驱动到Extended_sleep,我知道系统上什么都不知道(以及控制台!)。我也必须管理手动切换到空闲模式,以避免在正常操作期间的小睡眠(如在等待适配器事件的同时睡眠)。

- 我不得不在VBAT上升起高达20μF的电容器,以避免3V3上的BOD(唤醒时的电流峰值,使VBAT下降)。

——我的一个外部周边消耗8马on 1V8P while being in full shut-down mode. Not good with a 10mA budget ! I had to reset it after operations to make it consumes less while sleeping.

- 没有PM_SET_WAKEUP_MODE(TRUE)激活的系统没有唤醒睡眠任务。没有它,我用系统稳定睡眠后陷入困境,但无所事事。

在该旅程结束时,睡眠模式似乎在工作但是

- 由于sys_tcs_apply(tcs_system),我不再重新加载来自Power Manager的OTP值;PeripH_Init执行后重新加载LED_CONTROL_REG。

我再次在OTP问题上再次询问帮助,以便在不修改Boad支持包文件的情况下发布版本。

谢谢