休眠唤醒从整体看分为两个阶段,休眠和唤醒。
1.首先确保休眠流程正常。可以使用定时唤醒或者按键唤醒。
(sun50iw1p1_R18)
echo 5 > /sys/power/sunxi/time_to_wakeup_ms
(sun8iw18p1_R328/)
echo 5 > /sys/power/sunxi_debug/time_to_wakeup_ms
(sun8iw8p1_R11/R7s/R331/R332/R333 sun8iw5p1_R16)
echo 1000 > /sys/module/pm_tmp/parameters/time_to_wakeup;
(sun3iw1p1_R6)
echo 10 > /sys/module/pm_tmp/parameters/time_to_wakeup;
(sun8iw17p1_T7/sun8iw15p1_MR133/R311)
echo 1000 > /sys/module/pm/parameters/time_to_wakeup_ms
echo +5 > /sys/class/rtc/rtc0/wakealarm; or echo 5 > /sys/class/rtc/rtc0/time;
(sun50iw3p1_R30/)
echo 5000 > /sys/module/pm/parameters/time_to_wakeup_ms
echo 5 > /sys/class/rtc/rtc0/time;
2.在步骤1的前提下说明休眠和唤醒流程两个阶段都正常,那么就是Wi-Fi本身的问题,进而又细分为三个阶段:发出ping包,接收ping包(接收中断),中断处理(唤醒SOC)
2.1利用抓包网卡确认B板的ping包是否有正常发出,一般可以尝试用其他正常的板子做验证即可,只要可以正常ping唤醒其他任何设备,说明B板ping包正常发出。
2.2利用示波器直接查看中断引脚,一般默认为低,有中断来临会被拉高,若示波器测量发现未被拉高,尝试直接短接的方式拉高(一般用该引脚的供电电压)
- 情况1:中断引脚一直为低,且直接短接拉高可以正常唤醒,说明未收到ping包(或者中断未触发)。
- 情况2:中断引脚从低被拉高,依然无法唤醒,说明是主控未对中断响应。
该问题属于情况2:即通过示波器能够明显的看到中断引脚从低拉到高,说明已经正常的接收到ping包,产生了中断。
此时排查思路如下:
检查中断引脚的配置:
引脚功能:输入,输出,中断,其他复用**(配置中断功能)**
触发方式:低电平,高电平,上升沿,下降沿,双边沿触发**(任选一种)**
中断号使能:(一般都是一组gpio的中断号,该例为PL)
中断引脚的使能:(具体引脚的使能,该例为PL8)
如下图:
最终发现是gpio的中断使能没有开。
进一步排查发现在休眠阶段会清掉所有中断的使能,这个时候就需要在具体的设备的suspend函数中做处理,使能对应中断。
解决办法
使能PL7的中断功能即可。
注:上面图是采用直接改寄存器的方式。
正常请用接口irq_enable()
更详细的说明可见附件《R18设置PL8为Wi-Fi唤醒源问题.pdf》
R18设置PL8为Wi-Fi唤醒源问题.pdf
休眠唤醒从整体看分为两个阶段,休眠和唤醒。
1.首先确保休眠流程正常。可以使用定时唤醒或者按键唤醒。
(sun50iw1p1_R18)
echo 5 > /sys/power/sunxi/time_to_wakeup_ms
(sun8iw18p1_R328/)
echo 5 > /sys/power/sunxi_debug/time_to_wakeup_ms
(sun8iw8p1_R11/R7s/R331/R332/R333 sun8iw5p1_R16)
echo 1000 > /sys/module/pm_tmp/parameters/time_to_wakeup;
(sun3iw1p1_R6)
echo 10 > /sys/module/pm_tmp/parameters/time_to_wakeup;
(sun8iw17p1_T7/sun8iw15p1_MR133/R311)
echo 1000 > /sys/module/pm/parameters/time_to_wakeup_ms
echo +5 > /sys/class/rtc/rtc0/wakealarm; or echo 5 > /sys/class/rtc/rtc0/time;
(sun50iw3p1_R30/)
echo 5000 > /sys/module/pm/parameters/time_to_wakeup_ms
echo 5 > /sys/class/rtc/rtc0/time;
2.在步骤1的前提下说明休眠和唤醒流程两个阶段都正常,那么就是Wi-Fi本身的问题,进而又细分为三个阶段:发出ping包,接收ping包(接收中断),中断处理(唤醒SOC)
2.1利用抓包网卡确认B板的ping包是否有正常发出,一般可以尝试用其他正常的板子做验证即可,只要可以正常ping唤醒其他任何设备,说明B板ping包正常发出。
2.2利用示波器直接查看中断引脚,一般默认为低,有中断来临会被拉高,若示波器测量发现未被拉高,尝试直接短接的方式拉高(一般用该引脚的供电电压)
- 情况1:中断引脚一直为低,且直接短接拉高可以正常唤醒,说明未收到ping包(或者中断未触发)。
- 情况2:中断引脚从低被拉高,依然无法唤醒,说明是主控未对中断响应。
该问题属于情况2:即通过示波器能够明显的看到中断引脚从低拉到高,说明已经正常的接收到ping包,产生了中断。
此时排查思路如下:
检查中断引脚的配置:
引脚功能:输入,输出,中断,其他复用**(配置中断功能)**
触发方式:低电平,高电平,上升沿,下降沿,双边沿触发**(任选一种)**
中断号使能:(一般都是一组gpio的中断号,该例为PL)
中断引脚的使能:(具体引脚的使能,该例为PL8)
如下图:
最终发现是gpio的中断使能没有开。
进一步排查发现在休眠阶段会清掉所有中断的使能,这个时候就需要在具体的设备的suspend函数中做处理,使能对应中断。
解决办法
使能PL7的中断功能即可。
注:上面图是采用直接改寄存器的方式。
正常请用接口irq_enable()
更详细的说明可见附件《R18设置PL8为Wi-Fi唤醒源问题.pdf》
R18设置PL8为Wi-Fi唤醒源问题.pdf
举报