嵌入式系統掉電保護的設計方案
在系統中,需要使用5V和3.3V的直流穩壓電源。其中,S3C4510B及部分外圍器件需3.3V電源,另外部分器件需5V電源。為簡(jiǎn)化系統電源電路的設計,要求整個(gè)系統的輸入電壓為高質(zhì)量的5V的直流穩壓電源。有別于一般的電源回路設計,本系統的電源回路設計過(guò)程中增加了有關(guān)掉電保護的設計。包含這個(gè)設計的系統電源電路如圖2所示。

這個(gè)電源回路除了可以提供5v和3.3v的電源以外,還為系統掉電保護提供了延時(shí)及預警功能,通過(guò)軟件的配合可以實(shí)現系統的掉電保護機制。正常情況下,由供電回路1給整個(gè)系統供電。當系統由于意外原因掉電時(shí),由于輸入的比較電壓降低,這樣MAX809 模塊輸出電壓產(chǎn)生翻轉為系統提供掉電中斷預警信號,中斷請求通過(guò)外部中斷引腳XREQ0產(chǎn)生;同時(shí)供電回路2開(kāi)始啟用。通過(guò)大電容C3、c4放電,繼續為系統提供一段供電電壓,支持掉電中斷服務(wù)程序完成。供電回路2只給最小系統供電,并不給耗電量大的外圍部件供電。這樣,給最小系統的供電時(shí)間足夠長(cháng),可以完成敏感數據的保護操作。
通過(guò)軟件測算,電容放電可供最小系統工作時(shí)間在0.5~4.5S之間。這種測算方法很簡(jiǎn)單.編寫(xiě)一個(gè)掉電中斷服務(wù)子程序,這個(gè)程序只是不斷進(jìn)行時(shí)間刷新操作。同樣,可以通過(guò)軟件測定在這段時(shí)間里向Flash擦寫(xiě)2~3MB??梢?jiàn),在采用這種硬件體制的情況下,系統掉電保護能夠得到可靠的保證。
3 掉電信號處理軟件方法的實(shí)現
在μClinux系統下,掉電信號的捕捉有兩種方式可以進(jìn)行。一種是運用系統調用,即采用void(*signal(intslg,void(*func)(int)))(int)。這個(gè)函數可以為特定的中斷信號安排制訂的執行函數,用參數func傳遞。在μCllnux中,共有31個(gè)系統中斷信號,其中掉電信號為SIGPWR。假設掉電中斷服務(wù)處理程序為void interrupt-service(int),則中斷服務(wù)與信號關(guān)聯(lián)的方式為:signal(SIGPWR,interrupt_service)。這種方式充分利用系統調用,實(shí)現簡(jiǎn)單。在掉電保護方案設計初期也是采用這種機制。但事實(shí)證明這種機制并不可靠,其原因是Linux內核產(chǎn)生和管理信號的機制并不完善,有可能存在信號丟失。查閱有關(guān)Unix或L1nux的相關(guān)資料,可以發(fā)現這種狀況也普遍存在于某些其他版本的Linux和Unix中。
另一種方式是采用守候進(jìn)程的方式,開(kāi)通一個(gè)進(jìn)程,此進(jìn)程專(zhuān)門(mén)等待中斷信號。主程序根據數據操作對象的不同,將自己的流程方案劃分成若干原子操作,所謂原子操作即劃定的程序塊要么完全執行,要么不執行。每個(gè)操作對應惟一狀態(tài)標志。在每個(gè)原子操作前,主進(jìn)程都將會(huì )通過(guò)管道通信的方式閱讀中斷信號。如果中斷信號產(chǎn)生,主進(jìn)程首先保存狀態(tài)標志,然后將相關(guān)數據寫(xiě)往Flash后退出,電源恢復后,主進(jìn)程首先根據標志字確定系統恢復方案。圖3用流程圖的方式實(shí)現這一過(guò)程。

評論