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

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
17个帖子/ 0新
最后一篇
bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
DA1468X延长睡眠呼吸定时器和LED

你好

由于free_rtos的空闲任务,我愿意让我的设备进入长时间睡眠状态。到目前为止,我面临一些问题。

我的代码基于Dialog中的示例代码。系统正在启动,freertos正在启动,任务正在正常加载。

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

我可以跟踪系统,直到正确执行WFI。在那个时候,呼吸计时器被关闭并引导关闭。

在WFI退出时,呼吸计时器不会唤醒。

目前breath_config breath_cfg, hw_led_set_ledX_src(…),hw_breath_init(&breath_cfg);和hw_breath_enable ();都位于prvsetuhardware中。如果我把任何这些在外围的init,没有led灯在任何活动或空闲模式。

你能告诉我吗?

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

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

-呼吸定时器的状态和依赖正在被当前固件管理?

调试这种情况的步骤是什么?

提前谢谢你

致以最亲切的问候

关键词:
设备:
PW_Dialog
离线
最后一次露面:两个月三个星期前
职员
加入: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(真正的);

/*
*然后启动呼吸计时器。
*/
hw_breath_enable ();

更多细节可以在SDK的peripherals_demo中找到。

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

我的代码基于freertos_retarget源代码。

我正准确使用你给了我

静态孔隙prvSetupHardware(空白)
{
/ /激活中断

....

Breath_config breath_cfg = {

.dc_min = 9, //光功率- 1
.dc_max = 10, //光功率设置为10/255
.dc_step = 255,
.freq_div = 255,
.polarity = hw_breath_pwm_pol_pos.
};

/*初始化硬件(OTPC, Cache, ADC, DCDC, USB pad, RF,适配器,总线,设备,看门狗)*/
pm_system_init (periph_init);

// Init中断控制器
hw_wkup_init (&wkup_cfg);

//配置LED1,红色
hw_led_set_led1_src (HW_LED_SRC1_BREATH);
hw_led_enable_led1(假);
// configure LED2, Green
hw_led_set_led2_src (HW_LED_SRC2_BREATH);
hw_led_enable_led2(真正的);
// configure LED3, Blue
hw_led_set_led3_src (HW_LED_SRC3_BREATH);
hw_led_enable_led3(假);
//设置呼吸定时器需要RGB Led
hw_breath_init (&breath_cfg);
hw_breath_enable ();

}

如果我把前面的代码放在外围,没有led是亮的。

从长时间睡眠中醒来后不要再睡了。

提前谢谢你

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
它似乎比

它似乎比LED更麻烦。

睡觉前:WFI后0x50000066=0x3, pm_system_wake_up后0x50000066=0x2

数据指出安全启动(我正在测试生产模式与看门狗使用,但没有安全启动)。

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
新提示0x500030D0=0之前

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

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
Next Hint是0x50000022 =

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

我试图将系统放入dg_configUSE_DCDC = 0以停止使用DCDC。

因此在睡觉前后0x50000022 = 0xE7D3。我睡觉后不会再撞车了。

但是我还是没有LED

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
新的提示。呼吸计时器

新的提示。sys_tcs正在删除LED_CONTROL_REG。如果你在外围设置了led源,它们会在启动和唤醒时被sys_tcs删除。

我没有使用OTP,为什么这个寄存器是唯一由sys_tcs在这两个时刻设置的?

在查看UM-B-044的附录H时,似乎在生产过程中使用了LED_CONTROL_REG。

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

到目前为止,我还不能使用睡眠模式。能源对我的产品至关重要。

谢谢你!

PM_DIALOG.
离线
最后一次露面:5天15小时前
职员
加入:2018-02-08 11:03
嗨,鲍勃,

嗨,鲍勃,

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

谢谢,PM_DIALOG.

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

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

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

我设法延长了睡眠时间:

- 禁用DCDC

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

—通过从电源管理中移除sys_tcs。

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

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

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

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

如果我加载了比主循环更多的代码,我就会遇到各种崩溃/问题:

—hw_i2c

——>硬故障。(我需要移动到ad_i2c,让它在唤醒后重新加载控制器状态)。

-如果UART接收数据时CPU正在休眠或休眠(我认为外部调制解调器发送时钟更新)

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

- UART错过了与外部调制解调器的一些通信,所以我的应用程序不能正常工作。

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

睡眠功能可能会带来更多的麻烦。到目前为止我还不能可靠地使用它。

提前谢谢你

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

我将代码从hw_i2c移到了ad_i2c。我这边没有问题了。

在UART方面,

-我禁用了电平转换服务我的外部调制解调器在睡眠期间,所以我没有信息进入睡眠。这并没有改变什么。

-我使用了一个JTAG探针来检查那个中断的上下文。似乎问题与uart控制台有关,因为我的代码不使用异步通信,所以没有IRQ生成在我使用与我的外部调制解调器通信的uart上。我得到的唯一IRQ来自控制台服务。

你能解决以下问题吗?

-唤醒后关闭RC16 / DCDC

- sys_tcs在不使用OTP时从OTP重新加载值

-控制台服务中断以__BRK结束

提前谢谢你

PM_DIALOG.
离线
最后一次露面:5天15小时前
职员
加入:2018-02-08 11:03
嗨,鲍勃,

嗨,鲍勃,

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

谢谢,PM_DIALOG.

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

你好

你能看看下面的吗?

1.控制台服务生成以__BRK结束的uart中断。一旦我激活延长睡眠,这个问题就会发生。

Hardfault分析:

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

-在无效UART_Interrupt_Handler(HW_UART_ID uart)中,PC指向CONFIG_UART_IGNORE_BUSY_DETECT案例

我尝试使用无dma配置的uart。没有变化。

2.sys_tcs从OTP重新加载值,而不使用OTP。这个问题是为了避免修改BSP文件而解决的。

-参见我之前的分析。我可以使用一个JTAG探测来确定LED_CONTROL_REG是sys_tcs_apply(tcs_system)重新加载的唯一寄存器;功能。重载值为0x80。它清楚地保留了我的led状态。

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

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

提前谢谢你

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

新的硬错误:我得到一个新的ad_gpadc_read()后睡眠发生。我检查了GPADC寄存器,它们处于重置状态。

你能否证实

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

-我可以有适配器“打开”在构造函数?

-正常操作时,我不需要再次调用“open”。(包括起床后的费用)?

提前谢谢你

PM_DIALOG.
离线
最后一次露面:5天15小时前
职员
加入:2018-02-08 11:03
嗨,鲍勃,

嗨,鲍勃,

我对你所做的改变感到很困惑。

  1. 不得修改适配器和LLD驱动程序等SDK文件。
  2. 对所有适配器进行测试
  3. 在使用适配器之前,您应该初始化并关闭它们。
  4. 对于WDOD,您应该调试程序并找到代码卡住的地方。
  5. 在活动模式下,系统将使用16MHz时钟运行。在睡眠模式中,它带有32kHz时钟。

我的建议是阅读UM-B-044: DA1468x软件平台参考UM-B-056: DA1468x软件开发人员指南以便理解SDK架构。您还可以在DA1468x支持门户的“教程”一节中找到“适配器”示例。

谢谢,PM_DIALOG.

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

您可以启动freertos_retaget,点亮一个led并在DA14683上激活extended_sleep(用printf/控制台重定向到uart、dcdc和dma启用)吗?

-睡前LED_CONTROL_REG的值是多少?后吗?

-睡前的RC16 enable bit的值是多少?后吗?DCDC还活着吗?

谢谢你阅读手册的建议,但它看起来像SDK中的bug,我将很高兴你检查它在你的一边。我从董事会的支持包中得到了硬故障。

谢谢你!

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

好消息。我终于在没有崩溃的情况下实现了睡眠功能。

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

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

坏消息n°1。系统在几分钟后停止休眠。还没有确定的故障。

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

你知道3.3V RET LDO在长时间睡眠时的功率预算是多少吗(请不要回答10mA,有很多附加的东西)?

我在1V8P上有1.2mA,在3V3上有300µA理论绝对最大值,但当睡眠被启用时,我按下BOD,最终通电复位。

谢谢你!

bobspam@free.fr
离线
最后一次露面:三个月三个星期前
加入:2018-06-20 08:07
你好

你好

我终于解决了最后的问题

-我必须手动驱动切换到extended_sleep在我知道什么都没有发生在系统(和控制台!)我还必须手动切换到空闲模式,以避免在正常操作期间出现小睡眠(比如在等待适配器事件时休眠)。

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

-我的一个外设在1V8P下消耗高达8mA,而在完全关机模式下。不适合10mA的预算!我不得不在手术后重新设置,使它在睡眠时消耗更少。

—在没有pm_set_wakeup_mode(true)激活的情况下,系统没有唤醒休眠任务。如果没有它,我就会在睡觉后陷入系统稳定但什么也不做的状态。

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

我不再从电源管理器重新加载OTP值,因为sys_tcs_apply(tcs_system)重新加载LED_CONTROL_REG后,peri_init执行。

我再次请求帮助,至少在OTP问题上,这样我就可以发布一个版本,而不修改boad支持包文件。

谢谢你!