嗨对话框
我在工作的自定义板基于DA1468x我在使用命令
pm_resume_USleep();设置睡眠模式(pm模式休眠);
把它放在冬眠中。它进入抑制和唤醒与外部GPIO中断,但醒来2次后,它不会进入休眠。
休眠模式是为客户传送设备而使用的逻辑吗。当设备上的客户禁用此代码的Piece时?
我的理解正确吗?
你好,mahmed106,
您能指出您在哪里使用pm\u resume\u sleep()和pm\u set\u sleep\u mode()API吗?为了使设备进入休眠模式,您应该使用pm\u set\u sleep\u mode(pm\u mode\u hibernation)。请注意,休眠模式是一种特殊的模式,用于将最终产品运送到市场,而无需耗尽电池电量。这是用来装运和存储最终产品的,我不建议您在开发或调试范围内使用休眠。因此,如果您的产品不是用于装运的,我建议您使用睡眠模式作为系统的延长睡眠时间\u init(),原因是当系统从休眠状态唤醒时,系统会重新设置并从头开始运行。这不是软件重置,它就像硬件重置一样,因此系统将从一开始就运行代码,并且系统初始化()将再次执行(每次680从休眠中唤醒时)。另外,pm\u resume\u sleep将恢复系统的睡眠模式,该模式已通过调用pm\u stay\u alive()被阻止如果您可以提供有关此问题的更多输入,将非常有用。
谢谢,下午好
我已经知道冬眠是为了生产运输目的,但我想在我的设备中添加一个功能,当电池达到一定电压时休眠,然后在充电器连接时唤醒它,这可以通过GPIO检测到。
我只想用这个方法来实现这个。
谢谢
你能在你的代码中指出你在哪里使用pm\u set\u sleep\u mode(pm\u mode\u hibernation)吗?正如您在第一篇文章中提到的,设备可以进入休眠模式。但是2号醒来后发生了什么?你能给我一些额外的信息吗?
我正在使用pxp_reporter,在进入pxp_reporter任务之后,我使用ADC检查VBAT电压,然后使用这两个命令。
我需要要求进入休眠模式需要满足两个条件
1-系统必须进入睡眠模式
2-VBAT必须低于dg配置电池低电平
?
由于您在设计中使用的是电池,如果电压过低,系统将自动进入休眠模式。看看SDK,监控中连接电池电压水平的唯一地方是sys power\u mgr.c文件中的apply_wifi()例程。请搜索“电压欠流检查”注释。如果蓄电池电压过低(在dg配置电池电压过低)下,usb U充电器U是蓄电池电压过低()将返回true。为此,如果low_vbat为true,则当前睡眠模式将更改为休眠。查看FreeRTOSConfig.h文件configPRE\u STOP_uprocessing()宏为空,因此您可以在这里挂钩您自己的功能。请检查以下实现,以声明hook函数:
在自定义配置\u qspi.h文件中,声明电池电压阈值以及电池类型:
#define dg\u configBATTERY\u LOW_ulevel(4000)//设置电源的阈值更高
#定义dg\配置电池\类型(电池\类型\自定义)
在freetosConfig.h文件中声明hook函数。例如:
#定义configPRE\u STOP\u PROCESSING(x)my\u custom\u callback\u low\u battery(x)
在您选择的文件中,例如main.c中,声明hook函数。
在sys\u power\u mgr.c文件中的apply_wifi()例程中,相应地修改configPRE\u STOP\u处理宏:
if(睡眠时间==0){
//允许添加应用程序代码的用户可定义宏。
configPRE\u STOP\u处理(pm\u current_usleep\u mode);//传递您选择的参数
}其他{
配置预睡眠处理(睡眠周期);
}
条件(vbat_level 谢谢,下午好
多谢对话。
我会实现它,如果有任何问题,我会回复这个帖子。
我试过上述方法,但系统没有进入睡眠。
所以我所做的就是,我使用了这段代码,每6秒检查VBAT,如果VBAT电压低,建议电压。它进入睡眠。
这个方法的问题是我需要等待2-3秒,才能将系统放入hibernaton,否则它进入休眠状态并重新启动。
g_UVBAT_UCheck_U计数器+;if(g_UVBAT_UCheck_U计数器>=10){电池电源bat=ad U电池打开();raw_UVBAT=ad U电池U raw U到U mvolt(bat,ad U电池U read(bat));if(原始值vbat≤3000){printf(\nIberNating\n“);fflush(标准输出);sys U看门狗U notify(wdog\u id);OS\u DELAY\u MS(2000);//做所有事情,并获得免费pm_resume_USleep();设置睡眠模式(pm模式休眠);}g\u VBAT\u check\u counter=0;}
请您每隔6秒取出一次电池读数,然后再次测试上述实现吗?默认情况下,应用中的电压欠流检查将下降。您使用的SDK是哪一个?
请您每隔6秒取出一次电池读数,然后再次测试上述实现吗?默认情况下,应用中的电压欠流检查将下降。
是的,我已经测试了这个,现在它工作得很好。
感谢对话
很高兴提供的实现工作,并感谢您接受我的答复。
我还有一个问题,不管采用哪种方法,DA14681都会进入休眠状态,如果pxpreporter的for循环正常的话,它就会保持休眠状态。在启动时进入pxpreporter的第一次循环之前,如果我试图使它休眠,它会休眠,然后再次重新启动。你知道原因吗,
PXP报告器与示例FW中的报告器相同。我正在把这个项目作为我项目的基础项目。
你能澄清一下“在PXP报告器的正常for循环中”的意思吗?
在pxp\u reporter中\u任务函数中
对于(;;)
这是我所说的主要回路
我假设您显式地放置DA14681,并且pm\u set\u sleep\u mode(pm\u mode\u hibernation)被称为out of mail loop。如果是的话,你能指出你在哪里使用这个API吗?可能由于挂起的中断,系统无法休眠。
你好,mahmed106,
您能指出您在哪里使用pm\u resume\u sleep()和pm\u set\u sleep\u mode()API吗?为了使设备进入休眠模式,您应该使用pm\u set\u sleep\u mode(pm\u mode\u hibernation)。请注意,休眠模式是一种特殊的模式,用于将最终产品运送到市场,而无需耗尽电池电量。这是用来装运和存储最终产品的,我不建议您在开发或调试范围内使用休眠。因此,如果您的产品不是用于装运的,我建议您使用睡眠模式作为系统的延长睡眠时间\u init(),原因是当系统从休眠状态唤醒时,系统会重新设置并从头开始运行。这不是软件重置,它就像硬件重置一样,因此系统将从一开始就运行代码,并且系统初始化()将再次执行(每次680从休眠中唤醒时)。另外,pm\u resume\u sleep将恢复系统的睡眠模式,该模式已通过调用pm\u stay\u alive()被阻止如果您可以提供有关此问题的更多输入,将非常有用。
谢谢,下午好
我已经知道冬眠是为了生产运输目的,但我想在我的设备中添加一个功能,当电池达到一定电压时休眠,然后在充电器连接时唤醒它,这可以通过GPIO检测到。
我只想用这个方法来实现这个。
谢谢
你好,mahmed106,
你能在你的代码中指出你在哪里使用pm\u set\u sleep\u mode(pm\u mode\u hibernation)吗?正如您在第一篇文章中提到的,设备可以进入休眠模式。但是2号醒来后发生了什么?你能给我一些额外的信息吗?
谢谢,下午好
我正在使用pxp_reporter,在进入pxp_reporter任务之后,我使用ADC检查VBAT电压,然后使用这两个命令。
pm_resume_USleep();
设置睡眠模式(pm模式休眠);
我需要要求进入休眠模式需要满足两个条件
1-系统必须进入睡眠模式
2-VBAT必须低于dg配置电池低电平
?
你好,mahmed106,
由于您在设计中使用的是电池,如果电压过低,系统将自动进入休眠模式。看看SDK,监控中连接电池电压水平的唯一地方是sys power\u mgr.c文件中的apply_wifi()例程。请搜索“电压欠流检查”注释。如果蓄电池电压过低(在dg配置电池电压过低)下,usb U充电器U是蓄电池电压过低()将返回true。为此,如果low_vbat为true,则当前睡眠模式将更改为休眠。查看FreeRTOSConfig.h文件configPRE\u STOP_uprocessing()宏为空,因此您可以在这里挂钩您自己的功能。请检查以下实现,以声明hook函数:
在自定义配置\u qspi.h文件中,声明电池电压阈值以及电池类型:
#define dg\u configBATTERY\u LOW_ulevel(4000)//设置电源的阈值更高
#定义dg\配置电池\类型(电池\类型\自定义)
在freetosConfig.h文件中声明hook函数。例如:
#定义configPRE\u STOP\u PROCESSING(x)my\u custom\u callback\u low\u battery(x)
在您选择的文件中,例如main.c中,声明hook函数。
在sys\u power\u mgr.c文件中的apply_wifi()例程中,相应地修改configPRE\u STOP\u处理宏:
if(睡眠时间==0){
//允许添加应用程序代码的用户可定义宏。
configPRE\u STOP\u处理(pm\u current_usleep\u mode);//传递您选择的参数
}其他{
//允许添加应用程序代码的用户可定义宏。
配置预睡眠处理(睡眠周期);
}
条件(vbat_level
谢谢,下午好
多谢对话。
我会实现它,如果有任何问题,我会回复这个帖子。
我试过上述方法,但系统没有进入睡眠。
所以我所做的就是,我使用了这段代码,每6秒检查VBAT,如果VBAT电压低,建议电压。它进入睡眠。
这个方法的问题是我需要等待2-3秒,才能将系统放入hibernaton,否则它进入休眠状态并重新启动。
g_UVBAT_UCheck_U计数器+;
if(g_UVBAT_UCheck_U计数器>=10)
{
电池电源bat=ad U电池打开();
raw_UVBAT=ad U电池U raw U到U mvolt(bat,ad U电池U read(bat));
if(原始值vbat≤3000)
{
printf(\nIberNating\n“);
fflush(标准输出);
sys U看门狗U notify(wdog\u id);
OS\u DELAY\u MS(2000);//做所有事情,并获得免费
pm_resume_USleep();
设置睡眠模式(pm模式休眠);
}
g\u VBAT\u check\u counter=0;
}
你好,mahmed106,
请您每隔6秒取出一次电池读数,然后再次测试上述实现吗?默认情况下,应用中的电压欠流检查将下降。您使用的SDK是哪一个?
谢谢,下午好
你好,mahmed106,
请您每隔6秒取出一次电池读数,然后再次测试上述实现吗?默认情况下,应用中的电压欠流检查将下降。
谢谢,下午好
是的,我已经测试了这个,现在它工作得很好。
感谢对话
你好,mahmed106,
很高兴提供的实现工作,并感谢您接受我的答复。
谢谢,下午好
我还有一个问题,不管采用哪种方法,DA14681都会进入休眠状态,如果pxpreporter的for循环正常的话,它就会保持休眠状态。在启动时进入pxpreporter的第一次循环之前,如果我试图使它休眠,它会休眠,然后再次重新启动。你知道原因吗,
PXP报告器与示例FW中的报告器相同。我正在把这个项目作为我项目的基础项目。
你好,mahmed106,
你能澄清一下“在PXP报告器的正常for循环中”的意思吗?
谢谢,下午好
在pxp\u reporter中\u任务函数中
对于(;;)
这是我所说的主要回路
你好,mahmed106,
我假设您显式地放置DA14681,并且pm\u set\u sleep\u mode(pm\u mode\u hibernation)被称为out of mail loop。如果是的话,你能指出你在哪里使用这个API吗?可能由于挂起的中断,系统无法休眠。
谢谢,下午好