2010-08-11 87 views
1

我需要爲我的設備在200mhz MIPS cpu上運行embedde linux實現以下功能: 1)如果重置按鈕被按下並保持少於一秒 - 繼續重新啓動 2)if重置按鈕被按下並保持至少3秒。 - 使用NVRAM中的默認值恢復系統的配置,然後重新啓動。輪詢硬件按鈕的狀態

我正在考慮的方法有兩種: 1)通過GPIO不斷民調正確的時序按鈕狀態的IOCTL (可能太大開銷,大量的上下文切換) 2)簡單的字符設備驅動程序輪詢守護進程?按鈕,測量計時和報告狀態,例如,通過/ proc到守護進程或shell腳本可以檢查和執行所需操作的用戶空間。

而對於這兩種情況下,我不知道如何來衡量時間:( 你會怎麼建議/建議?

回答

0

如果你想在軟件中做到這一點,你需要把它放在內核(中斷)代碼中,而不是在shell腳本或守護進程中。更好的方法是將其放入硬件中。

根據我的經驗,重置設備的可能原因將是壞的用戶代碼,它已經鎖定或刷新處理器。如果問題是由於RF能量或此類性質導致的內存損壞,則可能需要硬件或外部(強化)處理器來重新刷新設備並解決問題。

在壞用戶代碼的情況下,處理器中斷和內核代碼應該繼續運行,而用戶代碼可能會完全停滯。如果您可以通過中斷來查詢引腳,則您有更好的機會獲得您期望的重置。此外,這使您可以執行事件驅動的編程,而不是不斷地查詢引腳。

另一種方法(不是你列出的規範,但實現相同目標的流行方法)將是讓啓動例程檢查GPIO線,並且當你想重新初始化設備。在我見過的大多數嵌入式Linux設備上,「Reset」按鈕連接到單片機的專用復位引腳,而不連接到GPIO引腳。除非你想開始切割痕跡,否則你可能不得不採用這條路線。

2

你必須執行這些硬件。的宗旨,在「從NVRAM還原爲默認值」是以恢復所謂的「bricked」設備

例如,如果NVRAM seting被修改(宇宙射線?)以致設備無法啓動會怎麼樣?在這種情況下,您建議的按鈕輪詢守護程序將永遠不會執行

對於持續一秒的重啓,使用RC(電阻+電容)電路「debounc e「按鈕按下。選擇適合1秒延遲的RC時間常數。使用一個比較器觀察RC電壓來發信號給MIPS cpu上的RESET引腳。

對於三秒鐘的印刷功能(恢復NVRAM默認值),您可能必須做更復雜的事情。

一種可能性是將一個微小的PIC單片機放入復位電路,但只能使用帶有熔絲(不可擦除)ROM而不是NVRAM的微控制器。

更簡單的可能性是在同一條電路和總線上包含與NVRAM相同的默認ROM。 J/K觸發器鎖存器可以成爲復位電路的一部分。你還需要一個三秒調諧的RC電路和比較器。在小於三秒鐘的壓力下,觸發器應該鎖存一個0輸出,並且在三秒鐘的按鍵上,第二個RC電路應該在3秒後觸發比較器,並向J/K鎖存器提供一個1,這將會切換其輸出。

觸發器輸出Q將存儲單個位,告訴您的電路這個復位週期是否在三秒鐘推後。如果是這樣,那麼輸出Q正在驅動芯片選擇到NVRAM和Q*正在驅動芯片選擇到ROM。 (我假設芯片選擇在NVRAM和ROM芯片上都是負邏輯)。

然後,當CPU啓動時,取決於芯片選擇線,它將從NVRAM或ROM中讀取設置。

您的啓動代碼可以檢測到它是用ROM芯片選擇啓動的,並且可以稍後用GPIO線重置J/K觸發器。然後,CPU將能夠將良好的值寫回到NVRAM中。希望能夠解開設備。

您想使用不可擦除或可重複使用的ROM。這種ROM最能抵抗靜電,電源故障和輻射。例如,輻射比我們通常意識到的要多得多,宇宙射線通量的數量乘以飛機上的設備。

1

我不熟悉MIPS處理器和您可以使用的引腳的GPIO /中斷功能,但可能的方法如下。

  1. 將輸入引腳配置爲中斷輸入。
  2. 當中斷觸發禁止中斷並啓動一個短100ms ish計時器
  3. 當計時器觸發檢查按鈕仍然按下(去抖動)。如果不是,則重新啓用GPIO中斷並重新啓動,否則將該定時器設置爲在3秒超時後重新觸發。
  4. 當計時器觸發此時,如果沒有按下按鈕,然後重新啓動,否則重置系統配置並重新啓動。

如果引腳無法提供中斷,那麼步驟1將是輪詢任務以查看輸入。

按下重置按鈕和正在運行的完全重置過程之間的時間始終爲3秒。在復位的情況下,這可能並不重要,特別是如果作爲步驟3的一部分,使用戶明白復位序列已經開始 - 例如使顯示空白。