MCU類比eeprom準系統

來源:互聯網
上載者:User

 MCU類比eeprom準系統

 

如果你的MCU的flash足夠大。並且你的MCU提供自編程flash指令。則可以通過flash類比出一片eeprom地區。用於儲存資料。
       本文參考ST公司的AN2594文檔。使用ST提供的範例。旨在瞭解如何使用Flash類比出一片eeprom。






       由表我們得到擦除時間的比較。內部類比的顯然速度快了。然而我要提醒的是如果你存放於類比EEPROM的資料需要頻繁更改。這裡的頻繁指的是時間小於頁擦除時間。由於類比的eeprom是使用flash,所以只能整頁進行擦除。所以建議頻繁修改的資料不要使用類比的eeprom。但是如果只是單純存放掉電前的資料或者1s鐘記錄一段資料則是可以考慮的。這樣可以節省外部eeprom的成本。




       上圖我們得到ST公司提供的常式是使用兩頁的flash進行類比。為什麼用兩頁呢。如果只用一頁,我考慮了一下。由於只有一頁。資料只能一直往下寫。會有滿的時候。而且更改資料後。前面的資料不會被擦除。當其中一頁寫滿了。就會將該頁不重複的資料由下到上得搬到第二頁,同時擦除第一頁。


        這張圖就是最關鍵的一張圖。有利於瞭解如何存放資料和讀取資料。類比出的eeprom有兩部分組成。分別是虛地址和資料。都為16bit。虛地址存在在高位。資料存在低位。
       比如一開始在虛地址0x7777H寫入資料0x1232H。資料存放如圖所示。如果再在同一地址寫入另外一個數,則資料存在下一個位置。但是前面的資料並不會馬上被擦除掉。如果此時要使用ST的函數讀取0x7777H虛地址的資料。那麼讀出來的是0X1245H而不是0x1232H。因為讀取的時候是從下往上讀取。讀取到第一個符合該地址的資料。這樣就很好理解了。
        當資料寫滿的時候。這時寫入的新資料將被存在第二頁。此時會自動調用函數將第一頁不重複的資料拷貝到第二頁。比如我們的虛地址0X7777H和0X5555H的資料。如圖所示。然後將第一頁擦除。兩頁交替使用。說到這裡,你也許明白為什麼頻繁修改的資料不適合存在類比的eeprom裡面了。如果頻繁修改。那麼很快一頁就寫滿了。然後需要擦除這一頁。需要20ms。後面的事你都明白啦。
       由於我的知識有限,只能瞭解那麼多。如果要將程式移植到別的單片機。可以參照這樣的思路。呵呵。

下面是一點學習心得。
// Note  By ChenFen
/*
1.使用STM32內部Flash 類比EEPROM進行讀寫,定義兩頁Flash分別為page0 page1
     Flash類比的起始地址修改位置為eeprom.h中的EEPROM_START_ADDRESS
2.修改eeprom.h 檔案中的 NumbOfVar 實現所需儲存變數數量
3.修改 VirtAddVarTab[NumbOfVar] 實現虛擬位址的修改
4.寫入時寫入資料緊跟後面寫入虛地址VirtAddVarTab(0<=i<NumbOfVar)
5.每個Page第一個地址寫入該頁狀態(Earse,Reveice,Vild)
6.相同地址再次寫入時不會把上次寫的擦掉,而是在類比EEPROM區尾部未寫過的地方再次寫入資料、  虛地址,
   讀的時候是從尾部開始匹配地址,也就是讀取最後一次寫的內容。
    7.類比EEPROM區分為2頁,如果一頁滿了把這一頁內地址不重複的資料複製到另一頁後擦除,2頁交替使用。
8.添加字串儲存函數,改變為1個16bit地址儲存兩位字串的8bit ASCII碼

 

 

STM32的應用手冊AN2594提供內部Flash類比EEPROM的方法,此方法可以很好的應用於外部Flash其他帶內部Flash的MCU上。

1.Flash與EEPROM的區別

EEPROM:Electrically erasable programmable read-only memory,電可擦可程式化唯讀記憶體--一種掉電後資料不丟失的儲存晶片。

Flash:快閃記憶體,它結合了ROM和RAM的長處,不僅具備EEPROM的效能,還可以快速讀取資料(NVRAM的優勢),使資料不會因為斷電而丟失。

EEPROM需要更多的元件及矽,為了降低系統成本,較多的MCU均使用Flash代替EEPROM儲存代碼及資料。

 

   EEPROM  FLASH
 寫入時間

幾毫秒

隨機位元組:5-10ms

頁:字/100us(5-10ms/頁)

 字編程時間:20us
 擦除時間  無  頁/片擦除時間:20ms
 寫入方式

一旦啟動,無需CPU幹涉

只需要供電 

 一旦啟動,需要CPU幹涉
 讀訪問

串列:100us

隨機字:92us

頁:位元組/2.25us

 並行:100ns

字/幾個CPU周期

訪問時間:35ns

 寫/擦除

周期

 10K-1000K周期  10K-100K周期
Flash寫訪問速度快; 外部串列EEPROM寫入不會受CPU複位影響,適當的去耦電容可以保持寫入的完成; EEPROM不需要擦除,Flash擦除需要時間,Flash的軟體設計需要充分考慮複位及中斷情況;

2.實現EEPROM類比

至少需要兩個大小一樣的頁:一個提供逐字編程,另一個提供接收前頁資料。當其中一頁寫滿了。就會將該頁不重複的資料由下到上得搬到第二頁,同時擦除第一頁。每頁的前16位半字標記頁狀態。

頁有三種狀態: 擦除:空白頁; 接收資料:從其他整頁接收資料; 有效用頁:包含有效資料,知道所有有效資料轉移到其他頁才改變狀態;

每個變數元素包含虛地址和資料,以便搜尋和更新。當資料修改後,修改後的虛地址和資料儲存在一個新的位置,取資料時返回最後的數值。

從上面這幅圖瞭解如何存放資料和讀取資料。類比出的EEPROM有兩部分組成,分別是虛地址和資料,都為16bit。虛地址存在在高位,資料存在低位。

比如一開始在虛地址0x7777H寫入資料0x1232H。資料存放如圖所示。如果再在同一地址寫入另外一個數,則資料存在下一個位置。但是前面的資料並不會馬上被擦除掉。如果此時要讀取0x7777H虛地址的資料。那麼讀出來的是0X1245H而不是0x1232H。因為讀取的時候是從下往上讀取。讀取到第一個符合該地址的資料。

當資料寫滿的時候。這時寫入的新資料將被存在第二頁。此時會自動將第一頁不重複的資料拷貝到第二頁。比如我們的虛地址0X7777H和0X5555H對應的資料,緊接0X6666H。如圖所示。然後將第一頁擦除。兩頁交替使用。寫入資料的過程判斷該頁是否已滿,從上往下搜尋,找到FFFF,就可以直接寫入。若搜尋完整頁,均無FFFF,說明該頁已滿,需要寫入下一頁,並執行搬移與擦除操作。

資料需要頻繁更改,不建議使用次方式。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.