TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x 开关机和休眠

我现在用的是tps65217,现在要控制evm班子的开关机,请问是不是开关机可以通过RTC模块通过alarm寄存器控制PMIC_POWER_EN来实现开关机?请问板子休眠是怎么控制的呢?

Steven Liu1:

你用的是什么操作系统,如果是Linux的话,可以参考下面的这个链接,通过命令行的操作来控制板子进入到休眠状态。

http://processors.wiki.ti.com/index.php/AM335x_Linux_Power_Management_User_Guide#Suspend_.26_Resume

唤醒的话,看你进入到了什么样的休眠模式,如果是DS0的话,串口终端,GPIO等都是可以作为唤醒源的。如果使能的RTC,RTC也可以作为唤醒源,具体的你可以参考一下TRM手册的8.1.4节Power Management

PS:板子的开关机和休眠唤醒是两个概念,看你的意思应该是要控制休眠唤醒,不知道我理解的对不对。

qun zhou:

回复 Steven Liu1:

你好,谢谢你的耐心回答,我正在调试板子的开关机,然后会调试休眠唤醒,现在在调试开关机的时候,遇到问题:

我tps65217的enable引脚是连接在am335x的PMIC_POWER_EN上的,是不是我可以在rtc中的rtc_power_off函数中对其进行控制:

static void rtc_power_off(void){//pr_info("enter===>%s\n",__func__);    u32 val;    struct rtc_time tm;    /* Set PMIC power enable */    val = readl(rtc_base + OMAP_RTC_PMIC_REG);    writel(val | OMAP_RTC_PMIC_POWER_EN_EN, rtc_base + OMAP_RTC_PMIC_REG);   //     /* Wait few seconds instead of rollover */    do {        omap_rtc_read_time(NULL, &tm);        if (WAIT_AFTER <= tm.tm_sec)            mdelay(WAIT_TIME_MS);    } while (WAIT_AFTER <= tm.tm_sec);    /* Add shutdown time to the current value */    tm.tm_sec += SHUTDOWN_TIME_SEC;    if (tm2bcd(&tm) < 0)        return;这个是在rtc_omap.c中的代码,

/* * rtc_power_off: Set the pmic power off sequence. The RTC generates * pmic_pwr_enable control, which can be used to control an external * PMIC. */

这个是这个函数的注释,power_off功能,但是  

/* Set PMIC power enable */    val = readl(rtc_base + OMAP_RTC_PMIC_REG);    writel(val | OMAP_RTC_PMIC_POWER_EN_EN, rtc_base + OMAP_RTC_PMIC_REG)

这又是power enable,,这个怎么理解,

还有一个问题,在/arch/arm/kernel/process.c函数中,有一些void machine_power_off(void){    machine_shutdown();    if (pm_power_off)        pm_power_off();}的函数,开关机的操作会调用到这里的函数吗?

Jian Zhou:

回复 qun zhou:

rtc_power_off()这个函数不要做改动。

omap_rtc_probe()函数中的:

/* RTC power off */ if (pdata && pdata->pm_off && !pm_power_off)  pm_power_off = rtc_power_off;

把 if (pdata && pdata->pm_off && !pm_power_off)这个判断注释掉,直接pm_power_off = rtc_power_off;就可以了

qun zhou:

回复 Jian Zhou:

我就是不是很明白他是power_off的函数,为什么在里边会显示

/* Set PMIC power enable */    val = readl(rtc_base + OMAP_RTC_PMIC_REG);    writel(val | OMAP_RTC_PMIC_POWER_EN_EN, rtc_base + OMAP_RTC_PMIC_REG);的函数,

还有一点有没有一个power_on,控制开机的函数呢?

Jian Zhou:

回复 qun zhou:

这个power_off是在Linux下执行shut down命令调用的。

Linux系统直接通过供电开机,貌似没有power_on命令

qun zhou:

回复 Jian Zhou:

我按照你的方法将if屏蔽掉以后,在执行omap_rtc_probe()函数以后,还是没有关机

//if (reg & (u8) OMAP_RTC_STATUS_POWER_UP) {    //    pr_info("%s: RTC power up reset detected\n",        //    pdev->name);        rtc_write(OMAP_RTC_STATUS_POWER_UP, OMAP_RTC_STATUS_REG);

还有在这个函数中, rtc_write(OMAP_RTC_STATUS_POWER_UP, OMAP_RTC_STATUS_REG);直接执行这条代码也不能reset。

Jian Zhou:

回复 qun zhou:

omap_rtc_probe()里面是给power_off()函数赋值,关机的话要在命令行执行shutdown命令。

qun zhou:

回复 Jian Zhou:

你好,我在执行

sync; echo mem > /sys/power/state

echo standby > /sys/power/state进入睡眠状态以后,为什么按下am335x上的tps上的PB_IN以后,不能退出休眠

tps的 PB_IN作用:

push button monitor is used to: • Power-up the device from OFF or SLEEP mode upon detecting a falling edge on PB_IN. • Power cycle the device when PB_IN is held low for > 8 s. 第一个功能就是在低跳变的时候,出进入power_on

Jian Zhou:

回复 qun zhou:

系统休眠是指AM335x休眠,而不是PMU,所以控制PMU的某个pin不能唤醒AM335x。

一般要通过AM335x的唤醒源去唤醒,比如串口或者GPIO

qun zhou:

回复 Jian Zhou:

那我在进入系统休眠的时候,tps是工作在什么状态呢?

还有一个问题怎么让tps进入休眠状态呢?

赞(0)
未经允许不得转载:TI中文支持网 » am335x 开关机和休眠
分享到: 更多 (0)