<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

延長FLASH和EEPROM芯片寫入次數的小方法

聚豐開發 ? 2018-10-29 11:01 ? 次閱讀

注:本文是作者以前發表在其個人博客,現在發布到“聚豐開發”專欄


開發電子產品時,常常需要斷電后保存某些數據,這就需要使用 FLASH或EEPROM芯片,這兩種芯片,可擦除的次數是有限制的,通常FLASH為10萬次,EEPROM要多一點,為100萬甚至1000萬次。 FLASH的擦除不能單個字節進行,有一個最小單位,存儲容量相對比較大,適合大量數據的存儲;EEPROM可以單個字節進行擦除,存儲容量不大,只適合存儲少量的設置數據。


先以FLASH和EEPROM需要寫入一個字節為例來說明新數據是如何寫入的。假定都是在首地址要寫入新數據0x55。不管是FLASH還是EEPROM。 對于FLASH,寫操作只能將數據位從1改寫為0,如果想要將數據位從0改為1,就需要進行擦除操作,而且這個擦除最小單位是page(可能是256字節或更多)。



現在要在首地址寫入0x55,穩妥的方法是先擦除這個地方,也就是要擦除第一個page,擦除操作會一并將首地址后面的另外255個字節也擦除掉,如果這255個字節保存有其它數據,還需要把這些數據先進行備份,擦除第一個page后再將0x55和備份的255個字節寫進去。也不是必須擦除第一個page,寫操作可以完成數據位1到0的轉變,利用這一特性結合首地址原來的內容,我們就有可能不用進行擦除操作,比如原來內容為0xFF,顯然可以直接寫入0x55,原內容為0xF5,同樣也可以寫入0x55,但如果原內容為0xAA,執行寫0x55則會得到完全錯誤的結果,寫完后內容依然為 0x00,因為對于0x55所有需要保持為1的位數據0xAA都是0,寫0x55會把0xAA為1的位全清0,原來為0的位不會改變。


對于EEPROM,寫操作既可以將數據位從1改寫為0,也可以將數據位從0改寫為1,不需要進行單獨的擦除操作,要寫0x55直接將0x55寫到首地址,不管原來內容為什么,完成寫操作后內容都是0x55。


一開始我們說了FLASH和EEPROM都有可擦除的最大次數(EEPROM實際上沒有擦除操作),雖然這個數字看著不小,但對于程序來說并不大,比如EEPROM為10萬次,如果我們以每秒一次的間隔依次寫入0xFF和0x00,則只能維持 100000/3600=27.78小時,也就是一天多就可以超出其最大壽命次數,不能再可靠寫入所需的內容。


這種可寫入的最大次數是芯片的特性決定的,我們無法改變,所以在使用這些芯片時,我們應充分考慮最大寫入次數這一參數,要確保產品在實際工作中不超過這一參數。實際上許多時候只要程序做出針對性處理,有可能讓產品的最大寫入次數超過芯片的壽命,還是以EEPROM來做說明。


假定現在有一個產品,需要保存一些參數,參數的個數并不多,總共為10個字節,用EEPROM來保存就可以滿足需求,我們選用了容量為256字節的 EEPROM,如果我們不做過多考慮,很有可能就是直接將這10個字節從EEPROM的首地址開始保存,每次改寫也是直接修改這部分內容,這樣我們最多可以保存參數10萬次。只要我們做一點簡單處理,就可以將保存參數的次數成倍增加,來看看我們應該如何實現。




直接保存的最簡方法:

地址 0x00 0x01 0x02 ... 0x09

內容 data1 data2 data3 ... data10



改進的保存方法:


處理方法是將256字節按16字節大小分成16等份,按后面格式存儲參數


地址 0x10*n +0x00 +0x01 +0x02 ... +0x09 +0x0A +0x0B +0x0C +0x0D +0x0E +0x0F

內容 flag data1 data2 ... data9 data10 保留1 保留2 保留3 保留4 check_sum

check_sum=(flag+data1+data2+...+data10+保留1+...+保留4 )&0xFF

flag為0xA5表示當前16個字節為正在使用的記錄,為其它值表示當前16字節已經丟棄。


讀取參數的時候先從地址0x10*n+0x00讀flag,如果為0xA5表明當前記錄為正在使用中,讀出全部內容,并按前面公式進行校驗,如果校驗出錯,則當前參數不可靠,直接使用默認參數,并將當前區域的flag改寫為0,同時在地址0x10*(n+1)位置開始將默認參數寫入,地址0x10* (n+1)寫入內容為0xA5。如果所有區域都沒有發現有效記錄,在地址0寫入默認參數。


每次需要更改參數設定時,先將當前記錄位置的flag改為0,然后再下一條記錄位置寫入新的參數,這個順序可以做出適當改進,比如對寫入時斷電等意外情況做出考慮,從而得到更可靠的寫入結果,不過就按此方法也都可以滿足應用需求。


再來對比一下兩種方法,最簡方法只能保存10萬次,改進的方法理論上增加了16倍,達到160萬次,如果預估最簡方法產品是3年內絕對不會出錯,現在就增加到了48年,一個電子產品使用超過3年還是有可能,但用48年的可能性就非常之小,可以視同為0。對于FLASH芯片也是同樣道理,這里就不重復舉例說明,在應用中也應該做出同樣的處理。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    447

    文章

    48195

    瀏覽量

    411042
  • FlaSh
    +關注

    關注

    10

    文章

    1562

    瀏覽量

    146820
  • EEPROM
    +關注

    關注

    9

    文章

    930

    瀏覽量

    80574
收藏 人收藏

    評論

    相關推薦

    NAND Flash寫入速度和擦除速度分別是多少

    NAND Flash寫入速度和擦除速度會受到多種因素的影響,包括Flash芯片的具體型號、制造工藝、以及操作環境等。因此,無法給出確切的數值。
    的頭像 發表于 02-19 12:41 ?1531次閱讀

    單片機為何需要FlashEEPROM?它們有何作用?

    單片機為何需要FlashEEPROM?它們有何作用? 單片機是一種集成電路,具有處理器核心、內存和外設等功能,通常用于嵌入式系統中。FlashEEPROM則是單片機中常用的存儲器類
    的頭像 發表于 01-18 11:43 ?1311次閱讀

    單片機芯片怎么寫入程序

    單片機芯片的程序寫入是通過將程序代碼寫入單片機芯片的非易失性存儲器(如Flash)中實現的。 在計算機科學和電子工程領域,單片機是一種集成電
    的頭像 發表于 01-05 14:06 ?4243次閱讀

    eepromflash的區別的作用

    在計算機和電子設備中廣泛使用。EEPROMFlash Memory有很多共同之處,比如它們都屬于非易失性存儲器,可以在斷電后保留數據。然而,它們也有一些關鍵的區別,包括擦除方式、寫入速度、使用壽命
    的頭像 發表于 12-07 16:10 ?995次閱讀

    APM32F4 Flash模擬EEPROM介紹和代碼實現

    FlashEEPROM一次操作的數據大小不同。雖然MCU內部的FlashEEPROM一樣,可以實現按字節的讀寫,但是在寫入的時候,是必須
    的頭像 發表于 12-01 17:52 ?499次閱讀
    APM32F4 <b class='flag-5'>Flash</b>模擬<b class='flag-5'>EEPROM</b>介紹和代碼實現

    有沒有不限擦寫次數EEPROM?

    EEPROM通常擦寫次數都在百萬次以下,如果每秒寫一次,幾天就廢了,有沒有擦寫次數無限制的類似產品?
    發表于 11-08 06:15

    flash芯片時為什么需要先擦除?

    數量的頁(Page)組成,每頁又可以分成若干個扇區(Sector),扇區是Flash芯片的操作基本單位,通常為512字節或1K字節大小,而整個Flash芯片的容量則可以達到數個GB以上
    的頭像 發表于 10-29 17:24 ?3077次閱讀

    使用MCU Flash模擬EEPROM

    使用MCU Flash模擬EEPROM
    的頭像 發表于 10-18 18:01 ?475次閱讀

    怎么延長flash讀寫的壽命?

    在讀寫次數不變的情況下,如何盡可能的延長flash讀寫壽命
    發表于 10-13 07:22

    如何寫入tinyAVR 1系列器件中的閃存和EEPROM

    電子發燒友網站提供《如何寫入tinyAVR 1系列器件中的閃存和EEPROM.pdf》資料免費下載
    發表于 09-25 09:55 ?0次下載
    如何<b class='flag-5'>寫入</b>tinyAVR 1系列器件中的閃存和<b class='flag-5'>EEPROM</b>

    如何使用Flash模擬EEPROM存儲參數

    概述在MCU的使用中,經常遇到需要存儲參數或掉電保持數據等功能。其中,FlashEEPROM是常見的非易失性存儲器,都可以做到設備掉電重啟后,數據還會保留。但二者有明顯的區別:EEPROM可以
    的頭像 發表于 09-22 08:19 ?872次閱讀
    如何使用<b class='flag-5'>Flash</b>模擬<b class='flag-5'>EEPROM</b>存儲參數

    基于HPM6000系列芯片如何使用Flash模擬EEPROM存儲參數

    被編程和電擦除,而且大多數的EEPROM可以被編程和電擦除,大多數串行EEPROM允許逐字節程序或擦除操作。與EEPROM相比,閃存具有更高的密度,這允許在芯片上實現更大的內存陣列(扇
    的頭像 發表于 09-21 09:15 ?1018次閱讀

    說說EEPROMFLASH的那些事

    最開始參加工作的時候,經常聽到有需求說XX參數存到EEPROM,XX事件保存在FLASH中,當時只是覺得這兩個東西都是可以用來存數據,應該大差不差。那真是這樣么?這篇就來說說EEPROMFL
    發表于 08-10 11:15 ?796次閱讀
    說說<b class='flag-5'>EEPROM</b>和<b class='flag-5'>FLASH</b>的那些事

    FlashEEPROM的區別

    以前做項目,有時用Flash,有時用EEPROM,搞得我有點懵逼。
    發表于 07-27 12:24 ?1296次閱讀
    <b class='flag-5'>Flash</b>和<b class='flag-5'>EEPROM</b>的區別

    用N76E003flasheeprom用什么方法保存一個計數的數據累加到數千萬?

    flash擦寫次數有限,用N76E003flasheeprom用什么方法保存一個計數的數據累加到數千萬。
    發表于 06-14 07:11
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>