引言
AXP192 是KrossPower公司的一款高度集成的电源系统管理芯片(PMIC),具有可定制、初始化多路输出电压、可编程设置各路输出电压、体积小、加工方便和价格便宜等优点。配合S5PV210使用,可减少核心供电使用独立电源数量,同时减小PCB使用面积,动态调节核心电压,智能管理最小系统电源,最大程度降低设备使用功耗,从而达到延长设备使用寿命的目的。相比三星配套推荐的WM8310,在同样满足功能和性能稳定的基础上,AXP192加工方便、价格便宜、供货稳定和周期短是其最大的优势。
1 硬件设计
1.1 S5PV210电源设计与上电时序
S5PV210工作模式有正常、待机、休眠3种。根据这3种工作模式,分析各路电源需要的电流大小、上电时间先后、使用电压的大小等,将S5PV210的电源分成几组,合并可以一起供电的电源,在满足3种工作模式的前提条件下,尽可能优化电源的供给,减少独立电源的使用。根据优化后的电源设计,S5PV210最小系统只需要3路DCDC和7路LDO便可以正常工作,AXP192能提供7路电源,因此只需要额外增加3路独立的LDO。本设计方法相比AXP192为CortexA8内核处理器推荐的设计减少了5路独立电源,大大减少了独立电源芯片的使用,这也是本设计的优势所在。
AXP192具有3路DCDC以及4路LDO,各路特性如表1所列。
7路电源输出除了LDO1是固定电压输出外,其他6路电源均可通过I2C总线控制接口打开或者关闭其输出,并可设置它们的电压大小。
根据AXP192各路电源的驱动能力和S5PV210电源对电流大小的要求,将DCDC1和DCDC3分别接到S5PV210的内核电源VDD_INT_AP和VDD_ARM_AP,这两个内核电压随着ARM内核、总线工作频率做相应的调节,以实现正常工作情况下最优的功耗。DCDC2给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上电时序要求
根据S5PV210上电时序要求设定3步上电顺序,每步上电延时间隙均为4 ms。具体上电时序分配为:第1步上电DCDC2,并用DCDC2作为LDO4的输入使其同时上电;第2步上电DCDC1和DCDC3,并用DCDC1使能LDO5;第3步上电剩余的LDO。按此设计的供电方式简单有效,S5PV210每次都能正常开机,并且运行稳定。
1.2 AXP192与S5PV210通信接口设计
AXP192通过I2C总线接口与S5PV210通信。工作时,I2C总线引脚上拉到系统I/O电源,S5PV210可以通过这个接口去打开或关闭某些电源输出,设置它们的电压,访问内部寄存器和多种测量数据等。其他系统管理如复位信号、休眠信号、中断信号等接口如图2所示。
图2 AXP192与S5PV210通信接口设计
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\\n",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的QFN48封装比WM8310的0.4 mm间距焊球容易加工和维修,而且PCB设计走线要求比WM8310低。其他方面(如价格、供货周期等)都有极大的优势。
利用AXP192多路可编程电源输出及其高性能的特点,将其运用于手持设备的CPU电源管理,结合Linux操作系统实现电压可动态调节及休眠唤醒等功能,对设备电源开关管理和系统功耗的降低起了重要作用,从而延长使用电池供电的手持设备工作时间。AXP192功能高度集成,芯片尺寸小,适合密度要求越来越高的PCB板使用,使手持设备更加小型化,极高的性价比使其非常适用于大量生产的手持设备。此设计已经成功应用于广州中海达测绘仪器有限公司的7寸工业平板上,经过批量生产和市场的使用检验,产品工作稳定可靠,此方案设计使得产品具有一定的市场竞争力。