2016-09-14 103 views
0

尤其是使用STMF4xx/F7xx等「快速」設備時,我們需要根據電源電壓和系統時鐘頻率來指定閃存等待週期的數量。爲什麼我們需要指定閃存等待週期的數量?

當CPU獲取指令/或常量時,通過FLITF完成。假設FLITF只要能夠提供請求的數據就可以保持CPU請求,那麼我是否正確,這使得其他總線主機無法同時訪問閃存。

如果這是真的,爲什麼它對於知道閃存等待週期的任何接口都很重要。像Cache一樣預先加載指令,如果它知道需要等待多久才能獨立運行,否?

+0

你會/應該發現閃存不是唯一的邏輯在一些/許多有速度限制的MCU。有些人會告訴你,即使CPU可以超越X,外設時鐘也不能超過X.特別是PLL的最小和最大範圍必須使用,否則最終可能會產生不穩定的時鐘(永遠不會鎖定或失去鎖定並掛起,取決於設計)。僅僅因爲有些汽車可以達到200英里每小時並不意味着所有的汽車都可以。對於每個芯片的每個邏輯塊或外設,您必須將時序保持在設計參數範圍內,否則可能會發生不好的事情。 –

回答

4

因爲flash界面並不神奇。

它必須滿足尋址和讀出閃存單元所需的設置和保持時間,閃存單元會根據電壓而有所不同。以STM32F411爲例(因爲我有這個TRM方便),用電壓/頻率/等待狀態表進行一些數學運算,意味着從其中一個讀取閃存的讀數大約在2.7V以上約30ns,向下降至2.1V以下〜60ns。

由於快閃接口不具有其自己的異步納秒精確計時的能力(因爲那將是不必要的複雜,耗電,和傻),即轉化爲它的斷言信號,用於Ñ時鐘週期,後它可以假設來自單元的數據信號足夠穩定以便回讀*。它是如何知道時鐘頻率是什麼的,因此應該是什麼n?很簡單:作爲設置時鐘的程序員,請告訴它。一些硬件事情讓軟件處理起來容易得多。

*和然後通過提取相關8,16或32位的進一步的惡作劇外出128位線的它的讀取,到最後吐出的另一側到所述AHB總線等待的CPU,顯然。

+0

幫了我很多。爲了完成這個工作,我們冒險的「唯一」的事情是,如果我們不關心等待週期,那麼會得到損壞的數據? –

+0

可能吧,但我不會下注任何有價值的東西。有可能會出現一些控制信號,這些信號可能會進入未定義狀態,並導致某些事情發生故障或死鎖,這並沒有超出可能性領域。而且,這並不像執行不一定正確的指示可能完全「安全」。 – Notlikethat

+3

我對ST的內部閃光燈具有不正確的等待狀態設置的經驗,即使關閉了一個,也會導致難以追蹤的問題。即使你削減了一個低於他們指定的等待狀態。它可能在室溫下工作,但在較冷或較熱時開始失效。一旦你發現閃光燈配置不正確,一切都有意義,但在此之前,你會瘋狂嘗試追查所有錯誤的地方的問題。 – rjp