分享

[zhuan]飞思卡尔DVFS省电模式介绍

 techres 2012-10-29

思卡尔DVFS

用途:根据负载情况,动态调节频率用于降低功耗。

使用范围:IMX31IMX53都默认启用,并且imx53还添加了总线频率调节功能。

 

几个概念及实现:

1.     DVFS Dynamic Voltage FrequencyScaling,即动态电压频率调整。

         imx31中,支持硬件的反弹式自动处理和软件的预知处理。这两种方式只可以选择一种。

硬件的反弹式处理:是基于中断的,也就是说,用户是不干预DVFS操作。所以如果选择这种方式的话,对用户来说,是不需要任何工作的。 

软件的预知处理:在这种方式下,内核会将极端时间内的15次负载采样返回给用户空间,此时用户空间的程序需要通过一定的算法,给CPU选择一个合适的频率。这里值得注意的是,这15次负载采样,是完全基于硬件寄存器(load track),通过DMA上传到用户空间的buf中的,那么说明这是一个极端时间内的负载采样值,在用户层的程序需要关注的是这一段时间内的采样规律,进而动态的调整cpu的频率。

 

2.     Burst Mode / Skip Mode /Brown Out分频有关的概念

前两个是通过跳周期/跨周期方式来实现轻负载时降低频率。

Brown Out 是指加入了欠压保护

BurstMode详细说明:

当轻负载的时候的VFB(FEEDBACK电压)会降低,当降低到一个数值后(并且为了避免受干扰,要持续一段时间),进入到了Burst-mode.Burst-mode,驱动信号不是每时每刻都有的,而是受VFB控制的。当VFB3.0V时,开始有驱动信号,此时占空比较大,受CURRENT LIMIT LEVEL(也就是初级侧电流最大值)限制。因为有驱动,开关管导通,能量从初级传递到次级,VOVFB增大,当增大到3.5V时,驱动信号消失。也就是说占空比变成0,停止从初级到次级传递能量,完全靠输出电容的能量维持输出(因为载很轻)VO变低,VFB也变低,当下降到3.0V时,有开始产生驱动信号;就这样一直循环,直到负载突然变大,VFB突然增大到4.5V时,退出burst-mode,进入正常状态。由于驱动信号的断续,所以才叫BURST-MODE。下面两个波形图说明BurstMode

   

          

 

3.     IMX53 DVFS的实现:

随系统启动的PowerManagerService里调用JNI里实现的enable函数,使能驱动文件节点的enable文件。

分层的具体实现为:

a)     hardware/libhardware_legacy/power/power.c实现启用驱动文件节点的函数。

b)    frameworks/base/core/jni/android_os_Power.cpp中实现JNI函数映射,并调用上面Hal中实现的函数。

c)     frameworks/base/services/java/com/android/server/PowerManagerService.javabootCompleted中调用b)步映射的函数打开功能。

d)    驱动包含在freescale包里面的,kernel_imx\arch\arm\plat-mxc\dvfs-core.c

Imx53在这里实现的开关路径是:/sys/devices/platform/mxc_dvfs_core.0/enable

上面三步只是添加了开机启动,驱动中的实现才是全部重点,下面会边学习边记录。

 

4.     IMX53 DVFS驱动代码分析

       因为发现有时假死时是进入了dvfs驱动中一个while循环里面跳不出来了:

 

5. 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多