⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 嵌入式系统的动态电源管理技术 - colorant的专栏 - csdn博客.htm

📁 嵌入式系统的动态电源管理技术.rar嵌入式系统的动态电源管理技术.rar
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  <P id=fz_0131 style="MARGIN-BOTTOM: 0in">CPU<FONT id=fz_0132 
  face="宋体, SimSun">核心电压和和时钟关闭</FONT></P>
  <LI id=fz_0133>
  <P id=fz_0134 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0135 
  face="宋体, SimSun">外设时钟关闭</FONT></P>
  <LI id=fz_0136>
  <P id=fz_0137 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0138 
  face="宋体, SimSun">外部</FONT>SDRAM<FONT id=fz_0139 
  face="宋体, SimSun">保持自刷新状态</FONT></P>
  <LI id=fz_0140>
  <P id=fz_0141 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0142 
  face="宋体, SimSun">内部</FONT>SRAM<FONT id=fz_0143 
  face="宋体, SimSun">维持刷新</FONT></P></LI></UL>
<P id=fz_0144 style="MARGIN-BOTTOM: 0in"><BR id=fz_0145></P>
<P id=fz_0146 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0147 
face="宋体, SimSun">在这种状态下</FONT>CPU<FONT id=fz_0148 
face="宋体, SimSun">自身的功耗被降到最低,但系统总体的底电流还和外设工作状态相关,所以需要根据系统状态在恰当的时刻控制外设的供电和工作状态以保证总体电流的最优化。</FONT></P>
<P id=fz_0149 style="MARGIN-BOTTOM: 0in"><BR id=fz_0150></P>
<P id=fz_0151 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0152 
face="宋体, SimSun">在</FONT>Linux<FONT id=fz_0153 
face="宋体, SimSun">内核中,这个恰当的操作时机,通常是指在统一设备驱动模型中,设备驱动所注册的</FONT>Suspend<FONT 
id=fz_0154 face="宋体, SimSun">和</FONT>Resume<FONT id=fz_0155 
face="宋体, SimSun">函数被系统电源管理模块所调用时。设备驱动需要自己保证在</FONT>Suspend<FONT id=fz_0156 
face="宋体, SimSun">函数被调用时完成自身必要的休眠或者断电等操作,而在</FONT>Resume<FONT id=fz_0157 
face="宋体, SimSun">函数中重新恢复自己的正常工作状态。</FONT></P>
<P id=fz_0158 style="MARGIN-BOTTOM: 0in"><BR id=fz_0159></P>
<P id=fz_0160 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0161 
face="宋体, SimSun">除此之外,底电流的控制和主板本身的硬件设计也有很大关系。</FONT></P>
<P id=fz_0162 style="MARGIN-BOTTOM: 0in"><BR id=fz_0163></P>
<H2 class=western id=fz_0164>1.3<FONT id=fz_0165 
face="宋体, SimSun">系统运行模式下,功耗的控制</FONT></H2>
<P id=fz_0166 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0167 
face="宋体, SimSun">如果说低功耗模式下系统功耗的控制关系到消费类嵌入式设备的待机时间,那么运行模式下的功耗控制则关系到系统正常使用的时间,同样也是至关重要的。</FONT></P>
<P id=fz_0168 style="MARGIN-BOTTOM: 0in"><BR id=fz_0169></P>
<P id=fz_0170 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0171 
face="宋体, SimSun">从总体来说,要降低系统运行时的功耗,所涉及到的内容大致会包括:</FONT></P>
<P id=fz_0172 style="MARGIN-BOTTOM: 0in"><BR id=fz_0173></P>
<P id=fz_0174 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0175 
face="宋体, SimSun">背光亮度的控制,例如在适当的时候自动调节系统背光亮度,时间等,在某些场合关闭系统背光。</FONT></P>
<P id=fz_0176 style="MARGIN-BOTTOM: 0in"><BR id=fz_0177></P>
<P id=fz_0178 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0179 
face="宋体, SimSun">尽量关闭不必要的外设,只有在需要使用的时候才对相关外设进行上电操作(例如</FONT>Camera<FONT 
id=fz_0180 face="宋体, SimSun">,蓝牙,</FONT>wifi<FONT id=fz_0181 
face="宋体, SimSun">等),或者让一些不能关闭的外设在工作间隙处于休眠状态。</FONT></P>
<P id=fz_0182 style="MARGIN-BOTTOM: 0in"><BR id=fz_0183></P>
<P id=fz_0184 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0185 
face="宋体, SimSun">适时的变频操作,在</FONT>CPU<FONT id=fz_0186 
face="宋体, SimSun">和总线负载较低的情况下,进行恰当的降频操作,降低</FONT>CPU<FONT id=fz_0187 
face="宋体, SimSun">本身的功率消耗,同时在负载升高的时候,能够保证及时的恢复较高的工作频率,不影响用户的正常使用。</FONT></P>
<P id=fz_0188 style="MARGIN-BOTTOM: 0in"><BR id=fz_0189></P>
<P id=fz_0190 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0191 
face="宋体, SimSun">此外应该还包括恰当的器件选型,软件性能优化等其它手段。</FONT></P>
<P id=fz_0192 style="MARGIN-BOTTOM: 0in"><BR id=fz_0193></P>
<H1 class=western id=fz_0194>2<FONT id=fz_0195 
face="宋体, SimSun">硬件组成</FONT></H1>
<P id=fz_0196 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0197 
face="宋体, SimSun">嵌入式系统中,为了支持动态电源和功耗的管理,对硬件和</FONT>CPU<FONT id=fz_0198 
face="宋体, SimSun">有着特定的需求,而不同的</FONT>CPU<FONT id=fz_0199 
face="宋体, SimSun">和外设为了满足这些需求,也有自己不同的实现方式。个人所接触的硬件种类有限,所以,这里主要以</FONT>Monahans<FONT 
id=fz_0200 face="宋体, SimSun">系列</FONT>CPU<FONT id=fz_0201 
face="宋体, SimSun">为核心的系统为例,大致列一下所涉及到的硬件及相关功能特性。</FONT></P>
<P id=fz_0202 style="MARGIN-BOTTOM: 0in"><BR id=fz_0203></P>
<H2 class=western id=fz_0204>2.1CPU</H2>
<P id=fz_0205 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0206 
face="宋体, SimSun">首先当然是</FONT>CPU<FONT id=fz_0207 face="宋体, SimSun">:</FONT></P>
<P id=fz_0208 style="MARGIN-BOTTOM: 0in"><BR id=fz_0209></P>
<P id=fz_0210 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0211 
face="宋体, SimSun">为了支持变频操作,</FONT>CPU<FONT id=fz_0212 
face="宋体, SimSun">需要提供系统和总线频率的动态调整功能。</FONT></P>
<P id=fz_0213 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0214 
face="宋体, SimSun">为了保证某些外设在系统总线频率改变时的正常工作,应该提供具体外设时钟的可变控制。</FONT></P>
<P id=fz_0215 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0216 
face="宋体, SimSun">能够提供低功耗模式的状态控制和切换能力</FONT></P>
<P id=fz_0217 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0218 
face="宋体, SimSun">能够提供相应的硬件唤醒机制,保证系统能从休眠状态恢复到正常工作状态。</FONT></P>
<P id=fz_0219 style="MARGIN-BOTTOM: 0in"><BR id=fz_0220></P>
<P id=fz_0221 style="MARGIN-BOTTOM: 0in">Monahans<FONT id=fz_0222 
face="宋体, SimSun">系列的</FONT>CPU<FONT id=fz_0223 
face="宋体, SimSun">还提供了一套硬件功能模块,用于监控</FONT>CPU<FONT id=fz_0224 
face="宋体, SimSun">的各种核心操作。例如</FONT>Cache<FONT id=fz_0225 
face="宋体, SimSun">的命中,内存控制器的请求数量统计等等,一方面可以用来为软件性能调试提供参考数据,另一方面,也可以作为系统硬件状态的一种监控手段,为动态电源管理提供信息来源。</FONT></P>
<P id=fz_0226 style="MARGIN-BOTTOM: 0in"><BR id=fz_0227></P>
<H2 class=western id=fz_0228>2.2<FONT id=fz_0229 
face="宋体, SimSun">电源管理芯片</FONT></H2>
<P id=fz_0230 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0231 
face="宋体, SimSun">由于</FONT>CPU<FONT id=fz_0232 
face="宋体, SimSun">在低功耗模式下通常会工作在更低的核心电压下,所以要求电源管理芯片能对系统提供可以动态调整的输出电压。通过降低核心电压的手段降低系统的整体功耗。</FONT></P>
<P id=fz_0233 style="MARGIN-BOTTOM: 0in"><BR id=fz_0234></P>
<H2 class=western id=fz_0235>2.3<FONT id=fz_0236 
face="宋体, SimSun">内存</FONT></H2>
<P id=fz_0237 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0238 
face="宋体, SimSun">对于外部内存</FONT>SDRAM<FONT id=fz_0239 
face="宋体, SimSun">来说,为了保证系统在休眠时不丢失信息,通常要求内存能够在无需</FONT>CPU<FONT id=fz_0240 
face="宋体, SimSun">内存控制器的参与下,工作在自刷新模式。</FONT></P>
<P id=fz_0241 style="MARGIN-BOTTOM: 0in"><BR id=fz_0242></P>
<H2 class=western id=fz_0243>2.4<FONT id=fz_0244 
face="宋体, SimSun">其它外设</FONT></H2>
<P id=fz_0245 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0246 
face="宋体, SimSun">对于外设来说,理想的要求当然是能够受控或自动将自己致于尽可能低的功耗状态。</FONT></P>
<P id=fz_0247 style="MARGIN-BOTTOM: 0in"><BR id=fz_0248></P>
<H1 class=western id=fz_0249>3<FONT id=fz_0250 
face="宋体, SimSun">软件框架</FONT></H1>
<P id=fz_0251 style="MARGIN-BOTTOM: 0in"><BR id=fz_0252></P>
<P id=fz_0253 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0254 
face="宋体, SimSun">在</FONT>X86<FONT id=fz_0255 
face="宋体, SimSun">架构的</FONT>PC<FONT id=fz_0256 
face="宋体, SimSun">中,</FONT>BIOS<FONT id=fz_0257 
face="宋体, SimSun">在很大程度上承担了核心的电源管理功能,所以</FONT>APM<FONT id=fz_0258 
face="宋体, SimSun">和</FONT>ACPI<FONT id=fz_0259 
face="宋体, SimSun">或多或少在一定程度上都依赖于</FONT>BIOS<FONT id=fz_0260 
face="宋体, SimSun">所提供的功能。</FONT></P>
<P id=fz_0261 style="MARGIN-BOTTOM: 0in"><BR id=fz_0262></P>
<P id=fz_0263 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0264 
face="宋体, SimSun">在</FONT>ARM<FONT id=fz_0265 
face="宋体, SimSun">架构的嵌入系统中,因为通常不会有</FONT>BIOS<FONT id=fz_0266 
face="宋体, SimSun">,加上具体的</FONT>CPU<FONT id=fz_0267 
face="宋体, SimSun">和外设千差万别,所以动态电源管理的软件实现框架也不尽相同。不过就我接触到的平台而言,基本上都会在</FONT>PM<FONT 
id=fz_0268 
face="宋体, SimSun">的基础上实现休眠等相关的电源管理策略,而动态调频等功能,则各有各的实现方式,有基于</FONT>DPM<FONT 
id=fz_0269 face="宋体, SimSun">实现的,也有自己实现一套框架的。</FONT></P>
<P id=fz_0270 style="MARGIN-BOTTOM: 0in"><BR id=fz_0271></P>
<H2 class=western id=fz_0272>3.1<FONT id=fz_0273 
face="宋体, SimSun">基于</FONT>Monahans<FONT id=fz_0274 
face="宋体, SimSun">的电源管理框架</FONT></H2>
<P id=fz_0275 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0276 
face="宋体, SimSun">基于</FONT>Monahans<FONT id=fz_0277 
face="宋体, SimSun">系列</FONT>CPU<FONT id=fz_0278 
face="宋体, SimSun">所提供的功能,我们在</FONT>Marvell<FONT id=fz_0279 
face="宋体, SimSun">的</FONT>BSP<FONT id=fz_0280 
face="宋体, SimSun">所提供的相关代码的基础上所实现的动态电源管理的软件框架如下图所示:</FONT></P>
<P id=fz_0281 style="MARGIN-TOP: 0.11in; MARGIN-BOTTOM: 0in" 
align=center>&nbsp;</P>
<P style="MARGIN-BOTTOM: 0in"><IMG height=204 alt="" 
src="嵌入式系统的动态电源管理技术 - colorant的专栏 - CSDN博客.files/dxf836w_99c3jtt2g6_b" 
width=584></P>
<P style="MARGIN-BOTTOM: 0in"><BR id=fz_0284>&nbsp;</P>
<H3 class=western id=fz_0285>3.1.1Power Mode Management</H3>
<P id=fz_0286 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0287 
face="宋体, SimSun">这部分代码基于</FONT>PM<FONT id=fz_0288 
face="宋体, SimSun">实现,主要负责低功耗模式的进入退出相关过程的控制,它定义并实现了几种不同程度的低功耗模式,并负责完成对外设驱动的</FONT>Suspend 
/ Resume<FONT id=fz_0289 face="宋体, SimSun">函数的调用。</FONT></P>
<H3 class=western id=fz_0290>3.1.2DVFM</H3>
<P id=fz_0291 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0292 
face="宋体, SimSun">动态电压频率调整模块主要负责变频操作相关过程的控制,它定义和维护了一系列的操作点,用来描述和控制</FONT>CPU<FONT 
id=fz_0293 
face="宋体, SimSun">核心频率,电压,各种总线频率等参数。同时它还负责维护和调用外设驱动向其注册的</FONT>DVFM_notifier<FONT 
id=fz_0294 face="宋体, SimSun">函数,在其完成变频操作前后,给外设提供一个机会执行相应的应对措施。</FONT></P>
<H3 class=western id=fz_0295>3.1.3Device Drivers</H3>
<P id=fz_0296 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0297 
face="宋体, SimSun">设备驱动需要实现自己的</FONT>DVFM_notifer<FONT id=fz_0298 
face="宋体, SimSun">函数,用来处理变频操作给自己带来的影响。或者用来通知</FONT>DVFM<FONT id=fz_0299 
face="宋体, SimSun">禁止变频操作的执行。</FONT></P>
<P id=fz_0300 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0301 
face="宋体, SimSun">此外,一些设备驱动还要为电源管理状态切换的决策提供输入信息,例如</FONT>RTC<FONT id=fz_0302 
face="宋体, SimSun">闹钟等可能做为系统唤醒的唤醒源,而像键盘,触摸屏等的操作则标志着用户交互行为的发生等等。</FONT></P>
<H3 class=western id=fz_0303>3.1.4Workload Profiler</H3>
<P id=fz_0304 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0305 
face="宋体, SimSun">系统负载采样模块同样是为电源管理状态的切换决策提供输入信息,这部分代码主要用来控制</FONT>Monahans<FONT 
id=fz_0306 
face="宋体, SimSun">中性能监控相关硬件模块的工作。采样硬件活动信息,以监控例如内存总线的负载等。同时,在系统</FONT>IDLE<FONT 
id=fz_0307 face="宋体, SimSun">进程中,也利用对</FONT>Idle<FONT id=fz_0308 
face="宋体, SimSun">的时间的统计等手段,为动态电源管理系统提供一个近似的</FONT>CPU<FONT id=fz_0309 
face="宋体, SimSun">负载信息。</FONT></P>
<H3 class=western id=fz_0310>3.1.5Policy Maker</H3>
<P id=fz_0311 style="MARGIN-BOTTOM: 0in">Policy Maker<FONT id=fz_0312 
face="宋体, SimSun">工作在用户层空间,它负责采集内核中上述各模块的相关信息并进行调度控制。它在用户空间实现了一套电源管理策略。作为</FONT>Daemon<FONT 
id=fz_0313 
face="宋体, SimSun">进程,它为其它用户层代码提供一个统一的接口,用来通知其它应用程序电源状态的变化,以及接受并处理各种用户限制条件(例如播放视频时禁止熄灭背光等等)以正确进行系统状态的切换。</FONT></P>
<P id=fz_0314 style="MARGIN-BOTTOM: 0in"><BR id=fz_0315></P>
<H2 class=western id=fz_0316>3.2<FONT id=fz_0317 
face="宋体, SimSun">动态电源管理策略的制定</FONT></H2>
<H3 class=western id=fz_0318>3.2.1<FONT id=fz_0319 
face="宋体, SimSun">电源管理的决策依据</FONT></H3>
<P id=fz_0320 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0321 
face="宋体, SimSun">电源管理的决策依据,不外乎会有几个来源:</FONT></P>
<P id=fz_0322 style="MARGIN-BOTTOM: 0in"><BR id=fz_0323></P>
<UL id=fz_0324>
  <LI id=fz_0325>
  <P id=fz_0326 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0327 
  face="宋体, SimSun">系统硬件的工作状态</FONT></P>
  <LI id=fz_0328>
  <P id=fz_0329 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0330 
  face="宋体, SimSun">上层应用程序的工作状态</FONT></P>
  <LI id=fz_0331>
  <P id=fz_0332 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0333 
  face="宋体, SimSun">用户的交互情况</FONT></P></LI></UL>
<P id=fz_0334 style="MARGIN-BOTTOM: 0in"><BR id=fz_0335></P>
<P id=fz_0336 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0337 
face="宋体, SimSun">从系统硬件的角度来说,大致会包括:</FONT>CPU<FONT id=fz_0338 
face="宋体, SimSun">和系统总线的负载情况,输入输出类设备的工作情况:例如是否存在大量的内存操作,是否有网络数据交互等,另外还包括电池是否处于低电量状态,是否在使用某些特殊的硬件设备等等。</FONT></P>
<P id=fz_0339 style="MARGIN-BOTTOM: 0in"><BR id=fz_0340></P>
<P id=fz_0341 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0342 
face="宋体, SimSun">上层应用程序的工作状态,可能包括:是否存在视频应用,是否允许关闭背光,是否对</FONT>CPU<FONT 
id=fz_0343 face="宋体, SimSun">速度有限制要求,是否允许系统进入睡眠状态等等。</FONT></P>
<P id=fz_0344 style="MARGIN-BOTTOM: 0in"><BR id=fz_0345></P>
<P id=fz_0346 style="MARGIN-BOTTOM: 0in"><FONT id=fz_0347 
face="宋体, SimSun">而用户的交互情况,包括用户是否有键盘或其它</FONT>IO<FONT id=fz_0348 
face="宋体, SimSun">设备输入等行为。</FONT></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -