一種簡單的nor flash 備份恢復機制
阿新 • • 發佈:2018-12-20
背景:nor flash在寫資料前都需要先把整個section(64K block )擦除再寫,但是在這個過程意外斷電,那麼這個section(64K block )資料將全部丟失,為了保證這種意外丟失,本文將採用另外一個section(64K block )進行備份後恢復。
資料恢復機制是採用一個block用於存放資料,一個block用於備份和恢復資料的資料管理方法,前提條件是儲存的資料長度必須小於64K – 16byte;16byte用於備份資料的校驗和恢復標記;機構如下:
備份地址(4Byte) |
備份長度(4Byte) |
備份資料CRC(4Byte) |
備份標記(3Byte)+恢復標記(1Byte) |
備份標記:0x3C4B5A
恢復標記:restore_flag,當標記為0x0F時,表示上次寫資料沒有完成,其他值忽略;當完成恢復資料或寫資料後,標記為設定為0x00;
如果資料讀寫採用動態的地址增量寫法,增量地址和長度的最後位置滿足條件:最後地址+長度<64k-16才能應用恢復功能。
備份機制生效條件,資料儲存採用兩個block進行儲存,當只有一個block時,備份功能失效。
資料備份有兩種模式選擇,一種是備份上次寫前的fash資料,另一種是備份本次要寫的資料;
資料區的擴充套件,寫資料必須先把整個section的資料先讀出來在把本次寫的資料進行重新拼裝。
資料恢復通過讀寫內部介面呼叫進行判斷和恢復,讀寫資料前先呼叫恢復資料機制檢驗是否需要恢復資料,再讀寫資料,保證讀取的資料是上次寫的資料或意外寫失敗前備份的資料。
流程因為無法直接剪貼,所以暫時略。