linux时钟与电源管理,SOC的时钟和电源管理

SOC的时钟和电源管理

(2013-04-27 18:58:07)

标签:

it

dm3730

时钟

linux

电源

现在的SOC,因为多用做手持设备,所以在节省能源方面都不遗余力。我看原因到不是为了降低碳排放,而是为了让一块电池能够用的时间更长。当然,这自然就减少了能源消耗。

节电的首要措施,当然就是芯片本省的能耗,那么低压运行自然节省能耗,且不降低运算能力!然而,越是低压,对电路要求就越高,因为此时0和1的差距就越小。

降低运行时的时钟频率,也可以节省能耗。不幸的是,降低频率将直接影响性能。因此,一般的设计都是在CPU比较空闲时,降低频率。这就开始需要有软件的配合了。

能够通过软件关闭某个当前不被使用的部件的电源,是另外一个方法。现代SOC的硬件设计,都是将芯片划分为几个,甚至几十个电源域(Domain)。每个域有自己的开关,软件可以控制。一般的设计,都存在一个永不断电的域(只要主电源在供电),通常叫Wakeup域。处在这个域内的部件,任何时候都在工作,以期探测到某个事件的发生,唤醒其它模块。就是打开其它模块的开关,重新开启它们。

降低能耗所采用的办法里面,关闭时钟或是改变时钟频率,是最复杂的手段。关闭时钟,但是并不关闭电源!能耗也会比较明显地降低,当然不如直接关闭电源更节省,但是它有优点,恢复起来极快!因此,在时钟极其管理这里,SOC都非常复杂。至少对于我这个只懂服务器的人来讲如此。过去的服务器那里有能用软件控制开关时钟的说法?我是一无所知!

一块单板(SOC)里面的所有时钟,基本上构成一颗树。就是说有一个或两个外部驱动时钟,通过一些倍分运算,最后生成很多时钟信号。因为每个控制器,外设,都需要一个或多个时钟驱动。例如Beagleboard-xm单板,采用两个外部时钟驱动:一个32KHz的低频驱动,一个26MHz的高频驱动。而它所用的DM3730上的HS

USB控制器,需要六个时钟驱动。

每个时钟,有一个信号源,做为它产生时钟信号的基础。也就是说,它有一个父时钟。它还可能有个开关,以控制是否输出时钟信号。它还可能有一个倍频和/或分频(除)器,输出特定(和父不同)的频率信号。它也还可能有个旁路信号源,就是在它没有设置完成(通常是刚启动)时,它直接输出这个信号。当然,这个旁路源,通常也就是它的基础信号源。不过有个别时钟,它有另外一个不同的旁路信号源!

SOC的每个外设用两个时钟驱动,是比较好的省电方案。一个负责驱动接口,另外一个负责内部工作。例如计数器,停止它的接口时钟,它一样在计数,只是此时外部模块(如CPU)无法读到计数器内容而已。只有停止了负责它内部工作的时钟,它才停止计数。当然,也可以只有一个时钟,既负责驱动接口,也负责驱动内部工作。

Linux内核里面有时钟,和时钟域的概念。我始终不能完全理解一个时钟域。按照TI手册定义,是共用一个时钟开关。那么每个带有开关功能(Gate)的时钟和它的后代,就构成一个时钟域。但是这个理解有很大问题,因为手册说,时钟域不能跨电源域。但是按照有开关的父时钟这个定义上去,最后发现大家都属于一个时钟域了,因为大家都是被某两个外部时钟的其中之一所驱动。所以,我看不如干脆理解成一个电源域内的所有时钟就好了。

五一假期,没有打算去哪里。看看能否将LINUX官方内核在Beagleboard-xm上启动时,USB报出的时钟告警问题解决。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值