儲存的桌球操作

2021-08-31 00:25:34 字數 1828 閱讀 9585

首先,要明確的是,資料寫的過程包括

擦除,下圖為nand flash乙個block(128k+7k)的時間,若擦除時被打斷,資料會殘缺

寫入,下圖為nand flash寫入乙個page(2k+112byte)的時間,所以乙個block的寫入需要64 x 300us = 19.2ms 的時間,若寫入時被打斷,資料會殘缺

資料讀的過程時間不計,因為讀過程被打斷,並不會造成資料的損壞

綜上所述,對擦除,寫入的失敗都要進行處理(會造成資料損壞)

接下來,對桌球操作進行解釋,對於擦除和寫入的處理有兩種方式,先介紹

對於讀寫都放在乙個介面內

函式

首先,使用兩個塊作為桌球塊

關於寫操作:寫入資料時,先指向塊a,對其進行擦除並寫入的操作。其中,若擦除時斷電,或者寫入時斷電了,不做處理。若擦除和寫入都完成的話,將寫指標指向另乙個塊。

關於讀取:讀取時讀取不是寫指標所指的那塊,比如寫指標指向a,則讀取b

第一次上電初始化時,先對ab塊進行擦除

收到資料後,將資料寫入a塊(上電初始化時擦除了,所以現在不用擦),然後將寫指標指向b塊。(若此時要讀取資料的話,就讀取a塊,即不是寫指標指向的那塊)

再次收到資料,將資料寫入b塊,同理,上電初始化的時候擦除過了,所以現在不擦,然後將寫指標指向a塊(若此時要讀取資料的話,就讀取b塊,即不是寫指標指向的那塊)

現在假設兩塊都有資料,那麼接下來分析各種失敗的情況

4. 擦除時掉電,不做處理,因為還有另一塊做備份,上電時讀取另一塊資料就好

5. 寫入時掉電,不做處理,同上

6. 讀取時掉電,此時對資料不會有影響,不處理

函式

關於寫操作:假設資料已經寫入兩塊,現在寫入資料時,先指向塊a,將資料寫入塊a,然後擦除塊b,然後將寫指標指向塊b

關於讀取:讀取時讀取不是寫指標所指的那塊,比如寫指標指向a,則讀取b

現在假設兩塊都有資料,那麼接下來分析各種失敗的情況

寫入時掉電,不做處理,因為還有另一塊做備份,上電時讀取另一塊資料就好

擦除時掉電,不做處理,因為還有另一塊做備份,上電時讀取另一塊資料就好

讀取時掉電,此時對資料不會有影響,不處理

那麼以上兩種方式有何區別?

首先,不討論寫操作時掉電的情況,因為兩種方式,寫操作掉電的話,都只能讀取舊的備份資料。所以以下預設寫操作沒問題。

區別在擦除操作和寫操作的順序,

第一種方式,由於spi_flash的擦除時間偏長,所以掉電時很大概率落在擦除中,所以當進行寫入操作時,萬一掉電了,最新的資料沒有寫入到flash中,重新上電後讀取的是上次備份的資料

第二種方式,由於每次都是先寫入再擦除另一塊,所以寫入最新資料後,擦除的是備份的資料,當擦除備份資料掉電後,重新上電讀取的是最新的資料。

其他問題

讀取和寫入會衝突嗎?

就算使用free_rtos,要需要保證讀取 和 寫入不能被打斷,擦除和讀取同時只能有乙個在進行

若兩個塊讀取的資料都校驗失敗怎麼辦?

重新初始化,擦除兩個塊的資料

桌球操作的寫入控制器

桌球操作的寫入控制器,由wr en使能,使能後,將會根據記憶體寫入次數的計數,輸出合適的位址,記憶體塊的片選訊號,以及將資料來源的資料輸出,由於wr req要求先資料乙個時鐘,這樣,如果使能模組判斷可以寫入,則wr en和data in同時進入此模組,乙個時鐘後,輸出位址,資料,片選 從而完成資料的...

FPGA兩片RAM的桌球操作

在資料處理的乙個週期內,為了避免同時對ram讀和寫,因此利用桌球操作將讀寫分開,在乙個週期內僅對一片ram讀,對另一片ram寫,下個週期後再換回來。因此,實際上一片ram的操作週期是兩個資料處理週期。scyc 資料處理週期 exsig ram切換訊號 wsig ram寫訊號 rsig ram讀訊號 ...

由桌球隊問題想到的

問題 問題描述 兩個桌球隊進行比賽,各出3個。甲隊為 a b c 3人,乙隊為 x y z 3人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單,a說他不和x比,c說他不和x z比,請程式設計序找出3對賽手的名單。之所以拿這個題目來講,是因為有些鬱悶 如此簡單的題目竟然耗費了我相當長的一段時間。咋看這...