1. 程式人生 > >SM470 F05庫函數閱讀筆記

SM470 F05庫函數閱讀筆記

image 得出 技術 not img blank ash 功能 其他

函數:

1.Flash_Compact_B

用於flash硬件檢測。檢測並校正flash裏的電荷損耗bit。該函數一次只校正一個sector。

2.Flash_Blank_B

用於驗證flash是否被正確擦除。每個bank單獨調用,不能同時用於多個bank。

1=region is blank;

0=region is no blank(讀取值為非0xFFFFFFFF)

3.Flash_Verify_B

驗證寫入的數據是否正確。

4.Flash_Verify_Data_B

驗證寫入的數據是否正確。

與Flash_Verify_B的區別是:指定了用於跟flash數據進行比對的buff裏的數據長度。

NOTE:

1.調用Flash_Erase_B,Flash_Sector_Erase_B,Flash_Start_Erase_B之前先調用Flash_Compact_B,Flash_Compact_B不會對現有數據有任何影響,僅校正有可能存在的電荷損耗現象(depletion);

2.擦除過程中發生中斷可能會導致產生這樣的位:緊接著的Flash_Blank_B檢測為已擦除,但是未被完全擦除(完全充電)的位。

解決方法:通過調用Flash_Blank_B將status.Stat1傳給Flash_Erase_B來修正這樣的bit。1)若Flash_Blank_B返回值為TRUE,則status.Stat1 = 0x12345678,Flash_Erase_B將屏蔽預處理步驟(將所有的位置0),僅擦除和compact;

2)若Flash_Blank_B返回值為FALSE,則status.Stat1 = 0x00000000,Flash_Erase_B執行完整的過程(full erase)。

**由於Flash_Start_Erase_B和Flash_Erase_Sector_B沒有status參數,所以無法使用該功能。

結合以上兩點,我們可以得出這樣的結論:

1)每次擦除之前先調用Flash_Compact_B檢測硬件是否完好;

2)再調用Flash_Blank_B檢測是否為blank,如果是,就可以省去擦除預處理步驟以節省大量時間(使用FLASH_ERASE_B);

不同的擦除流程比較

1.使用FLASH_ERASE_B函數

1)可擦除任意個sector;

2)從數據吞吐量的角度看令人滿意:被識別為blank的sector處理更快,但代碼復雜;

3)優點:能夠屏蔽預處理(屏蔽預處理能夠極大地提高blank sector的擦除速度);

4)即使被識別為blank的塊也要再擦除一次,以避免Flash_Erase_B過程中產生的不合格的數據;(使用之前無論如何再擦一遍就是了)

**Flash_Erase_B是唯一一個記錄erase和compaction脈沖記數的函數。(有什麽用處呢?

技術分享

2.使用FLASH_ERASE_SECTOR_B函數

1)可擦除任意個sector;

2)從數據吞吐量的角度看令人不太滿意:所有的sector都執行了完整的擦除過程(full erase,包括預處理過程,相比FLASH_ERASE_B要慢);

3)優點:代碼簡潔;

4)即使被識別為blank的塊也要再擦除一次,以避免Flash_Erase_Sector_B過程中產生的不合格的數據;(跟FLASH_ERASE_B一樣)

5)無相關脈沖記錄(相比於FLASH_ERASE_B)。

技術分享

3.使用FLASH_START_ERASE_B和FLASH_STATUS_U16

1)可擦除任意個sector;

2)優點:多任務處理,狀態機在執行擦除操作的同時可以執行其他指令

3)使用之前無論如何再擦一遍!

4)無相關脈沖記錄(相比於FLASH_ERASE_B)。

技術分享

寫入流程

1)對於用到的sector,每次寫入之前都要擦除;

2)管理要存入的數據。i.e.如果要存入的數據量大,需要跨bank存儲,那麽需要先對數據進行分割,並針對不同的bank單獨調用FLASH_PROG_B。

技術分享

SM470 F05庫函數閱讀筆記