---
title: Flash記憶體的原理與應用—PART16（SmartMedia）
description: "**作者：Bird** 上一回，我們聊完了SPI介面的NOR Flash記憶體，…"
url: "https://makerpro.cc/docs/flash-memory-principle-and-application-part16/"
updated: "2025-03-31"
category: Flash記憶體
---

# Flash記憶體的原理與應用—PART16（SmartMedia）

**作者：Bird**

上一回，我們聊完了SPI介面的NOR Flash記憶體，這一次我們要進入一個有點複雜而且有點混亂的世界：SD/MMC/eMMC。

不管是SD還是MMC/eMMC，它們其實都是帶有控制器的NAND Flash。我們在說明Flash記憶體的工作原理時，有講過因為結構和讀寫原理的關係，NAND Flash 的可靠度先天就比 NOR Flash要差。

NAND Flash在讀取時，需要打開一整排的cell電晶體，但目的只是為了感應其中一顆有沒有導通，因此很容易造成floating gate中儲存的電荷受到干擾，而影響儲存內容的正確性，但結構上NAND Flash的密度就是遠高於NOR Flash，因此大容量的儲存應用幾乎都是 NAND Flash的天下。

為了克服 NAND Flash先天可靠度較差、容易出錯的特性，通常不會直接使用它，而必須搭配一個控制器，幫忙做錯誤偵測、錯誤校正、寫入壽命管理等工作。

### **NAND Flash 的濫觴**

在正式進入 SD/MMC/eMMC 的世界之前，我們先來看看 NAND Flash儲存媒體的濫觴：SmartMedia。

 ![](https://makerpro.cc/wp-content/uploads/2024/12/Screenshot-2024-12-01-143229.png)

（圖片來源：Bird 提供）

年紀稍長的讀者對這種記憶卡可能還有點印象，在SD卡攻佔全世界的數位相機市場之前，它可能是最常用的數位相機儲存媒體，巔峰時期有將近50%的市占率。

SmartMedia是 Toshiba 在掌握了 NAND flash 的量產技術後，於 1995 年推出的可插拔記憶體產品。1996 年，Toshiba 與當時的數位相機大頭：Fuji、Olympus 以及電玩巨擘 Sega，聯合成立了 SmartMedia 的標準化組織：SSFDC Forum。SSFDC 的意思是 Solid-state Floopy Disk Card，嗯，你沒聽錯，就是固態軟碟的意思（年紀稍小一點的讀者可能連機械式硬碟都沒看過了，更不用說軟碟），但這在當時確實是一大突破。

SmartMedia 只有 0.76 mm 厚，確實比當年主流的 3.5 吋軟碟片要薄得多，也小得多（最早的 SmartMedia 容量從 2M Bytes 開始，也跟軟碟片差不多），當年甚至有做成 3.5 吋軟碟片形狀的 SmartMedia 讀卡機：你可以把 SmartMedia 裝進這個讀卡機，再把它放進 3.5 吋的磁碟機中讀取。在那個還沒有 USB，且 serial port 只有 115.2 Kbps 的年代，這樣子的讀取技術其實相當有創意，即使讀一張 8M Bytes 的卡可能需要花 5 分鐘以上。

SmartMedia本人其實就是一顆長得扁扁的、經過特殊封裝、將接腳露出來的NAND Flash晶片，它沒有控制器。咦，我們前面不是才說過，NAND Flash需要控制器來幫忙cover一些它先天特性不佳的問題嘛？

對，但是當初為了成本的考量，Toshiba決定不在SmartMedia裡面放NAND Flash的控制器，而是把這些功能交由使用SmartMedia的裝置來處理。這對日後的應用造成了一些始料未及的問題。

SmartMedia的介面共有22支腳，基本上是個parallel的介面，以D0-D7 8個bit來傳輸指令和資料，而且它沒有clock訊號，仍是非同步的邏輯介面，最快的傳輸速度大概是每秒2M Bytes。SmartMedia還分成3.3V和5V兩種，卡片的外型略有不同，裝置可以藉由卡片的外型來判斷該用5V還是3.3V的介面去驅動它（由於它已經是歷史了，細節我們就不多提）。

不過關於SmartMedia儲存格式的細節，倒是值得我們細究，因為從這裡可以看出很多NAND Flash的特性。

### **SmartMedia的儲存格式**

SmartMedia跟所有的Flash memory 一樣，可以部分抹除也可以部分寫入，而且寫入的單位比抹除的單位要小。在SmartMedia中，抹除的單位叫block，一次最少要抹掉一個block，而寫入的單位是page，不管讀或寫的單位都是page。

1MB和2MB的SmartMedia，page的大小是256 Bytes，4 MB以上的SmartMedia，page的大小是512 Bytes，每一個page除了256/512 Bytes的大小之外，還會搭配一小塊額外的空間，叫做redundant section，或者叫做OOB（out of band）area。

 ![](https://makerpro.cc/wp-content/uploads/2024/12/Screenshot-2024-12-01-143237.png)

（圖片來源：Bird 提供）

這個redundant section就是用來對付 NAND 的不可靠，而額外設計的儲存空間。它主要有幾個功能：

1. 儲存錯誤檢查及更正碼ECC資訊
2. 標記page/block的好壞
3. 儲存邏輯/實體位址對應的資訊

這裡面最重要的大概是ECC。因為NAND Flash先天比NOR Flash容易出錯，所以需要錯誤檢查和校正碼來協助維護資料的正確性。在SmartMedia中，每256 bytes搭配22 bits的ECC，可以偵測2個 bit的錯誤，以及修正1個 bit 的錯誤（藉由交互計算資料和ECC，它可以知道壞掉的bit是哪一個）。

換句話說，在SmartMedia中，如果一個256 bytes的page裡的2048個bit，有一個bit出了錯，在讀取時，可以藉由跟ECC交互計算而將它恢復成正確的內容。超過1個以上的bit出錯，就沒辦法修正回來了。

除了ECC之外，在redundant area裡還有一個欄位叫做「Data Status Byte」，用來紀錄這個page裡存的資料是否正確。所謂「正確」就是它可以通過ECC的檢查，如果在ECC檢查過程中出錯，而且錯誤超過ECC可以修正回來的範圍，就會在這個byte做記號，讓讀取SmartMedia的裝置知道這個page內的資料出問題了。

除了Data Status Byte，在redundant area中還有另外一個欄位叫做「Block Status Byte」，用來紀錄這個page所在的block還行不行、是否已經開始出問題（在同一個block裡的所有page，這個Block Status Byte的內容應該要一樣）。

### **誰來執行？**

問題來了，既然SmartMedia裡面沒有NAND Flash控制器，錯誤檢查、校正、壞區標記這些事，該由誰來做呢？答案是由使用SmartMedia的裝置來做。

它大概是這樣進行的：每次裝置要寫入一個page時，它除了準備好的資料之外，同時也會根據ECC的演算法，算出正確的ECC碼，並一起寫入SmartMedia。

讀取SmartMedia時，需要以page為單位，一次讀出256 + 8 bytes，讀出來的資料包含了256 bytes的資料本人，以及8 bytes的redundant area，這裡面包含了ECC碼。裝置會計算讀出資料本人的ECC，並與redundant area中讀出的ECC比較，如果兩者相符，就代表資料正確，這個page的資料是可以使用的；如果兩者不相符，就代表資料已經出錯了。

如果錯誤小於1個bit，可以用ECC修復它，如果超過1個bit，就沒辦法修復。這時控制器就會在data status byte中標註這個page裡的資料有錯。

有沒有發現，在讀取SmartMedia時，我們需要讀取一個page的資料才能利用ECC做錯誤檢查和修正？因此我們沒辦法「只從NAND Flash中讀取1個byte」，雖然NAND Flash的電路結構上做得到，但由於ECC的機制必須以page為單位運作，而我們需要ECC來確保讀出資料的正確性，所以即使我只需要1個byte，也必須要從SmartMedia裡讀出一整個page，才能確保這個byte的正確性。

這就是我們常聽到的，「NAND Flash不適合隨機存取」的主要原因。事實上它是可以隨機存取的，但為了ECC的機制，讀取和寫入都必須以page為單位運作。

由於SmartMedia是不含控制器的NAND Flash晶片，我們才能看到它的redundant section，以及ECC的機制。現在大部分的NAND Flash晶片都內建了控制器，它會幫我們處理這些錯誤檢查和校正的工作，因此我們就看不到這個機制。SD卡和MMC/eMMC就是這樣。

這也是為什麼我們在正式進入SD/MMC/eMMC的主題之前，要先介紹SmartMedia的原因。因為這些機制後面就看不到了。

### **小結**

為了介紹NAND Flash的錯誤校正、檢查機制，這一回我們簡單介紹了NAND Flash儲存媒體的濫觴：SmartMedia記憶卡，並簡單說明了它裡面的錯誤檢查及校正機制。

下一回，我們就會正式開始介紹SD/MMC/eMMC。

（責任編輯：賴佩萱）
