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.基本概念
PMIC: Power Management IC电源管理IC
相关接口代码:
U32 pmic_config_interface (U32 RegNum, U32 val, U32 MASK, U32 SHIFT)
preload:alps\mediatek\platform\mt6582\preloader\src\drivers\pmic_6323.c
lk:alps\mediatek\platform\mt6582\lk\mt_pmic.c
kernel:alps\mediatek\platform\mt6582\kernel\drivers\power\pmic_mt6323.c
LDO: 是low dropout regulator,意为低压差线性稳压器,LDO类的电源转换芯片。
相关接口定义:
alps\mediatek\platform\mt6582\kernel\core\mt_pm_ldo.c
2.上电、掉电配置方法(preload 、lk、 kernel、系统启动后四个阶段):
2.2 kernel 阶段配置:
2.3系统启动后阶段配置:
系统正常启动后,kernel都是跑起来的,所以上电/掉电的操作都应该放在kernel里面。
3 驱动电压修改:
lcm vgp1驱动电压:
\alps\mediatek\custom\common\kernel\lcm\rgb_mt8193\rgb_mt8193.c
static void lcm_init(void){
upmu_set_rg_vgp1_vosel(0x7);//驱动电压修改--->pmic_config_interface()
upmu_set_rg_vgp1_en(0x1);
}
mt6323 电压等级对应文件:
\alps\mediatek\platform\mt6582\kernel\drivers\power\pmic_mt6323.c
举例说明:vgp1电压等级映射表:
void dct_pmic_VGP1_sel(kal_uint32 volt)
{
if(volt == VOL_DEFAULT) { upmu_set_rg_vgp1_vosel(5);}
else if(volt == VOL_1200){ upmu_set_rg_vgp1_vosel(0);}
else if(volt == VOL_1300){ upmu_set_rg_vgp1_vosel(1);}
else if(volt == VOL_1500){ upmu_set_rg_vgp1_vosel(2);}
else if(volt == VOL_1800){ upmu_set_rg_vgp1_vosel(3);}
else if(volt == VOL_2000){ upmu_set_rg_vgp1_vosel(4);}
else if(volt == VOL_2800){ upmu_set_rg_vgp1_vosel(5);}
else if(volt == VOL_3000){ upmu_set_rg_vgp1_vosel(6);}
else if(volt == VOL_3300){ upmu_set_rg_vgp1_vosel(7);}
else{
}
}