在實際應用中,使用者經常需要在程式執行過程中儲存或讀取一些資料,這些資料在工作中經常會變化,而且掉電後也不能丟失,所以需要及時地進行儲存,儲存這些資料常用的儲存器是eeprom。hxm6002雖然本身不帶eeprom,但是它支援自程式設計技術,可以利用flash來模擬eeprom,這樣不僅簡化了設計,而且降低了成本。
一般情況下,flash都是以2的n次方為一頁,在執行擦除指令時,一次最少要擦除一頁的資料。flash支援單位元組讀寫,但每次在更新資料前都必須先擦除原資料,然後才能重新寫入資料,而不能在原資料基礎上更新內容。
hxm6002模擬eeprom的flash每頁為512位元組。在實際應用中,即使只需要儲存少量的資料,如32位元組的資料,也必須以512位元組來模擬eeprom。最簡單的儲存方法是,在每次更新資料前執行擦除指令,然後寫入新資料。該方法適用於更新資料頻率不高的應用場合,因為hxm6002的擦寫次數典型值為1000次。對於更新資料頻率較高的應用場合,如需要1萬次的擦寫次數,就需要採用「空間換時間」的方法了,擦寫的次數和儲存資料的大小成反比。所謂「空間換時間」,是指利用相對多的**空間來換取相對多的擦寫時間(次數)。即在一頁內,可以依次將資料寫入flash,當寫滿一頁後,再全部擦除,比如儲存32位元組的資料塊,一頁就可以寫16個資料塊,寫滿後再全部擦除,這樣該頁的擦寫次數就可以提高15倍,即1.6萬次。
下面以32位元組的資料塊為例,來簡要說明「空間換時間」的軟體實現方法。首先需要選取資料塊中的某一位元組作為位址index,更新資料時第乙個寫入flash,該位元組必須滿足任何時候都不能為ffh,否則會發生錯誤。
(1)儲存資料:每次儲存資料時,從低位址到高位址依次(以32為步進)判斷index的內容。如果為ffh,表示該位址空間未寫過資料,寫入需要更新的資料;如果不為ffh,表示該位址空間已寫過資料,繼續查詢;如果所有的index(16個)都不為ffh,表示該頁已經寫滿,執行擦除指令後從首位址寫入資料。
(2)讀取資料:每次讀取資料時,從高位址到低位址依次(以32為步進)判斷index的內容,這是為了查詢到最新的資料。如果不為ffh,表示該位址已寫過資料,讀取資料;如果所有的index(16個)都為ffh,表示該頁還未寫入資料。
前面提到,每次在更新資料前都必須先擦除原資料,然後才能重新寫入資料,而不能在原資料基礎上更新內容,這並不是絕對的。根據flash寫操作的特性,只能將『1』寫成『0』,而不能將『0』寫成『1』。而1byte=8bit,所以,如果每次只是寫1位元為『0』,則乙個位元組可以寫8次。例如,第一次寫第0位為『0』,第二次寫第1位為『0』,……,第八次寫第7位為『0』。在實際應用中,也可以利用該特性,來獲取更多的擦寫次數。
塊擦寫flash任意位置的修改
大部分的微控制器flash都是只支援塊擦寫,所以都需要一塊一塊的擦除和寫入,為了應用的方便,可以保證隨時隨地的改寫任意位址的任意長度資料,而不影響位址所在塊其他位置的資料,所以單獨寫乙個函式,實現也比較簡單,記錄下來方便今後直接使用,實現原理就是查詢當前位址所在塊,讀取出來改塊資訊,修改相應位置資訊...
win10如何提高電腦畫質 如何提高電腦的安全性
電腦安全對於任何乙個個人電腦來說,都是非常重要的,因為個人電腦中往往都儲存著大量的個人資訊,這裡為大家介紹幾個小措施,對電腦安全有很大的積極作用。首先,我們從以下幾個方面來提高電腦的安全性。1 啟動和登入 1 設定乙個開機密碼 給電腦的賬戶設定乙個賬戶密碼,不同的系統版本設定的方法大致一致,win7...
如何提高編碼的效率
1 明確專案需求 2 將專案需求細分,形成每乙個具體的,可實現的過程 3 如果乙個專案實現,需要到多種新的技術,而這些技術我們之前又沒有接觸過,建議每一種技術先看一些基本的簡單例子,自己動手做做乙個簡單的damo,掌握了相關的技術細節後,再遷移到開發的專案中來 4 如何快速解決專案開發中遇到的問題。...