Nor Flash的操作

來源:互聯網
上載者:User

Flash做為一種非易失性儲存空間,在原理、技術和結構上,與ROM、PROM、EPROM和EEPROM儲存空間有顯著的不同。它是一種可快速擦除可現場編程的快擦寫儲存空間。這種特性決定了Flash做為BIOS、線上擦寫、掉電保護資料以及分區保護資料等場合有著廣泛的應用。

Flash儲存空間特點
由於其內部結構的特殊性,Flash儲存空間最主要的特點在於其內部狀態機器(Internal State Machine)及指令序列(Command Sequences)的操作模式,因此Flash需要較複雜的軟體支援。
除了讀取資料(Read Array Data)以外的其它所有操作,如生產商ID(Manufacture ID)及器件ID(Device ID)識別,分區防寫保護(Sector Protection)/去防寫保護(Sector Unprotection),擦除(chip erase/sector erase),寫資料/校正,複位等操作都需要通過器件內部的指令寄存器(Command Register)啟動內嵌演算法(embeded algorithms)來完成。
BCS / SCS
Intel從早期的8位快閃記憶體晶片28F008開始,就為快閃記憶體晶片的操作定義了操作規程和一套相應的命令,一般就稱為"28F008"或者"008"。後來正式命名為快閃記憶體操作基本命令集,即BCS,其要點如下:
快閃記憶體晶片平時處於隨機讀出狀態,此時的快閃記憶體晶片就像普通的ROM晶片,訪問地址決定了具體的儲存單元;
除非晶片處於寫入狀態,往晶片任意一個單元寫都意味著向晶片發命令,因此是對其控制器的訪問,而不是對其儲存單元的訪問;
根據命令代碼的不同,快閃記憶體晶片內部的狀態機器進入不同的狀態,從而可以進行不同的操作。
BCS中有以下幾條命令:
隨機讀出(Read Array)。向晶片的任意地址寫0xff,使晶片"複位"進入"讀存放裝置陣列" 狀態,在此狀態下CPU可以想訪問普通記憶體那樣從快閃記憶體晶片隨機讀出。快閃記憶體晶片加電後的初始狀態就是隨機讀出狀態。
讀狀態寄存器(Read Status Register)。 向晶片的任意地址寫0x70,表示要求從晶片讀出其狀態寄存器,此後可以從晶片的任意地址讀出狀態寄存器的內容。
寫入(Program),要求寫入晶片的若干儲存單元。往目標塊起始地址寫0x40,表示要求進入寫入模式,或者稱為"編程模式"。進入寫入模式後,就可以對目標塊進行隨機寫入,就像寫靜態RAM一樣。對每個單元只能寫一次(要再次對某單元寫入,需要先對該單元所在的塊進行擦除操作後,才能再進行)。
清除狀態寄存器(Clear Status Register)。向晶片的任意地址寫0x50,表示要求清除狀態寄存器。
單位元組或者字寫入。先向需要寫入的單元寫入0x40或0x10,然後寫入具體資料。
成塊擦除(Block Erase)。向目標塊內任意地址寫0x20(或者0x28),表示要求擦除晶片內一個塊的所有內容。
暫停擦除(Erase Suspends)。向目標塊內任意地址寫0xb0,表示要求暫停擦除操作。需要時,可以通過往目標塊內的任意地址寫0xd0來恢複擦除
成塊擦除確認,或者繼續擦除。往目標塊內的任意地址寫0xd0,表示確認要求擦除晶片內一個塊的所有內容,或者在暫停擦除後恢複擦除操作。
每當向晶片發出命令時,狀態寄存器的最高位(bit 7)就會變成0,當操作完成後,該bit會被硬體置為1。
隨著快閃記憶體技術的發展,Intel後來對BCS進行了擴充,稱為SCS(Scaleable Command Set),即"可擴充命令集"。其中增加了晶片加鎖(Set/Clear Lock Bit)、緩衝寫入。晶片配置、整片擦除操作等命令功能。
上面BCS和SCS描述的操作只適用於Intel的快閃記憶體晶片,或者使用Intel BCS/SCS規範的晶片。
Jedec ID
在快閃記憶體技術發展的初期,只有Intel一家生產快閃記憶體晶片,產品單一。後來慢慢多起來,新投入快閃記憶體晶片生產的廠商往往使自己的產品與Intel相容,所以Intel的BCS就成為了事實上的標準。但是,隨著快閃記憶體晶片生產廠商的增加,快閃記憶體晶片種類和規格也越來越多,一方面導致BCS不夠用了,另一方面就是有的廠商使用了不同於BCS的規程。例如,同樣是讀取晶片ID,由AMD生產的晶片則需要向片上地址0寫入0xAA5。實際上,INTEL和AMD就是最主要的快閃記憶體晶片廠商。在這種情況下,特別是對於通用電腦系統,在對快閃記憶體晶片進行操作之前,首先要搞清這是由哪個廠商生產的什麼晶片。為此,就需要有一個"中立"、受所有快閃記憶體晶片廠商支援的手段,使得電腦軟體可以從晶片中讀取這些資訊。於是,便有了所謂的"Jedec ID"以及相應當命令:
讀晶片ID(Read ID)。往晶片任何地址寫0x90,表示要求從晶片讀出固化在晶片內的身份資訊,如由誰生產,什麼型號等等,稱為"Jedec ID"。這些資訊並不佔用快閃記憶體晶片在記憶體空間的地址。此後,CPU可以從片上地址0開始逐個位元組讀出這些資訊。
CFI
由Jedec ID所提供的資訊實在是太少了。因此,"公用快閃記憶體介面"(Common Flash Interface),即CFI,便應運而生。這是由儲存晶片工業界定義的一種擷取快閃記憶體晶片物理會和結構參數的操作規程和標準。
CFI規定,各廠商可以使用自己的操作規程和命令集,但是必須有統一的編號,並且在軟體到查詢下提供這個編號。而且,快閃記憶體晶片可以同時支援兩套操作規程和命令集,讓軟體選擇使用。同時
Thinking different!
,又規定快閃記憶體晶片必須提供更多的資訊,包括:晶片的電源電壓是多少,擦除/寫入操作是否需要額外的電源,如果需要是多少,晶片的容量有多大,分成幾個擦除塊,各種操作所需時間的典型值和最大值,等等。為此,還定義了一個用來提供詳細資料的標準資料結構,凡是支援CFI的快閃記憶體晶片在收到查詢時都應該能夠按照這個資料結構的格式提供資訊,即CFI資訊塊。此外,還可以與所支援的操作規程和命令集配套提供附加的參數和資訊。
CFI 查詢的規程和命令如下:
向晶片地址0x55寫入0x98,然後從片上地址0x10開始讀出資料。如果讀出的內容依次為:"Q"、"R"、"Y",則該晶片支援CFI。
然後從晶片上連續的地址0x13 ~ 0x30讀出CFI資訊塊的固定部分。
除了固定部分以外,後面還有一個不帶正負號的整數數組,其大小取決於晶片上的儲存區間劃分成幾個擦除區間,數組中的每一個不帶正負號的整數都描述一個擦除區間。一個擦除區間中可以有若干個大小相同的擦除塊。
如果從地址0x15和0x16讀出的16位無符號短整數P非0,則在片上地址P處還有一個"主演算法擴充表"。這就是與"主演算法"(即晶片中主要的操作規程和命令集)配套的參數和其他資訊。
如果從地址0x19和0x20讀出的16位無符號短整數T非0,則在片上地址T處還有一個"次演算法擴充表"。這就是與"次演算法"(即晶片所支援的另外一套操作規程和命令集)配套的參數和其他資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.