新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 一种基于SEP0611的电源管理驱动设计方案实现

一种基于SEP0611的电源管理驱动设计方案实现

作者:时间:2014-02-09来源:网络收藏

引言

本文引用地址:http://www.eepw.com.cn/article/226567.htm

系统休眠是嵌入式系统除关机外最省电的一种状态。休眠(Suspend, STR (Suspend To RAM )) ,又称为挂起或者挂起到内存,会将目前的运行状态数据存放在内存,并关闭硬盘、外设等设备,进入等待状态,此时除了内存仍然需要电力维持其数据,整机其余部分耗电很少。

恢复时处理器从内存读出数据,回到挂起前的状态,恢复速度较快。一般在电池无故障且充满电的情况下可以维持这种状态数天之久。

单元硬件设计

是东南大学自主研发的一款基于UniCore32内核的32位高性能、低功耗RISC微处理器,是定位于手持播放设备、卫星导航产品的高性能处理器。主要分为五个部分:系统与时钟控制、外设接口、多媒体系统、GPS系统和存储系统。系统与时钟控制部分包含了单元(Power Management Unit, PMU)的设计。

PMU包括时钟控制和功耗控制两部分。功耗控制主要负责在各个工作模式下的切换,进入低功耗模式后的唤醒,以及系统的复位控制。系统工作模式主要分为三种:正常工作模式、挂起模式、休眠模式。

Linux APM技术

图1是APM技术在Linux中的架构图。用户通过用户态的APM接口或策略向BIOS申请休眠请求,BIOS设备接收到用户层的休眠请求后会调用内核低功耗层的接口函数,从而实现系统进入休眠的一系列操作;在接收到唤醒信号后内核低功耗层会执行唤醒操作,与此同时低功耗层也会调用外设驱动的接口让设备跟随系统实现唤醒。无BIOS,系统唤醒后会回到bootloader执行。

一种基于SEP0611的电源管理驱动设计方案实现

图1 Linux APM技术架构图

系统休眠的内核层分析与驱动设计

Linux系统休眠内核层是整个休眠部分的核心。它将接受上层休眠命令,并通过驱动层使外围设备进入相应的suspend状态等,在得到唤醒信号后将恢复状态继续运行。它包括了体系结构无关的部分:当前进程的冻结/释放,管理外围驱动;也包括了体系结构相关的部分:让处理器进入/退出休眠,DDR进入自刷新指令序列,系统状态保存/恢复等。本小节由休眠准备,休眠进入和休眠退出,完成唤醒三部分组成。

1、休眠准备

在本文中,将suspend_prepare函数、suspend_devices_and_enter函数中的大部分内容划分为休眠准备部分。

suspend_prepare函数的主要作用如下:

(1) 用一个全局变量保存好控制台。

(2) 执行pm_noTIfier_call_chain函数,该函数调用notifier_call_chain函数来通知事件(将休眠)的到达。

(3) 冻结进程,这通过freeze_processses函数实现。

在suspend_devices_and_enter函数中执行剩余的休眠准备工作:

(1) 调用suspend_ops-》begin.

(2) 调用suspend_cONsole函数获取控制台信号量以休眠控制台。

(3) 调用dpm_suspend_start函数,该函数分为两步。

首先调用device_prepare,该设备准备函数通常无操作;然后调用device_suspend函数,使设备驱动进入休眠模式。

在该函数中,系统会遍历dpm_active链表,为该链表上的每个驱动调用suspend函数(该函数负责挂起设备驱动),正常返回后会将其移至 dpm_off链表队列。至此,已完成休眠准备部分的工作。下面以音频驱动为例展示设备驱动suspend函数的填写(函数头略):

int ;


上一页 1 2 3 下一页

关键词: SEP0611 电源管理

评论


相关推荐

技术专区

关闭