/**
******************************************************************************
* @author Maoxiao Hu
* @version V1.0.0
* @date Feb-2015
******************************************************************************
* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >
******************************************************************************
**/
开发板:迅为4412精英版。
uboot:uboot-2014-10。
PMIC:SAMSUNG S5M8767A
在移植新版u-boot的时候,上网搜电源管理芯片的使用方法资料,发现几乎没有,就算是datasheet也很难下载得到,不知是何原因?我只能理解成这部分知识比较简单,没人愿意写吧。但记录一下原理和使用方法做为备忘,总归没有什么坏处。另外仍然需要提前声明的是,这里只提供官方手册推荐的配置方法,自由玩法不保证可行及稳定性。
一、概览
S5M8767A有9路BUCK和28路LDO,暂且可以当成共有37路供电电路。这37路供电电路最低可以使用6.25mV的步进电压,多达60多个电压档位可以做到对输出电压的精确控制。另外S5M8767A还有一个硬件RTC,可以在有外部电池供电的情况下保存时钟信息。
二、PMIC与uboot的关系
uboot按模块初始化硬件,有其自己的代码顺序,这就要求PMIC在特定的时间点给特定的硬件提前提供电源,以供uboot进行初始化配置。否则uboot的执行必然失败,例如PMIC需要在eMMC初始化前对其两路电源进行供电。
另外PMIC的初始化时间在uboot里有其默认的时间点,但是这个时间点还是与核心板与底板的实际电路密切相关的,需要根据实际需要提前或延后。
2.0 PMIC中BUCK与LDO的分类
PMIC中的BUCK和LDO都大概可以分成两种:
一种是PMIC上电即可直接输出电压的BUCK和LDO。
另一种是PMIC上电不输出电压,需要使用i2c对PMIC配置后才可输出电压的BUCK和LDO。
2.1 PMIC与DDR的关系
对于4412来讲,DDR的初始化是在BL2中进行的,这时如果使用汇编初始化硬件i2c来对PMIC进行配置个人感觉没有什么意义,所以DDR的电源需要连接到PMIC的默认ON的BUCK上,即PMIC上电即可直接输出电压的BUCK,不需代码配置。
S5M8767A推荐使用BUCK5做为DDR的电源,
但是,BUCK5这里的默认输出是1.2V,DDR需要的是标准1.5V,问题出在哪里?
三星早就替我们考虑好了这个问题,为了适配不同类型的DDR,BUCK5可以通过K9 K10两个引脚的电平搭配,输出四种默认电压:
在这里,迅为的开发板是这样设置的:
这样一来,B5S1:B5S2 = 1:0 即BUCK5输出1.5V电压,正好与DDR的需求相吻合。
2.2 PMIC与4412主芯片的关系
给ARM核芯提供电压的是PMIC的BUCK2,BUCK2也是默认ON的,默认输出1.1V。经过查阅4412 spec后,需要注意的是,在1.1V电压下,给ARM核心提供时钟的APLL最大只能输出1000MHz,即刚上电时如果不设置PMIC,ARM核心只能工作在1000MHz,无法使用最高频率1.4GHz。
三、PMIC的设置方法
3.1 通信协议
S5M8767A使用I2C协议与4412进行通信,从机地址分为两部分,PM(Power Manager)和RTC,也就是说PM和RTC的寄存器地址是分开的,可以看作两个单独芯片。
3.2 举例
以BUCK1举例说明寄存器设置方法,其它BUCK和LDO基本类似,需要时认真阅读手册即可:
BUCK1有两个8位控制寄存器,
CTRL1的低6位可以按照默认值设置即可,高两位需要解释一下,00和1x的意思就不需解释了,01的意思是 BUCK1的开关由PWREN外部引脚控制,而这个PWREN引脚一般与4412的XPWRRGTON引脚连接在一起,这个XPWRRGTON是由CPU自动控制的,CPU处于休眠状态此脚为低,工作状态此脚为高,就是说CPU一旦退出休眠状态,PMIC就会给所有受PWREN控制的BUCK & LDO上电。
CTRL2就是控制BUCK2输出电压的,6.25mV的步进值,需要多少电压自行计算然后写入即可。
四、引用高手的PMIC技术贴
----------------------引用开始--------------------------------
什么是PMU(PMIC)
PMU(power management unit)就是电源管理单元,一种高集成的、针对便携式应用的电源管理方案,即将传统分立的若干类电源管理芯片,如低压差线性稳压器(LDO)、直流直流转换器(DC/DC),但现在它们都被集成到手机的电源管理单元(PMU)中,这样可实现更高的电源转换效率和更低功耗,及更少的组件数以适应缩小的板级空间,成本更低。
PMU作为消费电子(手机、MP4、GPS、PDA等)特定主芯片配套的电源管理集成单元,能提供主芯片所需要的、所有的、多档次而各不相同电压的电源,同电压的能源供给不同的手机工作单元,像处理器、射频器件、相机模块等,使这些单元能够正常工作。按主芯片需要而集成了电源管理,充电控制,开关机控制电路。包括自适应的USB-Compatible的PWM充电器,多路直流直流转换器(BuckDC-DCconverter),多路线性稳压器(LDO),Charge Pump,RTC电路,马达驱动电路,LCD背光灯驱动电路,键盘背光灯驱动电路,键盘控制器,电压/电流/温度等多路12-BitADC,以及多路可配置的GPIO。此外还整合了过/欠压(OVP/UVP)、过温(OTP)、过流(OCP)等保护电路。高级的PMU可以在USB以及外部交流适配器、锂电池和应用系统负载之间安全透明的分配电能。动态电源路径管理 (DPPM) 在系统和电池充电之间共享交流适配器电流,并在系统负载上升时自动减少充电电流。调整充电电流和系统电流分配关系,最大程度保证系统的正常工作,当通过 USB 端口充电时,如果输入电压降至防止 USB 端口崩溃的阈值以下,则基于输入电压的动态电源管理 (IDPM) 便减少输入电流。当适配器无法提供峰值系统电流时,电源路径架构还允许电池补偿这类系统电流要求。
LDO是利用较低的工作压差,通过负反馈调整输出电压使之保持不变的稳压器件。压差小的话用LDO,带可关断功能便于电源管理。压差大的还是用DC-DC效率高。
按照系统需要能提供多种电压的电源,这些电压是电压调整所需的,另外这些电源还可以与功能同步开、关这些供电电压,以支持电压域切换。
PMU一般是和主芯片绑定定制的。因为它要配合CPU的上电时序。某些电压的上电顺序和之间的时间间隔有先后关系和时间要求。这个是掩模好的。PMU其实是带有掩模程序的专用电源控制器。要32.768KHZ的晶体和19.2M的晶体.待机状态是32.768KHZ的晶体工作,正常工作是19.2M的主晶体工作。
靠上电池后PMIC进入待机状态,PMU由32.768KHZ的晶体提供时钟,按POWER按键触发开机后,按照定制的开机顺序将对应的LDO,DC-DC打开,19.2M的主时钟工作,CPU电源正常后,输出设置给CPU,输出复位信号给CPU,释放复位信号,CPU开始启动。CPU输出PS_HOLD信号将PMIC的状态处于工作状态。(关机的时候CPU将PS_HOLD拉低电,PMIC关闭进入关机状态)
CPU工作正常后,可以通过I2C接口对PMIC的各个模块进行控制。比如系统变频的时候,不同的工作频率要调整core电压到对应的电压。RTC时间的设置和ALARM的时钟。同时PMIC可以将异常事件产生中断信号给CPU,CPU再进行中断处理。
PMIC的电源越多,对系统的模块供电就越细,各个模块的电源受牵连就小,所以就越省电。
----------------------引用结束--------------------------------
参考资料:
[1] SEC_S5M8767A01-6070_Data Sheet_Ver.0.10.00_Preliminary.pdf
[2] DS_K4B2G1646Q-BC_Rev103.pdf
[3] SEC_Exynos 4412 SCP.pdf
- IM2603设计资料 Type-C拓展坞电源管理芯片
应用于Type-C拓展坞外围集成Buck变换器的电源管理芯片 IM2603 IM2603 概述 用于带有集成降压转换器的 Type-C 外围应用的电源管理 IC IM2603 是一款主要用于 Type ...
- IM2603资料 Type-C 扩展坞电源管理芯片
用于带有集成降压转换器的 Type-C 外围应用的电源管理 IC IM2603 是一款主要用于 Type-C 外围应用的电源管理 IC. 它集成了一个带有内置高侧 MOSFET 的同步降压转换器和一个 ...
- 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...
- intel电源管理技术中I2C和SVID
1.I2C总线架构图: 2.Gemini Lake平台所支持的PMIC 是哪种类型? POR 是SVID PMIC, i2c PMIC 会影响性能. 3.SerialVID, 总共有三个信号线 时钟( ...
- Linux电源管理(2)-Generic PM基本概念和软件架构【转】
本文转载自:http://www.wowotech.net/pm_subsystem/generic_pm_architecture.html 1. 前言 这里的Generic PM,是蜗蜗自己起的名 ...
- exynos 4412 eMMC配置及使用方法
/** ****************************************************************************** * @author Maox ...
- 支持动态调频_配置AXP228电源管理_4核8核兼容设计_iTOP-4418/6818开发板
iTOP-4418/6818开发板 支持动态调频,AXP228电源管理, 系统支持:Android4.4/5.1.1.Linux3.4.39.QT2.2/4.7/5.7.Ubuntu12.04 内存: ...
- [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文
综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...
- BQ24296充电管理芯片使用过程中的注意事项
BQ24296遇到的一点问题 概述:BQ24296是TI出品的具有窄范围VDC控制.基于I2C通讯的最大支持3A充电电流的开关式电源路径管理芯片.可以轻松实现2A以上的大电流充电,能量转换效率达到90 ...
随机推荐
- nginx平滑重启与平滑升级的方法
如何实现nginx平滑重启与平滑升级? 平滑重启 kill -HUP `cat /usr/local/www/nginx/logs/nginx.pid` 平滑升级nginx: cd /yujialin ...
- NULL, '\0',0 '0'的区别
如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样: 1.NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内 ...
- 40 JavaScript Chart and Graph Libraries for Developers--reference
reference:http://www.egrappler.com/javascript-chart-and-graph-libraries-for-developers/ BY TEAMEGRAP ...
- C. Ilya and Sticks
C. Ilya and Sticks time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 1.5.6 Filters
Filters 过滤器filter应该跟在tokenizer或者另一个filter之后.因为它们将TokenStream作为输入源. <fieldType name="text&quo ...
- SolrEntityProcessor
SolrEntityProcessor从不同的solr实例和内核中引入数据,这个数据是基于指定的或者是过滤的查询来获取到的.如果你需要复制索引,并且小幅度的修改目标索引文件中的数据,那么可以使用Sol ...
- Windows OpenVPN Client and tls-auth
The official Windows OpenVPN client does not seem to work properly with the tls-auth option if a key ...
- iOS7.1 编译报错 解决方案 体会
iOS升级到 iOS 7.1 了 ,开发人员必须与时俱进.果断下载更新了xcode5.1版本 ,试运行了一下已上线的应用,哇 报错了!好头疼 贴下报错地方: 都是关于第三方类库报的错 比如parse. ...
- oracle优化辅助SQL语句
--查询正在执行的SQL语句 select a.program, b.spid, c.sql_text,c.SQL_FULLTEXT,c.SQL_ID from v$session a, v$proc ...
- python 基础——常用功能片段
1. 元素去重 data = [1,2,3,4,4,5,5,6] res = set(data) 2. 元素去重排序 res = sorted(set(data)) 2. 打印重复的元素 res = ...