EM9160L是一款與英創(chuàng)主力產(chǎn)品EM9160功能完全兼容,同時(shí)具有低功耗操作能力的高性能ARM9嵌入式主板產(chǎn)品。EM9160L主要應(yīng)用是作為以電池供電、無人值守的野外工作環(huán)境為特色的設(shè)備主控單元。作為通常的通訊控制功能,EM9160L與EM9160的使用是完全一樣的,客戶針對(duì)EM9160開發(fā)的應(yīng)用程序可不加修改的應(yīng)用于EM9160L上。本文主要介紹EM9160L低功耗功能方面的相關(guān)應(yīng)用。
相對(duì)EM9160,EM9160L采用了三個(gè)方面的措施來改進(jìn)其功耗指標(biāo):(1)采用高效的Step-Down DC-DC電源代替普通的線性穩(wěn)壓電源;(2)采用具有低電壓內(nèi)核的CPU單元;(3)對(duì)外部接口單元添加電源管理功能。這三種措施使EM9160L的功耗指標(biāo)得到大幅度提高,具體功耗測(cè)試結(jié)果如下表所示:
測(cè)試條件 |
平均功耗 |
峰值功耗 |
待機(jī)功耗 |
EM9160 |
235mA / 5V |
320mA / 5V |
|
EM9160L |
120mA / 5V |
160mA / 5V |
50mA / 5V |
作為野外監(jiān)測(cè)應(yīng)用,一般并不需要設(shè)備每時(shí)每刻都處于運(yùn)行狀態(tài),而是全速工作一段時(shí)間后,設(shè)備轉(zhuǎn)入空閑一段時(shí)間,然后再進(jìn)入工作狀態(tài),即設(shè)備實(shí)際處于“工作-空閑”的周期模式中。在實(shí)際應(yīng)用中,設(shè)備空閑的時(shí)間通常遠(yuǎn)長于設(shè)備工作的時(shí)間,如每分鐘工作10秒、空閑50秒。正因?yàn)槿绱耍乓笤O(shè)備在空閑狀態(tài)的功耗盡可能低,以延長電池的使用壽命,降低設(shè)備的維護(hù)費(fèi)用。
盡管WinCE操作系統(tǒng)對(duì)設(shè)備驅(qū)動(dòng)提供了一套電源管理的機(jī)制,但這套機(jī)制的應(yīng)用主要是基于帶有標(biāo)準(zhǔn)Windows圖形界面的環(huán)境,而EM9160L則是不帶Windows圖形接口的系統(tǒng),因此CE的這套機(jī)制還不能非常方便地滿足EM9160L在實(shí)際應(yīng)用的需求。針對(duì)實(shí)際應(yīng)用的特點(diǎn),我們?yōu)?EM9160L應(yīng)用程序?qū)iT提供了兩個(gè)系統(tǒng)功能調(diào)用:
//
// 設(shè)置用戶空閑標(biāo)志:進(jìn)入空閑待機(jī)狀態(tài)
//
BOOL SetUserIdleFlag()
{
DWORD dwUserIdleFlag;
DWORD dwInBufSize;
DWORD dwReturnBytes;
BOOL bRet;
dwUserIdleFlag = 1;
dwInBufSize = sizeof(dwUserIdleFlag);
bRet = KernelIoControl(IOCTL_EM9X60_USER_IDLE_WRITE,
(LPVOID)&dwUserIdleFlag,
dwInBufSize,
NULL,
0,
&dwReturnBytes);
return bRet;
}
//
// 清用戶空閑標(biāo)志:退出空閑待機(jī)狀態(tài)
//
BOOL ClearUserIdleFlag()
{
DWORD dwUserIdleFlag;
DWORD dwInBufSize;
DWORD dwReturnBytes;
BOOL bRet;
dwUserIdleFlag = 0;
dwInBufSize = sizeof(dwUserIdleFlag);
bRet = KernelIoControl(IOCTL_EM9X60_USER_IDLE_WRITE,
(LPVOID)&dwUserIdleFlag,
dwInBufSize,
NULL,
0,
&dwReturnBytes);
return bRet;
}
應(yīng)用程序可通過調(diào)用上述兩個(gè)API實(shí)現(xiàn)進(jìn)入或退出用戶空閑狀態(tài),進(jìn)入空閑狀態(tài)后,用戶程序可設(shè)定一定數(shù)量的Sleep(1000)循環(huán),來確定系統(tǒng)處于空閑狀態(tài)的時(shí)間。注意在空閑狀態(tài)中,EM9160L的以太網(wǎng)接口被關(guān)閉。典型的進(jìn)入空閑狀態(tài)的應(yīng)用程序流程如下:
BOOL dEventFlag = FALSE; // 外部中斷事件標(biāo)志
…。
// 關(guān)閉在空閑狀態(tài)中不再使用的通訊接口,如串口等
…。
// 進(jìn)入空閑狀態(tài)
SetUserIdleFlag();
// 設(shè)置正常空閑狀態(tài)50秒,每秒進(jìn)行一次異常檢查
for (i1 = 0; i1 《 50; i1++)
{
Sleep(1000); // 也可用WaitForSingleObject阻塞等待外部事件
if(dEventFlag)
break;
}
// 退出空閑狀態(tài)
ClearUserIdleFlag();
// 打開應(yīng)用所需的通訊接口,如串口等
…。
上述流程還支持空閑狀態(tài)的中途退出,這是因?yàn)橄到y(tǒng)在空閑狀態(tài)下仍然可以正常響應(yīng)外部硬件中斷。一種典型的空閑狀態(tài)中途退出應(yīng)用是保持EM9160L的IRQ1中斷線程,把GPRS模塊的振鈴信號(hào)RI#作為IRQ1中斷輸入信號(hào)。這樣應(yīng)用控制中心可在任意時(shí)間,通過撥號(hào)來喚醒基于EM9160L的野外設(shè)備,使其立即進(jìn)入工作狀態(tài)。
由于以太網(wǎng)接口單元通常都是嵌入式系統(tǒng)功耗最大的單元之一,因此在EM9160L的空閑狀態(tài)中,其以太網(wǎng)接口單元被強(qiáng)制關(guān)閉。所以EM9160L不支持應(yīng)用程序通過以太網(wǎng)中途退出空閑狀態(tài)。當(dāng)系統(tǒng)中空閑狀態(tài)退出后,以太網(wǎng)需要4–6秒才能恢復(fù)支持工作狀態(tài),這包括了網(wǎng)絡(luò)協(xié)商時(shí)間。
在進(jìn)入空閑狀態(tài)前關(guān)閉不需要的通訊端口,應(yīng)不僅僅理解為關(guān)閉通訊端口,實(shí)際上任何耗電的單元,應(yīng)用程序都應(yīng)當(dāng)把它們?cè)O(shè)置在省電的狀態(tài)。如正常運(yùn)行時(shí)常亮的LED,應(yīng)設(shè)置成關(guān)閉或閃爍狀態(tài)。
注意:50mA的空閑電流,是在EM9160L不帶任何負(fù)載的情況下,進(jìn)入空閑狀態(tài)后測(cè)試的。
-
WINDOWS
+關(guān)注
關(guān)注
3文章
3541瀏覽量
88624 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35296
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論