登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
单片机应用于方案
›
基于SEP0611的电源管理驱动设计方案
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版
基于SEP0611的电源管理驱动设计方案
[复制链接]
1018
0
ad***
管理员
发表在
电源技术
2014-4-14 09:37:16
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
0 引言
系统休眠是嵌入式系统除关机外最省电的一种状态。休眠(Suspend, STR (Suspend To RAM )),又称为挂起或者挂起到
内存
,会将目前的运行状态数据存放在内存,并关闭硬盘、外设等设备,进入等待状态,此时除了内存仍然需要电力维持其数据,整机其余部分耗电很少。
恢复时处理器从内存读出数据,回到挂起前的状态,恢复速度较快。一般在
电池
无故障且充满电的情况下可以维持这种状态数天之久。
1
SEP
0611和
电源
管理单元硬件设计
SEP0611是东南大学自主研发的一款基于Un
iC
ore32内核的32位高性能、低功耗RISC微处理器,是定位于手持播放设备、卫星导航产品的高性能处理器。主要分为五个部分:系统与时钟控制、外设接口、多媒体系统、
GPS
系统和存储系统。系统与时钟控制部分包含了电源管理单元(
Power
Management Unit, PMU)的设计。
PMU包括时钟控制和功耗控制两部分。功耗控制主要负责在各个工作模式下的切换,进入低功耗模式后的唤醒,以及系统的复位控制。系统工作模式主要分为三种:正常工作模式、挂起模式、休眠模式。
2 Linux
APM
技术
图1 Linux APM技术架构图
图1是APM技术在Linux中的架构图。用户通过用户态的APM接口或策略向B
IO
S申请休眠请求,BIOS设备接收到用户层的休眠请求后会调用内核低功耗层的接口函数,从而实现系统进入休眠的一
系列
操作;在接收到唤醒信号后内核低功耗层会执行唤醒操作,与此同时低功耗层也会调用外设驱动的电源管理接口让设备跟随系统实现唤醒。SEP0611无BIOS,系统唤醒后会回到bootloader执行。
3 系统休眠的内核层分析与驱动设计
Linux系统休眠内核层是整个休眠部分的核心。它将接受上层休眠命令,并通过驱动层使外围设备进入相应的suspend状态等,在得到唤醒信号后将恢复状态继续运行。它包括了体系结构无关的部分:当前进程的冻结/释放,管理外围驱动;也包括了体系结构相关的部分:让处理器进入/退出休眠,DDR进入自刷新指令序列,系统状态保存/恢复等。本小节由休眠准备,休眠进入和休眠退出,完成唤醒三部分组成。
3.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 i;
volatile unsigned long *p_regs = i2s_info.base;
i2s_regs = kmalloc((I2S_PM_REGS_NUM 《 2),
GFP_KERNEL);
if(i2s_regs == NULL)
return -ENO
MEM
;
for(i=0; i
i2s_regs
= *p_regs++;
clk_disable(i2s_info.clk);
return 0;
这段代码主要实现:保存音频设备硬件寄存器;禁止音频设备时钟。
3.2 休眠进入和休眠退出
完成了进入休眠的准备工作,接下来就是进入休眠。
suspend_enter是休眠进入函数,该函数将调用suspend_ops->enter(state),调用该函数即是调用SEP0611驱动接口函数sep_pm_enter;该接口函数在sep_pm.c中实现。该文件将保存在
CPU
寄存器,将休眠代码搬运到sram中,然后系统在sram中执行休眠代码,先让DDR进入自刷新状态,而后处理器进入sleep模式。当系统处于休眠模式时,一旦接收到唤醒事件的中断,如内部的
RTC
AL
ARM
中断或者外部的Wakeup按键信号才能够让系统退出休眠,即唤醒系统。综上,进入/退出休眠的代码流程图如图2所示。
图2 进入/退出sleep模式的代码流图
在图2中的休眠进入部分,保存CPU各模式状态之后,跳转到sram执行DDR2的自刷新和休眠的进入,而这段代码(DDR2的自刷新和休眠的进入)此前已由copy_func_to_sram函数搬运至sram中;而跳转通过将sram的物理地址静态映射到linux内核(在对应架构的mm.c中)实现。
此后,系统处于休眠(sleep)模式,直至唤醒信号的到来。
SEP0611中可用的唤醒信号有:电源键、RTC的ALARM中断、外部GPIO(AO)口。一旦唤醒信号到来,即是该执行休眠退出部分了。PMU硬件部分将让系统重新上电,而软件则回到bootloader部分执行,在bootloader中有一段分支代码,该部分代码判断是一次正常启动还是一次从休眠的唤醒,若是后者,则恢复CPU各模式状态,此后回到linux操作系统。需要说明的是,在进入休眠部分的保存CPU各模式状态之前,PC值(用于返回的地址,实际保存的是PC值加上0x10(合4条指令))已经被保存到一个硬件寄存器中;因此,在退出休眠部分的恢复CPU各模式状态之后,将PC值从硬件寄存器取出,通过其使程序回到linux操作系统执行。
3.3 完成唤醒
上面讲到了程序回到linux系统执行后,休眠内核层将通过suspend_devices_and_enter函数中位于调用suspend_enter之后的部分和suspend_finish函数完成与休眠准备相逆的操作。
首先在suspend_devices_and_enter函数中执行以下完成唤醒的工作:
(1)调用dpm_suspend_end函数,该函数分为两步。
首先调用设备唤醒函数device_resume,该函数会遍历dpm_off 链表队列,依次调用该队列上设备驱动的resume函数,让驱动恢复正常工作模式,并将其从dpm_off 队列恢复至dpm_active 队列。然后调用device_complete函数,该函数通常无操作。下面仍以音频驱动为例展示设备驱动resume函数的填写(函数头略):
int i;
volatile unsigned long *p_regs = i2s_info.base;
clk_enable(i2s_info.clk);
init_i2s_gpio();
for(i=0; i
*p_regs++ = i2s_regs
;
kfree(i2s_regs);
i2s_regs = NULL;
return 0;
这段代码主要实现:
(1)使能音频设备时钟;初始化音频相关的GPIO口;恢复音频设备硬件寄存器。
(2)调用resume_console函数释放控制台信号量以唤醒控制台。
(3)调用suspend_ops->end.
其次suspend_finish函数完成与suspend_prepare函数相逆的操作:
(1)唤醒进程,通过thaw_processses函数实现。
(2)执行pm_notifier_call_chain函数,该函数调用notifier_call_chain函数来通知事件(完成唤醒)的到达。
(3)从全局变量恢复控制台。
至此,系统完成唤醒,且系统中所有的设备驱动能正常工作。
4 驱动验证
4.1 验证环境和方法
驱动验证在江苏东大集成电路有限公司生产的功耗测试板上进行,该测试板编号为:SEUIC东集
PCB
602
_DEMO0611,生产日期为2011.05.13.测试时:CPU运行在800MHz,
AHB
总线运行在180MHz,DDR运行在
400
MHz;测试板采用4路
LDO
供电,4路分别为core、arm、ddr_
phy
、cpu_io.测试方法为:1)用万用表的毫安档测试
电流
,每测一路,要将该路的0Ω
电阻
吹掉,将万用表串入电路,同时保证其他路的0Ω电阻连接。2)通过操作linux操作系统中sysfs文件系统提供的接口让测试板进入休眠,即是在终端输入命令:echo mem > sys/power/state.3)通过电源键(或RTC定时中断)唤醒系统,唤醒后验证设备驱动功能。
4.2 验证结果
测试的0Ω电阻上的电流值如表1所示。b-s(mA)列代表系统休眠之前某电阻上的电流值;i-s(mA)列代表系统休眠之时某电阻上的电流值;a-s(mA)列代表系统完成唤醒时某电阻上的电流值;最后一列除了包含了上面提到了4路外,还包含DDR颗粒(ddr_mem)和外设(io)这两路。
表1 各0Ω电阻上的电流值
在休眠之前和完成唤醒后,系统都处于空闲模式。
phy、cpu_io这四路的电流下降为0,因为这4路电压都为0,而此时DDR颗粒和外设上分别有14mA和
17
mA的电流。在测量各路电流的同时,还采用
稳压
源供电,测试了板级总电流:系统休眠之前的板级总电流为287mA,休眠之时为
23
mA,完成唤醒时为
284
mA.
在系统完成唤醒后,测试了系统中所有设备驱动的工作情况:系统中的包括TIMER、CPU这样的系统设备工作正常;系统中的外设驱动包括UART、LCDC、I2C、I2S、SDIO、NAND、
USB
等都能正常工作。
5 结论
由于在系统休眠时4路LDO的掉电和除常开区外各路时钟的切断,系统休眠的电流降到了23mA.这个数值为系统运行时的8%,大大降低了系统的功耗。目前的休眠电流主要消耗在DDR颗粒和外部io上,这都有改进的空间,例如:可以通过配置DDR控制器优化DDR时序、打开DDR的低功耗模式;采用具有更低功耗的DDR3颗粒;可以检查整板电路,是否在测试板休眠时有回路导致电流泄漏;可以检查io电路,等等。总体来说,本设计实现了SEP0611处理器板级的休眠和唤醒、所有设备驱动的休眠和唤醒;完成了电源管理驱动的设计;并在功耗测试板上验证了驱动的正确性。这对以后管理、降低SEP0611平台的整板功耗有重要意义,对其他平台下的电源管理驱动也有一定的借鉴意义。<
嵌入式
,
外设
相关帖子
单片机攻城狮如何快速入门嵌入式Linux?
作为一个新人,怎样学习嵌入式Linux?
中兴资深工程师,嵌入式专家韦东山是这样炼成的!
飞凌嵌入式OK335xS-II样板免费申请活动持续进行!
嵌入式学习心得
jz2440-中断学习出现的错误及查找方法
本人工作10年总结文档——《嵌入式操作系统内核调度》
飞凌嵌入式发布双核i.MX6DL开发板|imx6DL开发板|imx6
飞凌嵌入式充电桩解决方案
资源分享:嵌入式Linux基础全套视频教程!
举报
回复
返回列表
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
抗干扰LED数码管显示屏驱动芯片/3线串行接
VK1Q68D是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片。内部集成有3线
抗干扰能力强/点阵数显LED屏驱动/数码管驱
VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串
可支持14×4的点阵LED显示面板数码管LED驱
VK1624是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁 存
数显驱动器原厂-数显LED显示驱动芯片VK1620
VK1620B是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、 数据锁
抗干扰数显驱动数码管LED驱动芯片VK1618 SO
产品品牌:永嘉微电/VINKA 产品型号:VK1618 封装形式:SOP18/DIP18 概述 VK161
更多
精华推荐
数显屏驱动原厂-VK1668 SOP24抗干扰数显LED
抗干扰LED数码管显示屏驱动芯片/3线串行接
抗干扰能力强/点阵数显LED屏驱动/数码管驱
可支持14×4的点阵LED显示面板数码管LED驱
数显驱动器原厂-数显LED显示驱动芯片VK1620
抗干扰数显驱动数码管LED驱动芯片VK1618 SO
VK1616 SOP16/DIP16点阵LED数显驱动芯片/数
点阵数显驱动芯片/LED数码管显示屏驱动VK16
更多
社区学堂
抗干扰LED数码管显示屏驱动芯片/3线串
抗干扰能力强/点阵数显LED屏驱动/数码
抗干扰LED数码管显示屏驱动芯片/3线串行接
VK1Q68D是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片。内部集成有3线
抗干扰能力强/点阵数显LED屏驱动/数码管驱
VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串
可支持14×4的点阵LED显示面板数码管LED驱
VK1624是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁 存
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表