电源管理芯片AXP192在手持设备上的应用
2014-09-06邹劲林超杨琦
邹劲,林超,杨琦
(广州中海达卫星导航技术股份有限公司,广州 511400)
电源管理芯片AXP192在手持设备上的应用
邹劲,林超,杨琦
(广州中海达卫星导航技术股份有限公司,广州 511400)
大多数移动或手持产品使用低功耗、高度集成的微处理器平台,需要多路供电电压和电池管理功能,电源管理芯片满足这些需求并具备其他特性。本文介绍了一种国产电源管理芯片AXP192应用在以三星S5PV210移动处理器为核心的工业平板上的方案,给出了AXP192与S5PV210的电源分配设计、上电时序以及AXP192控制接口原理设计和基于Linux操作系统的驱动程序设计,实现了电源的智能管理,达到降低功耗、延长设备使用时间的目的。
电源管理;手持设备;PMIC;Linux;S5PV210;AXP192
引 言
AXP192 是KrossPower公司的一款高度集成的电源系统管理芯片(PMIC),具有可定制、初始化多路输出电压、可编程设置各路输出电压、体积小、加工方便和价格便宜等优点。配合S5PV210使用,可减少核心供电使用独立电源数量,同时减小PCB使用面积,动态调节核心电压,智能管理最小系统电源,最大程度降低设备使用功耗,从而达到延长设备使用寿命的目的。相比三星配套推荐的WM8310,在同样满足功能和性能稳定的基础上,AXP192加工方便、价格便宜、供货稳定和周期短是其最大的优势。
1 硬件设计
1.1 S5PV210电源设计与上电时序
S5PV210工作模式有正常、待机、休眠3种。根据这3种工作模式,分析各路电源需要的电流大小、上电时间先后、使用电压的大小等,将S5PV210的电源分成几组,合并可以一起供电的电源,在满足3种工作模式的前提条件下,尽可能优化电源的供给,减少独立电源的使用。根据优化后的电源设计,S5PV210最小系统只需要3路DC-DC和7路LDO便可以正常工作,AXP192能提供7路电源,因此只需要额外增加3路独立的LDO。本设计方法相比AXP192为Cortex-A8内核处理器推荐的设计减少了5路独立电源,大大减少了独立电源芯片的使用,这也是本设计的优势所在。
AXP192具有3路DC-DC以及4路LDO,各路特性如表1所列。
7路电源输出除了LDO1是固定电压输出外,其他6路电源均可通过I2C总线控制接口打开或者关闭其输出,并可设置它们的电压大小。
根据AXP192各路电源的驱动能力和S5PV210电源对电流大小的要求,将DC-DC1和DC-DC3分别接到S5PV210的内核电源VDD_INT_AP和VDD_ARM_AP,这两个内核电压随着ARM内核、总线工作频率做相应的调节,以实现正常工作情况下最优的功耗。DC-DC2给DDR2内存和S5PV210的内存总线接口电路供电,其他各路LDO给S5PV210的I/O电路供电。根据电源分配,额外增加的3路独立LDO,其中LDO4供电VDD_ALIVE_AP,LDO5供电VDD_xPLL_AP,LDO6供电其他I/O电路。
表1 AXP192各路特性表
S5PV210有严格的上电时序要求,如图1所示。为了保证每次上电都能正确运行,各路电源的上电时序必须要满足其需求。AXP192除LDO1外的6路电源的上电时序均可配置,每步延时间隙分别有1 ms、4 ms和16 ms三种选择,上电步骤选择方式A则有7个上电顺序配置。
图1 S5PV210上电时序要求
图2 AXP192与S5PV210通信接口设计
根据S5PV210上电时序要求设定3步上电顺序,每步上电延时间隙均为4 ms。具体上电时序分配为:第1步上电DC-DC2,并用DC-DC2作为LDO4的输入使其同时上电;第2步上电DC-DC1和DC-DC3,并用DC-DC1使能LDO5;第3步上电剩余的LDO。按此设计的供电方式简单有效,S5PV210每次都能正常开机,并且运行稳定。
1.2 AXP192与S5PV210通信接口设计
AXP192通过I2C总线接口与S5PV210通信。工作时,I2C总线引脚上拉到系统I/O电源,S5PV210可以通过这个接口去打开或关闭某些电源输出,设置它们的电压,访问内部寄存器和多种测量数据等。其他系统管理如复位信号、休眠信号、中断信号等接口如图2所示。
2 驱动程序设计
应用中采用Android2.3.7操作系统,其内核是Linux2.6.35。在Linux系统中,I2C总线驱动由3部分组成,即I2C总线核心、I2C总线驱动和I2C设备驱动,其中I2C核心、I2C总线驱动Linux内核已经完善,因此,驱动程序的开发主要集中在AXP192设备驱动这一层,用来实现对AXP192各种功能的操作控制,其中主要是对其寄存器的读写操作。驱动实现的功能有系统开关机、各路电压的动态设置以及打开与关闭等。
Linux内核有两种编写I2C设备驱动方式:legacy方式和new style方式。应用中使用new style方式,其中重要的I2C_driver结构体为:
static struct i2c_driver axp192_pmic_driver = {
.probe = axp192_pmic_probe,
//当有i2c_client和i2c_driver匹配时调用
.remove = __devexit_p(axp192_pmic_remove),
//注销时调用
.driver = {
.name = "axp192", //设备名称
},
.id_table = axp192_ids,//匹配规则
};
下面介绍驱动中几个函数的具体实现方法。
(1) AXP192设备初始化函数
static int __devinit axp192_pmic_probe(struct i2c_client *client,const struct i2c_device_id *i2c_id){
struct regulator_dev **rdev;
struct axp192_platform_data *pdata = client->dev.platform_data;
struct axp192_data *axp192;
int i = 0, id, ret;
if (!pdata)
return -EINVAL;
axp192 = kzalloc(sizeof(struct axp192_data), GFP_KERNEL); //分配内存空间
if (!axp192)
return -ENOMEM;
axp192->rdev = kzalloc(sizeof(struct regulator_dev *) * (pdata->num_regulators + 1), GFP_KERNEL);
if (!axp192->rdev) {
kfree(axp192);
return -ENOMEM;
}
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { //检查I2C设备的功能
AXPDBG("i2c error");
return-ENODEV;
}
axp192->client = client; //将client赋值给全局变量
axp192->dev = &client->dev;
axp192->pdata = pdata;
i!2c_set_clientdata(client, axp192);
axp192_point = axp192;
mutex_init(&axp192->mutex); //互斥,防止线程卡死
return 0;
}
(2) I2C读函数
static int axp192_i2c_read(struct i2c_client *client, u8 reg, u8 *dest){
struct i2c_msg msg[2];
uint8_t buf0[4];
uint8_t buf1[8];
int ret;
ret = i2c_smbus_read_byte_data(client, reg);
if (ret < 0){
printk(KERN_ERR "i2c_transfer failed:%d ",ret);
return -EIO;
}
*dest = ret & 0xff;
}
(3) I2C写函数
static int axp192_i2c_write(struct i2c_client *client, u8 reg, u8 value){
return i2c_smbus_write_byte_data(client, reg, value);
}
(4) AXP192寄存器读操作函数
static u8 axp192_read_reg(struct axp192_data *axp192, u8 reg){
u8 val = 0;
mutex_lock(&axp192->mutex);
axp192_i2c_read(axp192->client, reg, &val);
mutex_unlock(&axp192->mutex);
return val;
}
(5) AXP192寄存器写操作函数
static int axp192_write_reg(struct axp192_data *axp192, u8 reg, u8 value){
mutex_lock(&axp192->mutex);
axp192_i2c_write(axp192->client, reg, value);
mutex_unlock(&axp192->mutex);
return 0;
}
具体的设备驱动完成后,将AXP192设备驱动的配置添加到相应的kconfig文件中,在配置内核选项时就可以把AXP192设备驱动添加到内核中,系统启动时可自动加载AXP192设备驱动。驱动设计成功后,可以编写相应的上层应用软件对AXP192驱动进行管理应用,如控制某个设备电源的开关等。
结 语
AXP192完全可替代三星配套推荐的WM8310使S5PV210正常工作。相比WM8310,AXP192可输出电源路数不多,需要额外增加3路LDO。但是,AXP192的QFN-48封装比WM8310的0.4 mm间距焊球容易加工和维修,而且PCB设计走线要求比WM8310低。其他方面(如价格、供货周期等)都有极大的优势。
[1] 李俊. 嵌入式Linux 设备驱动程序[M].北京:人民邮电出版社, 2008:206-230.
[2] 程昌南.ARM Cortex-A8硬件设计DIY[M].北京:北京航空航天大学出版社, 2012(10): 9-160.
[3] 胡文,宁世勇,李明俊,等. Android嵌入式系统程序开发(基于Cortex-A8) [M].北京:机械工业出版社,2013(2):194-200.
[4] 朱南浩,李正祥.嵌入式Linux中I2C设备驱动程序的研究与实现[J].微计算机信息,2010,26(4): 67-69.
[5] Samsung Electronics. S5PV210_Hardware Design Guide_Rev1.0[EB/OL].(2010-02)[2014-05].http://www.samsung.com/global/business/semiconductor/.
[6] X-powers. AXP19x EVM Guide [EB/OL].[2014-05]. http://www.x-powers.com/.
[7] X-powers. AXP192 Datasheet v1.13 [EB/OL].[ 2014-05]. http://www.x-powers.com/.
邹劲(学士),主要从事手持设备硬件开发。
Application of Power Management Chip AXP192 on Handheld Device
Zou Jin,Lin Chao,Yang Qi
(Product Research&Development Center,Hi-Target Survey Instruments Company Ltd.,Guangzhou 511400,Chian)
Because of making use of low-power and high-integrated microprocessor platform, most of mobile or handheld products require multiple supply voltages and battery management. Power management chip meets these needs and has other features.In this paper,domestic power management chip AXP192 is applied in the industrial tablet using Samsung S5PV210 mobile processor as the core.Through the designes of power distribution of AXP192 and S5PV210,power-on sequences,control interface of AXP192 and driver based on Linux, the intelligent management of power supply is realized so as to reduce power consumption and extend the use time of the equipments.
power management;handheld device;PMIC;Linux;S5PV210;AXP192
TP216
A
迪娜
2014-05-22)