开发板:迅为4412精英版。
uboot:uboot-2014-10。
PMIC:SAMSUNG S5M8767A
在移植新版u-boot的时候,上网搜电源管理芯片的使用方法资料,发现几乎没有,就算是datasheet也很难下载得到,不知是何原因?我只能理解成这部分知识比较简单,没人愿意写吧。但记录一下原理和使用方法做为备忘,总归没有什么坏处。另外仍然需要提前声明的是,这里只提供官方手册推荐的配置方法,自由玩法不保证可行及稳定性。
一、概览LDO和BUCK的概念:请参考《嵌入式电路中的BUCK VS LDO》。
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)