微控制器中為什麼有了Flash還有EEPROM?
時,然後才能再下一次,這麼折騰一天也改不了幾次。歷史的車輪不斷前進,偉大的EEPROM出現了,拯救了一大批程式設計師,終於可以隨意的修改ROM中的內容了。
EEPROM的全稱是“電可擦除可程式設計只讀儲存器”,即Electrically Erasable Programmable Read-Only Memory。是相對於紫外擦除的rom來講的。但是今天已經存在多種EEPROM的變種,變成了一類儲存器的統稱。
狹義的EEPROM:
這種rom的特點是可以隨機訪問和修改任何一個位元組,可以往每個bit中寫入0或者1。這是最傳統的一種EEPROM,掉電後資料不丟失,可以儲存100年,可以擦寫100w次。具有較高的可靠性,但是電路複雜/成本也高。因此目前的EEPROM都是幾十千位元組到幾百千位元組的,絕少有超過512K的。
Flash:
Flash屬於廣義的EEPROM,因為它也是電擦除的ROM。但是為了區別於一般的按位元組為單位的擦寫的EEPROM,我們都叫它Flash。
既然兩者差不多,為什麼微控制器中還要既有Flash又有EEPROM呢?
通常,微控制器裡的Flash都用於存放執行程式碼,在執行過程中不能改;EEPROM是用來儲存使用者資料,執行過程中可以改變,比如一個時鐘的鬧鈴時間初始化設定為12:00,後來在執行中改為6:00,這是儲存在EEPROM裡,不怕掉電,就算重新上電也不需要重新調整到6:00。
但最大區別是其實是:FLASH按扇區操作,EEPROM則按位元組操作,二者定址方法不同,儲存單元的結構也不同,FLASH的電路結構較簡單,同樣容量佔晶片面積較小,成本自然比EEPROM低,因而適合用作程式儲存器,EEPROM則更多的用作非易失的資料儲存器。當然用FLASH做資料儲存器也行,但操作比EEPROM麻煩的多,所以更“人性化”的MCU設計會整合FLASH和EEPROM兩種非易失性儲存器,而廉價型設計往往只有 FLASH,早期可電擦寫型MCU則都是EEPRM結構,現在已基本上停產了。
在晶片的內電路中,FLASH和EEPROM不僅電路不同,地址空間也不同,操作方法和指令自然也不同,不論馮諾伊曼結構還是哈佛結構都是這樣。技術上,程式儲存器和非易失資料儲存器都可以只用FALSH結構或EEPROM結構,甚至可以用“變通”的技術手段在程式儲存區模擬“資料儲存區”,但就算如此,概念上二者依然不同,這是基本常識問題。
EEPROM:電可擦除可程式設計只讀儲存器,Flash的操作特性完全符合EEPROM的定義,屬EEPROM無疑,首款Flash推出時其資料手冊上也清楚的標明是EEPROM,現在的多數Flash手冊上也是這麼標明的,二者的關係是“白馬”和“馬”。至於為什麼業界要區分二者,主要的原因是 Flash EEPROM的操作方法和傳統EEPROM截然不同,次要的原因是為了語言的簡練,非正式檔案和口語中Flash EEPROM就簡稱為Flash,這裡要強調的是白馬的“白”屬性而非其“馬”屬性以區別Flash和傳統EEPROM。
Flash的特點是結構簡單,同樣工藝和同樣晶元面積下可以得到更高容量且大資料量下的操作速度更快,但缺點是操作過程麻煩,特別是在小資料量反覆重寫時,所以在MCU中Flash結構適於不需頻繁改寫的程式儲存器。
很多應用中,需要頻繁的改寫某些小量資料且需掉電非易失,傳統結構的EEPROM在此非常適合,所以很多MCU內部設計了兩種EEPROM結構,FLASH的和傳統的以期獲得成本和功能的均衡,這極大的方便了使用者。隨著ISP、IAP的流行,特別是在程式儲存地址空間和資料儲存地址空間重疊的MCU系中,現在越來越多的MCU生產商用支援IAP的程式儲存器來模擬EEPROM對應的資料儲存器,這是低成本下實現非易失資料儲存器的一種變通方法。為在商業宣傳上取得和雙EEPROM工藝的“等效”性,不少採用Flash程式儲存器“模擬”(注意,技術概念上並非真正的模擬)EEPROM資料儲存器的廠家紛紛宣稱其產品是帶EEPROM的,嚴格說,這是非常不嚴謹的,但商人有商人的目的和方法,用Flash“模擬”EEPROM可以獲取更大商業利益,所以在事實上,技術概念混淆的始作俑者正是他們。
來源網路
相關文章
- 為什麼有了 HTTP 還要 RPCHTTPRPC
- 既然有MySQL了,為什麼還要有MongoDB?MySqlMongoDB
- 有了HotSpot JVM為什麼還需要OpenJ9?HotSpotJVM
- 有了 Spring 為什麼還要弄個 Spring BootSpring Boot
- 微控制器中斷有什麼作用
- 有了uWGSI伺服器,Django 為什麼還需要 Nginx?伺服器DjangoNginx
- 有了 for (;;) 為什麼還需要 while (true) ? 到底哪個更快?While
- 為什麼有了併發安全的集合還需要讀寫鎖?
- Java 14 都快來了,為什麼還有這麼多人固守Java 8?Java
- 為什麼Java有了synchronized之後還造了Lock鎖這個輪子?Javasynchronized
- 記憶體分頁不就夠了?為什麼還要分段?還有段頁式?記憶體
- 為什麼《原神》推出三年了還有這麼高的熱度?
- Webpack模組引用中還有什麼坑?Web
- 六年了,這款遊戲為什麼還是有這麼多人在玩遊戲
- Current without potential difference(沒有電位差為什麼還有會電流?🤔)
- FPGA和微控制器有什麼區別呢?FPGA
- [譯] JavaScript 中為什麼會有 Symbol 型別?JavaScriptSymbol型別
- python有什麼特性?為什麼這麼火?Python
- 為什麼Hook沒有ErrorBoundary?HookErrorORB
- 你有沒有想過: 為什麼Java中String是不可變的?Java
- 推薦那麼準,除了模型,還有什麼。。。模型
- 【肥朝】還有這種操作?淺析為什麼要看原始碼原始碼
- Linux中什麼是inode?有什麼作用?Linux
- 為嘛沒有as3 /flash技術咧。。S3
- Twitter為什麼沒有當機?
- 為什麼有許多人學java?Java
- MySQL Connectors為什麼沒有javaMySqlJava
- OptionalInt為什麼沒有ofNullable()方法Null
- 為什麼js會有閉包JS
- 2020年了,為什麼IT行業還那麼“吃香”?行業
- 身兼數職的Amazon DocumentDB,還有什麼不為人知的功能?
- 周朝陽:暑假期,景區為什麼沒有了低價打折?
- 【譯】為什麼Rust中的BTreeMap沒有with_capacity()方法?Rust
- 為什麼中國人沒有自己的程式語言?
- vue中為什麼使用vuex?應用場景有哪些?Vue
- Linux中公有云是什麼?有什麼作用?Linux
- 什麼是shell?Linux中shell有什麼用途?Linux
- JQuery中$(document)是什麼意思有什麼作用jQuery