我正在尋找一種方法來確定ARM處理器是否從冷啓動(即,初始加電)與熱啓動(即沒有實際功率損失的復位斷言)進行引導。具體而言,我使用的是ARM968內核,將使用C或彙編進行確定,並且我將使用確定,以便某些操作僅在初始開機時運行,而不是在後續重置時運行。在以前的項目中,我利用外部電路(例如FPGA)來檢測不同的啓動場景,但在這種情況下,我僅限於ARM內核。如何檢測冷啓動與ARM處理器上的熱啓動?
7
A
回答
5
您可以將RAM中的全局變量初始化爲冷啓動時不太可能出現的值,並在啓動過程中檢查該值。
對於微控制器,通常情況下,特定芯片的復位邏輯提供狀態寄存器,指示覆位的來源。我不知道這個更大的核心是否存在,以及你是否可以使用它。
2
這很可能是困難的,也許你不是真的只是核心本身。核心應該已經得到重置,但外部的內存(但可能還在芯片內部)沒有。如果內存是基於dram的,那麼它在啓動時可能仍會被擦除。我不知道通用的一個尺寸適合所有的答案。儘管你和starblue都有,但你必須在某個地方找到一些在復位時未被清除的寄存器,並將其設置爲「可能」不會在加電時隨機發生的事情。讀它然後設置它。認爲像在板級管理復位邏輯的fpga或pld(如果有的話)是最好的,因爲在上電覆位時它們也會被重置,並且在熱重置時它們是導致它並保持其狀態的那個。
挖掘TRM爲您的核心或通過芯片的寄存器規範,並查看是否有任何寄存器的復位狀態是未定義的,一個通常不使用並且不會傷害芯片,如果您將其設置爲某種,看看它的功能,那就是我開始尋找的地方。
10
檢查文檔爲你特定的芯片(「ARM968」不夠具體)。應該有一個描述重置原因的寄存器。例如。這裏是LPC23xx有什麼:
Reset Source Identification Register (RSIR - 0xE01FC180)
This register contains one bit for each source of Reset. Writing a 1 to any of these bits
clears the corresponding read-side bit to 0. The interactions among the four sources are
described below.
Bit Symbol Description
0 POR Assertion of the POR signal sets this bit, and clears all of the other bits in
this register. But if another Reset signal (e.g., External Reset) remains
asserted after the POR signal is negated, then its bit is set. This bit is not
affected by any of the other sources of Reset.
1 EXTR Assertion of the RESET signal sets this bit. This bit is cleared by POR,
but is not affected by WDT or BOD reset.
2 WDTR This bit is set when the Watchdog Timer times out and the WDTRESET
bit in the Watchdog Mode Register is 1. It is cleared by any of the other
sources of Reset.
3 BODR This bit is set when the 3.3 V power reaches a level below 2.6 V.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and backs up, the
BODR bit will be set to 1.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and continues to
decline to the level at which POR is asserted (nominally 1 V), the BODR
bit is cleared.
if the VDD(DCDC)(3V3) voltage rises continuously from below 1 V to a level
above 2.6 V, the BODR will be set to 1.
This bit is not affected by External Reset nor Watchdog Reset.
Note: Only in case when a reset occurs and the POR = 0, the BODR bit
indicates if the VDD(DCDC)(3V3) voltage was below 2.6 V or not.
相關問題
- 1. 將冷啓動與熱啓動進行比較
- 2. openstack中的冷啓動和熱啓動有何區別
- 3. WCF冷啓動
- 4. 如何測量移動應用程序的冷/熱啓動時間
- 5. 如何在Android設備上禁用「重新啓動:冷啓動」物理按鈕
- 6. 如何通過windows-mobile 5.0上的C#代碼執行冷啓動和熱啓動?
- 7. 內存中的冷啓動
- 8. 多核處理器如何啓動?
- 9. 處理冷啓動的應用鏈接爲Facebook的iOS SDK V4.1
- 10. AWS Lambda'全'與'增量'冷啓動?
- 11. 檢測Safari何時啓動
- 12. 檢測何時嵌入碼頭無法啓動處理程序
- 13. 如何檢測從「啓動」 - 文件夾快捷方式啓動?
- 14. 在預處理器中檢測ARM-64?
- 15. 如何檢測應用程序啓動類型(自動啓動還是手動)?
- 16. 如何使用織物啓動處理
- 17. 如何完全啓動啓動器?
- 18. 重啓後啓動批處理
- 19. C中的冷啓動代碼
- 20. ARM S3C6410內核啓動
- 21. 檢測誰啓動COM服務器
- 22. Python - 檢測啓動過程
- 23. 如何用cplex熱啓動pyomo?
- 24. IgniteCheckedException:無法啓動處理器:GridProcessorAdapter []
- 25. 處理TypeLoadException而在啓動
- 26. 多處理不啓動
- 27. 處理在下次啓動
- 28. 如何檢測Azure啓動任務批處理文件中的登臺環境
- 29. 如何在啓動時/啓動後在啓動的Android上啓動本機服務器應用程序(ELF)?
- 30. 用torquebox-lite熱啓動?
內存可以保存值在關機後的一個驚人的很長一段時間。 – caf 2010-09-17 00:14:54
RAM變量方法奏效。我將SRAM的4字節部分分成了一個引導簽名,並將其從鏈接器指令中的SRAM大小中排除,因此除了簽名寫入/檢查代碼外,沒有任何內容會初始化或覆蓋它。 – 2010-09-20 21:53:42