專注單片機開發的英銳恩科技的資深團隊工程師總結了一些單片機開發過程中的小技巧,分享給你們。選擇Flash工藝的單片機是為了應對單片機開發過程中數據的經常更新,但是頻繁擦除超過一定次數之后,Flash就會失效。腫么辦?小技巧延長flash工藝單片機的壽命。雖然不是真正的提升了單片機Flash的擦寫次數,但是卻延長了Flash的擦寫壽命,實現了需要頻繁更新數據的應用。
在單片機開發應用中,工程師經常會遇到需要在單片機內部Flash的某個區域保存和讀取一些數據,而這些數據在應用中可能會經常變化,因而需要對Flash的數據經常更新。需要不斷地進行擦寫,那么,如何才能延長單片機的Flash擦寫壽命呢?
英銳恩科技以EN Flash 工藝單片機為例,講解如何延長單片機的Flash擦寫壽命。
EN
Flash 工藝單片機具有1000 K Flash擦除次數,一個Flash
Page是512字節,也就是在執行擦除指令時,一次至少擦除512字節的數據。EN Flash
工藝單片機提供了Flash自編程的讀、寫和擦除函數以及對Flash操作的參考例程。Flash支持單字節讀和寫,但是每次在更新數據之前必須要先擦除原來的數據,不能在原數據基礎上直接寫新數據內容。假設每次需要更新的數據長度是16個字節,最簡單的方法就是在每次更新數據之前執行擦除指令,然后寫入新數據。但是更新數據頻率比較高的應用場合,這種方法顯然是不行的。此時需要采取“空間換時間”的方法了,擦寫的次數和存儲數據長度的大小成反比?!翱臻g換時間”就是指利用相對多的Flash空間來換取相對多的擦寫時間(次數)。在第一次執行擦除指令后,可以依次將數據寫入Flash的這一頁,當寫滿一頁后再進行擦除操作。這樣的話,一頁512字節空間,每次寫入16字節長度的數據,一頁就可以寫32個數據塊,寫滿后再全部擦除,而不用每次寫數據前都擦除,該頁的擦除次數就可以提高32倍,也就是100K*32=320萬次了。
既然思路清晰了,那么單片機軟件實現起來就相對比較簡單。
首先需要選取數據塊中的某一字節作為地址INDEX,更新數據時第一個寫入Flash。Flash的編程原理都是只能將1寫為0,而不能將0寫為1。所以在Flash編程之前,必須將對應的頁擦除,而擦除的過程就是把所有位都寫為1的過程,頁內的所有字節變為0xFF。
寫入數據實現過程:
每次寫入數據時,從低地址到高地址依次(以16位步進)判斷INDEX的內容,為了防止實際數據中包含0xFF內容,從而出現誤判的情況,建議判斷INDEX和INDEX+1兩個地址的內容。如果都為0xFF,表示該地址空間未被寫過數據,寫入需要更新的數據;如果至少有一個不為0xFF,表示該地址空間已被寫過數據,繼續查詢,直到查到內容都為0xFF為止;如果所有的INDEX(32個)和INDEX+1都至少有一個不為0xFF,表示該頁已經寫滿,執行擦除指令后從首地址寫入數據。
讀取數據實現過程:
每次讀取數據時,從高地址到低地址依次(以16為步進)判斷INDEX的內容,這樣是為了查詢到最新的數據。同樣為了防止實際數據中包含0xFF內容,從而出現誤判的情況,建議判斷INDEX和INDEX+1兩個地址的內容。如果至少有一個不為0xFF,表示該地址已寫過數據,讀取數據;如果所有的INDEX(32個)和INDEX+1都為0xFF,表示該頁還未寫入數據。
perfect,思路清晰,實例講解。
英銳恩科技資深工程團隊為您提供免費技術支持,低成本的8位單片機,32位單片機買起來。