天天看點

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

本節書摘來異步社群《嵌入式linux軟硬體開發詳解——基于s5pv210處理器》一書中的第2章,第2.1節,作者:劉龍,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

嵌入式linux軟硬體開發詳解——基于s5pv210處理器

在嵌入式系統中,很多資訊在系統關閉電源後不能夠丢失,這些資訊需要使用非易失性存儲器來存儲,我們可以使用nor flash和nand flash來實作。

nor flash和nand flash是現在市場上兩種主要的非易失閃存技術。intel公司于1988年首先開發出nor flash技術;1989年,東芝公司開發出nand flash技術。nand flash和nor flash的主要差別如表2-3所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

在嵌入式裝置中使用slc和mlc這兩種不同類型的nand flash閃存技術的裝置都很常見。slc全稱為single-level cell,單層單元閃存;mlc全稱為multi-level cell,多層單元閃存。兩者的主要差別是slc每一個單元儲存一位資料,而mlc通過使用多個電壓等級,每一個單元儲存兩位資料,資料密度比較大。

slc生産成本較高,但在效能上大幅勝于mlc。slc晶片可重複寫入約10萬次,而mlc晶片的寫入次數約為1萬次,目前三星采用的mlc晶片寫入壽命在5000次左右。在讀寫速度上,相對于主流slc晶片,mlc晶片理論速度較慢。mlc能耗大于slc,在相同使用條件下比slc要多15%左右的能耗,因為mlc理論寫入次數上限相對較少,是以在相同使用情況下,使用壽命比slc短。

兩種閃存技術對應晶片差別如表2-4所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

smart210開發闆無nor flash。采用的是slc類型nand flash,容量為512mb,型号為k9f4g08uob。

k9f4g08uob的引腳排列如圖2-8所示,各個引腳的功能如表2-5所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片
《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

i/o0~i/o7:位址、資料和指令輸入/輸出引腳。

cle、ale:指令鎖存使能引腳和位址鎖存使能引腳,用來選擇i/o輸入的信号是指令還是位址。

overline {{text{ce}}}、overline {{text{re}}}、overline {{text{we}}} :片選信号、讀使能信号和寫使能信号引腳。

overline {frac{{text{r}}}{{text{b}}}}:狀态引腳,表示裝置的狀态,當資料寫入、程式設計和随機讀取時,overline {frac{{text{r}}}{{text{b}}}}處于高電平,表明晶片正忙,否則輸出低電平。

k9f4g08uob内部結構如圖2-9所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

nand flash裝置的存儲容量是以頁(page)和塊(block)為機關,1block=64page,1page=2112byte(2048byte用于存放資料,其餘64byte用于存放其他資訊,如塊好壞的标記、塊的邏輯位址、頁内資料的ecc校驗和等)。

容量為512mb的nand flash存儲結構為:2048byte×64page×4096blocks。

晶片(device)、塊(block)、頁(page)之間的關系如下。

1 device = 4,096 blocks = 4096×64 pages = 256k pages

1 block = 64 page

1 page = 2112 byte = 2048 byte + 64 byte

用于資料存儲的單元有 2048 bytes×64 pages×4096 blocks = 512 mb。

用于ecc校驗或其他功能的單元有64 bytes×64 pages×4096 blocks = 16mb 。

nand flash以頁為機關進行讀和程式設計(寫)操作,一頁為2048byte;以塊為機關進行擦除操作,一塊為2048byte×64page=128kb。

k9f4g08uob的内部對每一頁又進行了劃分,每頁分成前2048byte的main域和64byte的spare域,在main域中,分成a、b、c、d四個扇區;spare域中,分成e、f、g、h四個扇區。每個扇區占據不同的存儲空間,具體分布情況如圖2-10、圖2-11所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

s5pv210和k9f4g08uob的連接配接方式如圖2-12所示。

k9f4g08uob的通路位址、資料和控制指令隻能在引腳i/o[7:0]上傳遞。對于不同的資料類型,s5pv210微處理器和nand flash之間是通過控制總線和一些指令序列來進行區分的。該nand flash晶片所支援的指令序列如表2-6所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片
《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

通過表2-6我們可以看出,如果微處理器想要讀nand flash的内容,可以在cle和overline {{text{re}}}引腳的配合下,通過i/o0~i/o7引腳先後發送00h與30h指令;如果想要讀取nand flash的内部廠商内置的id,可以在cle和overline {{text{re}}}引腳的配合下,發送90h指令;如果s5pv210想要對nand flash進行随機位址的寫操作,可以在cle和overline {{text{we}}}引腳的配合下,首先發送85h指令,然後指定所要寫的位址。

k9f4g08uob容量為512mb,需要30根位址線确定微處理器要通路的位址,而k9f4g08uob隻有8個i/o口,所要操作的位址是在控制引腳的配合下,先後5次發送至flash内部。發送位址時位址序列如表2-7所示。

《嵌入式Linux軟硬體開發詳解——基于S5PV210處理器》——2.3 SLC Nand Flash晶片

序列中列位址為a0~a11,行位址為a12~a29,l表示在寫的時候置為0。對s5pv210通路nand flash位址的指定,隻需要分5步将位址值寫入s5pv210的nand flash控制寄存器即可,nand flash控制器會自動地通過8個i/o,在控制引腳幫助下,分五次通過i/o0~i/o7完成對nand flash位址的寫操作。

繼續閱讀