摘要: 介紹一種智能電源管理芯片WM8310的應(yīng)用方案,其應(yīng)用在以三星S5PC100移動處理器為核心的手持設(shè)備上。文中給出了WM8310與S5PC100電源分配設(shè)計方法、上電時序,以及WM8310控制接口原理設(shè)計和基于Windows CE 6.0操作系統(tǒng)的驅(qū)動程序設(shè)計。
引言
WM8310是Wolfson公司推出的電源管理集成電路(PMIC)產(chǎn)品,具有完全可編程化可定制化和優(yōu)良的性能。WM8310在7 mm×7 mm的小尺寸上集成了ADC、實時時鐘、低壓差穩(wěn)壓器、降壓穩(wěn)壓器以及用于背光的升壓穩(wěn)壓器,提供了一個高集成度的PMIC解決方案。WM8310具有尺寸小、功能強等優(yōu)點,被多家手機廠商以及手持設(shè)備商采用,廣泛用于移動電話、導(dǎo)航設(shè)備以及媒體播放器等消費電子產(chǎn)品。
S5PC100是三星公司發(fā)布的一款ARM CortexA8內(nèi)核的移動處理器,主頻高達833 MHz.S5PC100處理器采用64位內(nèi)部總線構(gòu)架,內(nèi)含 32/32 KB數(shù)據(jù)/指令一級緩存、256 KB二級緩存。它的構(gòu)造基于三星的45 nm LP低功耗工藝技術(shù)S5PC100還包含強大的2D和3D硬件加速器。
1 硬件設(shè)計
1.1 S5PC100電源分配與上電時序
WM8310具有4路DCDC穩(wěn)壓器以及13路LDO穩(wěn)壓器。其中,2路DCDC同步降壓穩(wěn)壓器輸出電流達1.2 A,并具有硬件DVS(動態(tài)電壓調(diào)節(jié))功能;1路升壓DCDC穩(wěn)壓器輸出電壓達30 V,可驅(qū)動多個串行白光LED.還包括6路標(biāo)準(zhǔn)LDO穩(wěn)壓器和4路低噪聲LDO穩(wěn)壓器,另有3路低功耗LDO用于內(nèi)部電路。
WM8310的DCDC1與DCDC2具有DVS(動態(tài)電壓調(diào)試)功能,可以通過外部GPIO來切換輸出電壓,當(dāng)然每一路DCDC和LDO都可以通過I2C控制接口來調(diào)節(jié)輸出電壓。將DCDC1與DCDC2分別接到S5PC100的內(nèi)核電源(即VCC_ARM和VCC_INT),這兩個內(nèi)核電壓可以根據(jù)當(dāng)前處理器的運行頻率自動調(diào)節(jié)輸出電壓的大小并減小系統(tǒng)的功耗。DCDC3給DDR內(nèi)存和S5PC100的內(nèi)存總線接口電路供電。DCDC4用于LCD屏的背光驅(qū)動。其他各路LDO給S5PC100的I/O電路供電。
S5PC100的上電時序較為嚴格,如圖1所示。為了保證處理器每次上電能正確運行,電源設(shè)計要滿足其上電時序要求。WM8310可以為每一路DCDC以及LDO分配時序,非常容易滿足S5PC100的上電時序要求。
圖1 S5PC100上電時序
圖1中的時間大小如表1所列。
它描述了WM8310的各路輸出與S5PC100電源的連接以及每一路電源的上電時序。
表1 S5PC100的時間大小
1.2 外部EEPROM設(shè)計
WM8310上電的時候需要讀取外部EEPROM的數(shù)據(jù)來設(shè)定每一路DCDC和LDO的初始輸出電壓以及上電時序,外部EEPROM芯片通過I2C接口與WM8310連接,上電后WM8310自動讀出EEPROM第一頁的32字節(jié)數(shù)據(jù),WM8310的寄存器長度是16位的,所以外部EEPROM芯片要選2字節(jié)寬度的。WM8310與外部EEPROM的連接電路如圖2所示。
圖2 WM8310與外部EEPROM的連接電路
這32字節(jié)初始化數(shù)據(jù)除了保存在外部EEPROM中,也可以保存在WM8310內(nèi)部的OTP存儲器中,在WM8310芯片出廠的時候就把數(shù)據(jù)寫進內(nèi)部的OTP存儲器,以后就不能改變了。WM8310上電的時候檢測SCLK2引腳,如果發(fā)現(xiàn)是高電平,則讀取EEPROM的數(shù)據(jù)作為初始化數(shù)據(jù)。如果已將數(shù)據(jù)燒寫到WM8310的OTP存儲器中,則將SCLK2與SDA2引腳懸空。
本方案中WM8310的32字節(jié)初始化數(shù)據(jù)為:
0x7FFE,0x43BE,0x433E,0x602A,0x267F,0x6666,0x7F7F,0x7A7D,0x7D78,0x0000,0xA40C,0xA400
1.3 WM8310與S5PC100的控制接口
WM8310具有兩種控制接口,一種是I2C接口,另一種是SPI接口??梢赃x擇一個接口與CPU進行通信控制。WM8310的IREFR引腳是控制接口模式選擇端,若IREFR引腳接低電平則選擇I2C接口,反之則選擇SPI接口。本方案中選擇把WM8310的I2C接口與S5PC100的I2C0接口通信,WM8310控制接口如圖3所示。
圖3 WM8310控制接口2驅(qū)動程序設(shè)計
2.驅(qū)動程序設(shè)計
2.1 流驅(qū)動接口
本方案中采用Windows CE 6.0操作系統(tǒng),Windows CE 6.0操作系統(tǒng)的進程數(shù)由Windows CE 5.0的32個擴展到32 000個,每個進程的地址空間從32 MB擴展到2 GB,并且將代碼的運行權(quán)限分成用戶模式和內(nèi)核模式。驅(qū)動程序置于內(nèi)核模式,而應(yīng)用程序置于用戶模式有助于整個環(huán)境更可靠、更安全地運行。
Windows CE 6.0的驅(qū)動模式分為本地驅(qū)動和流式驅(qū)動,流式驅(qū)動為操作系統(tǒng)提供了標(biāo)準(zhǔn)流接口函數(shù),如XXX_Init()、XXX_Open()、XXX_Read()、XXX_Write()、XXX_Close()、XXX_IOControl()等。比如串口驅(qū)動、SPI接口驅(qū)動、I2C接口驅(qū)動等就是采用流式驅(qū)動。而本地驅(qū)動提供給操作系統(tǒng)的不是標(biāo)準(zhǔn)的接口,不同的設(shè)備接口也不一樣。常見的本地驅(qū)動有顯示驅(qū)動、觸摸屏驅(qū)動等。不管是本地驅(qū)動,還是流式驅(qū)動,所有驅(qū)動都是以DLL(動態(tài)鏈接庫)文件形式存在。
本方案中PMIC(WM8310)的驅(qū)動采用流式驅(qū)動。驅(qū)動實現(xiàn)的功能有系統(tǒng)開關(guān)機功能設(shè)置、DCDC與LDO動態(tài)電壓設(shè)置、背光亮度設(shè)置以及各路DCDC與LDO的打開與關(guān)閉等。具體的實現(xiàn)過程則是通過調(diào)用I2C驅(qū)動讀寫WM8310的寄存器。所有的功能通過PMU_IOControl()函數(shù)提供給操作系統(tǒng),PMU_IOControl()函數(shù)是一個標(biāo)準(zhǔn)的流式驅(qū)動函數(shù)。PMU_IOControl()函數(shù)的源代碼如下:
BOOL PMU_IOControl(DWORD pContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut){
BOOL RetVal=TRUE;
DWORD dwIndex;
if (NULL==pBufIn) {//檢查參數(shù)是否合法
SetLastError (ERROR_INVALID_PARAMETER);
RetVal=FALSE;
DEBUGMSG (ZONE_ERROR, (TEXT(“Invalid parameter\\r\\n”)));
return(RetVal);
}
switch(dwCode){
case IOCTL_PMU_REGULATOR_ON://打開DC DC/LDO
if((PMIC_Regulator_On((PMU_IO_DESC *)pBufIn))==FALSE){
SetLastError(ERROR_TIMEOUT);
RetVal=FALSE;
}
break;
case IOCTL_PMU_REGULATOR_OFF://關(guān)閉
DC DC/LDO
if((PMIC_Regulator_Off((PMU_IO_DESC *)pBufIn))==FALSE){
SetLastError(ERROR_TIMEOUT);
RetVal=FALSE;
}
break;
case IOCTL_PMU_SET_REGULATOR_VOLTAGE://設(shè)置DC DC/LDO輸出電壓
if((PMIC_Set_Regulator_Voltage((PMU_IO_DESC *)pBufIn))==FALSE){
SetLastError(ERROR_TIMEOUT);
RetVal=FALSE;
}
break;
case IOCTL_PMU_SET_BACKLIGHT_LEVEL://設(shè)置背光亮度等級
if((PMIC_Set_Backlight_Level((PMU_IO_DESC *)pBufIn))==FALSE){
SetLastError(ERROR_TIMEOUT);
RetVal=FALSE;
}
break;
case IOCTL_PMU_TURN_OFF://關(guān)閉設(shè)備電源
PMIC_Turn_Off();
break;
case IOCTL_PMU_IS_BACKLIGHT_ON://查詢背光是否打開
*pBufOut=PMIC_Is_Backlight_On();
break;
}
return(RetVal);
}
2.2 PMIC(WM8310)初始化
PMIC(WM8310)初始化主要完成開機鍵的時間設(shè)置,打開背光設(shè)置默認亮度,設(shè)置HWC功能實現(xiàn)CPU休眠喚醒電源控制。PMIC(WM8310)初始化函數(shù)為PMIC_Init(),源代碼如下:
DWORD PMIC_Init(HANDLE hIIC){
DWORD r, dwErr=0;
PMU_IO_DESC pmic_data;
hI2C=hIIC;//I2C驅(qū)動句柄
wm831x_reg_unlock();
wm831x_set_bits(WM831X_ON_PIN_CONTROL, 0x03ff, 0x0212); //設(shè)置關(guān)機時間為4s
wm831x_reg_lock();
wm831x_isink_enable(WM831X_CS1_BASE);//打開背光電流控制
dwErr=wm831x_isink_set_current(WM831X_CS1_BASE, 6889);//設(shè)置默認背光亮度
pmic_data.RegulatorIndex=VCC_BL;
pmic_data.pData=0;
pmic_data.Count=0;
if(!PMIC_Regulator_On(&pmic_data))dwErr=1;//打開背光設(shè)置HWC功能實現(xiàn)CPU休眠喚醒電源控制
wm831x_buckv_enable_hwc(WM831X_DC1_BASE,WM831X_DCDC_HWC_MODE_DISABLED,WM831X_DCDC_HWC_SRC_HC1);
wm831x_gpio_direction_in(0);//設(shè)置WM8310GPIO1 為輸入
wm831x_gpio_configuration(0, WM831X_GPN_POL_MASK, 0);//設(shè)置WM8310GPIO1 為低電平有效
wm831x_gpio_set_function(0, 0x0c);//設(shè)置WM8310GPIO1為HW Control1 input功能
return dwErr;
}
2.3 PMIC(WM8310)驅(qū)動調(diào)用示例
PMIC(WM8310)的驅(qū)動采用流式驅(qū)動,對其操作的方法就像操作文件的方法一樣非常方便。所有功能都通過調(diào)用DeviceIoControl()來實現(xiàn)。在此之前要先打開設(shè)備,代碼如下:
static HANDLE hPMIC;//PMIC設(shè)備句柄
hPMIC=CreateFile(PMIC_DRIVER_PORT,GENERIC_READ|GENERIC_WRITE,F(xiàn)ILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING, 0, 0);
if ( INVALID_HANDLE_VALUE==hPMIC ) {
dwErr=GetLastError();
return FALSE;
}
然后將CreateFile()返回的設(shè)備句柄傳遞給DeviceIoControl()來實現(xiàn)功能,例如實現(xiàn)調(diào)整背光亮度等級的代碼如下:
DWORD dwErr, bytes, dat;
PMU_IO_DESC pmic_data;
dat=BACKLIGHT_VALUE10;//背光等級10
pmic_data.RegulatorIndex=VCC_BL;
pmic_data.pData=&dat;
pmic_data.Count=1;
if ( !DeviceIoControl(hPMIC,IOCTL_PMU_SET_BACKLIGHT_LEVEL, &pmic_data, sizeof(PMU_IO_DESC), NULL, 0, &bytes, NULL) ) {
dwErr=GetLastError();
return FALSE;
}
else{
return TRUE;//調(diào)整成功
}
結(jié)語
本方案利用WM8310的可編程及高性能的特點,將其用于手持設(shè)備的CPU供電,結(jié)合Windows CE 6.0操作系統(tǒng)實現(xiàn)了動態(tài)電壓頻率調(diào)節(jié)、背光光控制以及休眠喚醒等功能,極大地降低了系統(tǒng)的功耗,延長了手持設(shè)備的工作時間,在相同的工作時間要求下減小了電池尺寸的要求。并且WM8310的高度集成、芯片面積小等特點大大地減小了手持設(shè)備PCB板尺寸,使手持設(shè)備能做到更小化、更輕便。本方案已經(jīng)成功應(yīng)用于中海達測繪儀器有限公司的手持設(shè)備中,經(jīng)過長時間的使用工作穩(wěn)定、可靠。該方案所帶來的優(yōu)點使產(chǎn)品的競爭力有很大提高。
評論
查看更多