,,,,,
(東方電子股份有限公司,煙臺 264001)
MSP430FR是美國德州儀器(TI)公司推出的新一代超低功耗系列單片機(jī),由于其具有超低功耗的性能和可以高速、耐久讀寫數(shù)據(jù)的內(nèi)置FRAM,非常適合應(yīng)用于電力儀表等低功耗儀器儀表領(lǐng)域。在對功耗要求很苛刻的領(lǐng)域,如何合理開發(fā)使用MSP430FR系列單片機(jī)成為實(shí)現(xiàn)超低功耗的關(guān)鍵。本文以MSP430FR6972單片機(jī)為例,詳細(xì)介紹了MSP430FR系列單片機(jī)的超低功耗開發(fā)、設(shè)計原則。
MSP430FR系列單片機(jī)是16位單片機(jī),采用了精簡指令集(RISC)結(jié)構(gòu),具有靈活可控的時鐘和豐富的片內(nèi)外設(shè),每個片內(nèi)外設(shè)都可以單獨(dú)控制,從而實(shí)現(xiàn)多種不同功能的低功耗模式[1]。以MSP430FR6972單片機(jī)為例,其具有7種低功耗模式(如表1所列),其中,LPM3模式是在LPM2模式基礎(chǔ)上關(guān)閉了芯片內(nèi)部的鎖頻環(huán);LPM3.5模式及LPM4.5模式是在LPM3與LPM4模式基礎(chǔ)上進(jìn)一步關(guān)閉了芯片內(nèi)部RAM的供電。LPM3.5和LPM4.5模式下,一些寄存器將會失效,未保存的數(shù)據(jù)及動態(tài)變量會丟失,因此在進(jìn)入這兩種模式時一定要將有用的數(shù)據(jù)或變量保存到鐵電中,等到CPU從該模式恢復(fù)后,再將保存的數(shù)據(jù)讀出,重新賦給相應(yīng)的變量。單片機(jī)會根據(jù)不同的運(yùn)行模式關(guān)閉或打開CPU、時鐘及相應(yīng)的外設(shè),從而保證在最低功耗下實(shí)現(xiàn)相應(yīng)的功能。
表1 MSP430FR6972運(yùn)行模式及功耗(T=25 ℃,f=1 MHz,Vcc=3.0 V)
MSP430FR系列單片機(jī)與其他MSP430系列單片機(jī)的最大不同是采用內(nèi)置FRAM取代Flash來存儲程序與數(shù)據(jù),數(shù)據(jù)寫入速度是Flash的100多倍。由于FRAM無需預(yù)擦除段并且可以實(shí)現(xiàn)位級數(shù)據(jù)存取,簡化了代碼開發(fā),從而能夠在功耗不變的情況下實(shí)現(xiàn)實(shí)時數(shù)據(jù)記錄。此外,相較于Flash,MS430FR芯片中的FRAM可提供超過100億次的寫入周期耐久性。
單片機(jī)的超低功耗設(shè)計包括硬件、軟件兩個方面。在進(jìn)行超低功耗設(shè)計時要綜合考慮硬件和軟件的設(shè)計,使其達(dá)到最優(yōu)的低功耗狀態(tài)。
2.1.1 供電電壓及時鐘頻率設(shè)置
MCU是由若干CMOS門電路組成,CMOS的功耗計算公式如下:
P=Pstart+PQ+Pdyn
(1)
(2)
其中,Pstart是由擴(kuò)散區(qū)和襯底之間的反向偏置漏電流產(chǎn)生的靜態(tài)功耗,PQ是動態(tài)情況下P管和N管同時導(dǎo)通時的短路電流產(chǎn)生的動態(tài)功耗,Pdyn是開關(guān)電流產(chǎn)生的動態(tài)功耗。這三項(xiàng)中Pdyn大約占電路功耗的80%,是CMOS電路的主要功耗[3]。在式(2)中CL為CMOS的負(fù)載電容,f為系統(tǒng)時鐘頻率,Vcc為芯片的電源電壓。由此可知,電源電壓Vcc對系統(tǒng)CMOS電路功耗影響最大,其次是時鐘頻率f和負(fù)載電容CL。因此,為了能夠?qū)崿F(xiàn)超低功耗,在滿足應(yīng)用要求的前提下,要盡可能降低芯片的供電電壓。
圖1 I/O電平不固定情況下的電流消耗
一般而言,時鐘頻率越大,功耗越大。但另一方面,時鐘頻率與工作時間成反比,時鐘頻率越高,完成一段代碼的執(zhí)行時間越短,CPU處于空閑或睡眠狀態(tài)的時間就越長。因此,并不一定是頻率越高功耗就越大。在有些應(yīng)用中,提高主頻反而可以使平均功耗降低,頻率的確定需要根據(jù)實(shí)際應(yīng)用中的項(xiàng)目需求而定。例如,以不同頻率執(zhí)行相同代碼,其功耗大小如表2所列,從表中可以看出對于如下代碼,頻率在8 MHz時CPU消耗的平均功耗最小。
void main(void){
InitSoftWDog(0,0,0);
InitGpio();
InitSYSClock ();
while(1){
Pin1_0(1);//P1.0引腳置高
The three arrive at a marine life institute(海洋生物研究所)first.Here they meet Hank.Hank becomes their guide(向?qū)В?But the trip is not always a bed of roses(一帆風(fēng)順).
CodeA();
CodeB();
CodeC();
Pin1_0(0);//P1.0引腳置低
}
}
表2 不同頻率下執(zhí)行相同代碼的功耗
2.1.2 I/O口設(shè)置
默認(rèn)情況下,MSP430FR系列單片機(jī)的I/O口為輸入狀態(tài),且內(nèi)部的上、下拉電阻未使能。因此,I/O口的電平不確定,從而容易產(chǎn)生寄生電流[2],如圖1所示。在默認(rèn)狀況下,P1.0口的電壓處于不穩(wěn)定狀態(tài),當(dāng)P1.0口的電壓為1.7 V左右時,寄生電流能夠超過40 μA。但P1.0端口電壓為3.0 V或者0 V時,電流幾乎為0。
為此,在進(jìn)行產(chǎn)品設(shè)計時,硬件上可以通過將未用的I/O接到Vcc或者GND上,使其端口電平固定,從而避免產(chǎn)生寄生電流。若硬件上未進(jìn)行相應(yīng)處理,軟件上可以通過將未用的I/O口設(shè)置為輸出高電平或低電平,使其端口電平固定;或者將未用I/O口設(shè)置為輸入狀態(tài),并通過軟件設(shè)置內(nèi)部上拉電阻或下拉電阻,使端口的電平保持固定,避免產(chǎn)生寄生電流。
2.1.3 外部設(shè)備
MSP430FR系列單片機(jī)內(nèi)部包含了豐富的低功耗外設(shè),如DMA、ADC等器件,合理利用這些低功耗外設(shè)能夠更好地降低系統(tǒng)的功耗。例如在相同情況下搬移1312個字節(jié), MSP430FR6972的DMA模塊與memcpy()函數(shù)所消耗的時間及功耗對比如表3所列。DMA可以在更短的時間內(nèi),用更低的功耗實(shí)現(xiàn)數(shù)據(jù)的搬移,且DMA進(jìn)行數(shù)據(jù)搬移時并不會占用CPU,CPU可以繼續(xù)執(zhí)行其他指令。
表3 DMA模塊與memcpy()函數(shù)功能對比
典型的低功耗CPU的工作模式如圖2所示,CPU大部分時間處于空閑或休眠狀態(tài),僅有部分外設(shè)在工作,此時電流消耗很小。只有定時事件完成或有其他事件觸發(fā)時,CPU才會進(jìn)入運(yùn)行狀態(tài)執(zhí)行相應(yīng)的工作,工作完成后CPU再次進(jìn)入空閑或休眠狀態(tài),繼續(xù)等待定時或其他事件的觸發(fā),這樣系統(tǒng)整體的平均功耗就會很低[4]。例如采用MSP430FR6972芯片實(shí)現(xiàn)串口數(shù)據(jù)接收功能,可以選擇ACLK作為片內(nèi)串口模塊的時鐘源,這樣芯片可以長時間處于LPM3模式下接收串口數(shù)據(jù),當(dāng)要處理接收數(shù)據(jù)時再進(jìn)入Active模式進(jìn)行數(shù)據(jù)處理,從而使單片機(jī)功耗保持最佳。
圖2 典型的低功耗CPU的工作模式
此外,在軟件編程上盡可能地提升代碼的執(zhí)行效率,縮短CPU的活躍時間,也可以更好地降低功耗。例如盡量使用無符號數(shù),盡可能采用快速查表法來代替復(fù)雜的計算等。
2.2.1 ULP Advisor代碼分析
TI公司提供了ULP (Ultra-Low Power) Advisor分析工具,用于指導(dǎo)開發(fā)人員編寫有效的代碼,以充分利用MSP430微控制器的獨(dú)特超低功耗特性[5]。ULP Advisor功能可以在 IAR或CCS編譯器中通過設(shè)置啟用。
ULP包含了15條編程規(guī)則,在編譯時,ULP Advisor會提供通知和備注,以突出顯示代碼中可以進(jìn)一步優(yōu)化的區(qū)域,如圖3所示,ULP Advisor提示for循環(huán)的代碼可以優(yōu)化。點(diǎn)擊圖3中messages對話框中的TI ULP Advisor報警信息,就會彈出如圖4所示的詳細(xì)說明,并包括優(yōu)化代碼的例子。從詳細(xì)說明中可知,MSP430單片機(jī)內(nèi)進(jìn)行非零值比較時需要執(zhí)行兩條匯編指令,而與零比較只需執(zhí)行一條匯編指令,所以可以將for(ii = 0; ii <20; ii++)改為for(ii =20; ii>0; ii--),提高代碼的執(zhí)行效率,從而節(jié)省功耗。
圖3 ULP Advisor告警信息
圖4 ULP Advisor詳細(xì)說明
2.2.2 Energy Trace功耗分析
在進(jìn)行單片機(jī)超低功耗設(shè)計時,輔助的測量方法有很多種??蓪⒏呔入娏鞅泶牍╇娀芈窚y量功耗,或者在供電回路中串聯(lián)一個精密電阻(誤差為1%,甚至更低),用示波器實(shí)時測量電阻兩端的電壓等方法。
為了能夠更好地在程序設(shè)計過程中了解功耗,可以采用TI公司的Energy Trace工具。Energy Trace工具主要用于Debug模式,其可以實(shí)時記錄MSP430單片機(jī)的實(shí)時功耗、內(nèi)部外設(shè)和芯片運(yùn)行的狀態(tài)(見圖5)、程序里功能函數(shù)執(zhí)行的次數(shù)及每個功能函數(shù)的功耗,生成log信息并以圖表的形式實(shí)時展示出來[5]。
Energy Trace工具可以對比利用ULP Advisor工具調(diào)整后和調(diào)整前的代碼的實(shí)時功耗情況,如圖6所示。通過將ULP Advisor和Energy Trace結(jié)合使用,可以幫助軟件人員在程序設(shè)計調(diào)試中更好地優(yōu)化代碼,從而保證功耗做到最低。
圖5 芯片內(nèi)部外設(shè)及運(yùn)行模式實(shí)時追蹤
圖6 Energy Trace功耗跟蹤及對比分析