摘 要: 針對基于S3C6410嵌入式系統的低功耗設計問題,應用TPS62402芯片設計了可以動態調節核心供電電壓的超低功耗核心供電單元。給出核心單元電源部分的原理圖和印制板設計要點及TPS62402電壓調節的驅動代碼。闡述了動態電壓及頻率調節(DVFS)與功耗降低的原理關系。
關鍵詞: TPS62402;S3C6410;低功耗;DVFS
隨著電子行業的進步,手持設備發展越來越迅速,CPU頻率不斷提高,性能不斷增強。目前制約手持設備最大的瓶頸是供電問題,手持設備有體積要求,因此電池的體積也不能太大,體積小限制了電池的容量也不可能做大,即所謂的“電池鴻溝”[1]。在電池容量一定的前提下,手持設備的低功耗設計就顯得尤為重要。手持設備低功耗[2]設計首先在硬件方面要選擇具有低功耗特性的CPU,其次在軟件調節下才能實現最佳效果。在此背景下DVFS[3]應運而生。DVFS[4]即動態電壓頻率調整[5],是根據芯片所運行的應用程序對計算能力的不同需要,動態調節芯片的運行頻率和電壓。
S3C6410[6]芯片是三星公司生產針對嵌入式低功耗系統的高性能CPU,廣泛應用于工業及民用領域,該芯片高性能的ARM核及優化的外圍模塊特別適合做手持設備。S3C6410[8]芯片支持DVFS,一般在非民用手機的手持設備上不會選用價格昂貴的集成電源管理芯片,本文選用的TPS62402[9]芯片是TI公司生產的一款具有雙路輸出的DC/DC的電源芯片,該芯片具有的EasyScaleTM接口,可以方便地實現電壓調節。
1 硬件設計
1.1 原理圖設計
TPS62402含有兩路DC/DC轉換器,OUT1輸出電流為400 mA,OUT2輸出電流為600 mA,轉換效率最高可達95%,2.5 V~6 V的電壓輸入范圍非常適合手持設備采用電池來供電,OUT1(DEF_1為低時)輸出電壓范圍以0.025 V為步進從0.8 V~1.575 V,OUT2固定為3.3 V輸出,其DEF_1管腳設定OUT1初始輸出電壓值,當DEF_1為高電平時OUT1輸出1.8 V,當DEF_1為低電平時輸出1.2 V。本文實際使用電路如圖1所示,其中Vin為電源輸入;EN1和EN2為OUT1和OUT2使能管腳,OUT2設置為系統上電即開始不間斷工作,OUT1連接至S3C6410的PWRRGTON管腳,以便在低功耗模式時關閉OUT1電源輸出;DATA_SET為設置OUT1電壓值的通信控制管腳;SW1和FB1搭配2.2 μH電感及10 μF電容組成OUT1,DEF_1連接至地設置上電OUT1初始電壓為1.2 V;SW2和ADJ2搭配2.2 μH電感及10 μF電容組成OUT2,固定輸出電壓3.3 V。
1.2 印制板設計要點
電路中使用的兩個電感應該選擇屏蔽式的功率電感,并至少留出50%的電流余量,例如L3應選擇最小可通過900 mA的電感。布局時,C83、C84應盡可能靠近TPS62402,電源的輸出端要增加線寬或采用覆銅方式。
2 軟件設計
2.1 接口描述
TPS62402具有EasyScale接口,即一線式串行動態電壓調整接口,官方定義為:One-Pin Serial Interface for Dynamic Output Voltage Adjustment。
EasyScale接口以方波傳輸數據,其1和0以高低電平占一個周期的時間來定義:當高電平時間至少大于兩倍的低電平時間則為1;反之低電平時間至少大于兩倍的高電平時間則為0。每一次發送數據為16 bit,高8 bit為地址數據,低8 bit為電壓數據,數據格式如表1所示。
高8 bit DA0~DA7固定為0x4E;低8 bit中的RFA為請求答復設定,如果置1則TPS62402收到數據后會發出答復信號;當DEF_1為低時,A1和A0設置為00;D4~D0為電壓值,對應關系如表2所示。
2.2 驅動流程及代碼
DVFS技術需要軟硬件共同配合才能完成,常規流程包括以下5步。
(1)采集與系統負載有關的信號,計算當前的系統負載。
(2)根據系統的當前負載,預測系統在下一時間段需要的性能。
(3)將預測的性能轉換成需要的頻率,從而調整芯片的時鐘設置。
(4)根據新的頻率計算相應的電壓。
(5)通知電源管理模塊調整CPU的電壓。
在調整電壓和頻率時要特別注意順序,因為頻率越高需要的電壓也越高,所以當頻率從高到低時要先調整頻率再降低電壓;頻率從低到高時先升高電壓再調整頻率。另外電壓及頻率調整的頻率不能過高,否則反而會增加系統能量消耗。S3C6410的核心頻率設置為9擋,電壓4擋,對應關系如表3所示。
本系統中使用S3C6410的GPK13管腳來發送數據,Linux源碼中已經包含DVFS,TPS62402驅動的相關函數及功能介紹如下。
int set_power(unsigned int freq)//Linux系統接口函數,
//該函數根據輸入的形參(需要設定的頻率)來設定電壓值
static int find_voltage(int freq)
//根據給定的頻率值找到對應的電壓值
{
int index=0;
if(freq>frequency_match[0][0]){
printk(KERN_ERR"frequecy is over then support frequency\n");
return 0;
}
for(index=0;index<ARRAY_SIZE(frequency_match);index++){
if(freq>=frequency_match[index][0])
return index;
}
printk("Cannot find matched voltage on table\n");
return 0;
}
void SendAddr_Data(int data)//發送對應的電壓值數據
static const unsigned int voltage_table[32]
//包含電壓值與發送數據的數組
static const unsigned int frequency_match[][2]
//包含頻率與電壓關系的二維數組
void setbit(int i)//發送1 bit數據
{
if(1==i)
{
gpio_set_value(S3C64XX_GPK(13),0);
udelay(2);
gpio_set_value(S3C64XX_GPK(13),1);
udelay(6);
}
else if(0==i)
{
gpio_set_value(S3C64XX_GPK(13),0);
udelay(6);
gpio_set_value(S3C64XX_GPK(13),1);
udelay(2);
}
else
{
printk("ERROR:setbit error!\n");
}
}
setbit()函數中的udelay()函數為微秒延時函數,延時高低電平時間比為3,滿足至少大于兩倍關系。
實際電路首先測試TPS62402輸出電壓與設定值的偏差,使用萬用表測試PCB板上OUT1經過電容以后的電壓,通過對表4的觀察可以發現TPS62402的輸出特別準確。在實際使用中,對比使用DVFS前后的功率消耗,同一設備,同一塊電池,在同等條件下手持設備使用時間增加25%左右。
參考文獻
[1] LAHIRI K, RAGHUNATHAN A, DEYS, et al. Batterydriven system design:a new frontier in low power design[C].Proceedings of 7th Asia and South Pacific and the 15th International Conference on VLSI Design, Bangalore, India, 2002:261-267.
[2] 馬天義.低功耗軟硬件劃分算法研究[D].哈爾濱:哈爾濱工業大學,2009.
[3] YUN J, SINGH D K. Dynamic voltage and frequency scaling over delay-constrained mobile multimedia service using approximated relative complexity estimation[J]. Doug Young Suh EURASIP Journal on Embedded Systems, 2013.
[4] 張立.基于DPM和DVFS的嵌入式系統低功耗優化技術研究[D].北京:北京交通大學,2012.
[5] 黃建科,周云.基于自適應DVFS的SoC低功耗技術研究[J].現代電子技術,2009(7):120-122.
[6] 鄧中亮,張紅星,延明,等.基于S3C6410和無線傳感器網絡的手持終端設計[J].電子設計工程,2011(2):1-4.
[7] 張堃.基于ARM9的嵌入式軍用手持終端系統的設計與開發[D].濟南:山東大學,2011.
[8] Samsung. S3C6410 datasheet[EB/OL]. www.samsung.com
[9] TI. TPS62402datasheet[EB/OL]. http://www.ti.com.cn/cn/lit/ds/symlink/tps62402.pdf