SD(Secure Digital)與 MMC(Multimedia Card)
SD 是一種 flash memory card 的標準,也就是一般常見的 SD 記憶卡,而 MMC 則是較早的一種記憶卡標準,目前已經被 SD 標準所取代。在維基百科上有相當詳細的 SD/MMC 規格說明:[http://zh.wikipedia.org/wiki/Secure_Digital]。
SDIO(Secure Digital I/O)
SDIO 是目前我們比較關心的技術,SDIO 故名思義,就是 SD 的 I/O 介面(interface)的意思,不過這樣解釋可能還有點抽像。更具體的說明,SD 本來是記憶卡的標準,但是現在也可以把 SD 拿來插上一些週邊介面使用,這樣的技術便是 SDIO。
所以 SDIO 本身是一種相當單純的技術,透過 SD 的 I/O 接腳來連接外部週邊,並且透過 SD 上的 I/O 資料接位與這些週邊傳輸資料,而且 SD 協會會員也推出很完整的 SDIO stack 驅動程式,使得 SDIO 週邊(我們稱為 SDIO 卡)的開發與應用變得相當熱門。
現在已經有非常多的手機或是手持裝置都支援 SDIO 的功能(SD 標準原本就是針對 mobile device 而制定),而且許多 SDIO 週邊也都被開發出來,讓手機外接週邊更加容易,並且開發上更有彈性(不需要內建週邊)。目前常見的 SDIO 週邊(SDIO 卡)有:
SDIO 的應用將是未來嵌入式系統最重要的介面技術之一,並且也會取代目前 GPIO 式的 SPI 介面。
SD/SDIO 的傳輸模式
SD 傳輸模式有以下 3 種:
SDIO 同樣也支援以上 3 種傳輸模式。依據 SD 標準,所有的 SD(記憶卡)與 SDIO(週邊)都必須支援 SPI mode,因此 SPI mode 是「required」。此外,早期的 MMC 卡(使用 SPI 傳輸)也能接到 SD 插糟(SD slot),並且使用 SPI mode 或 1-bit mode 來讀取。
SD 的 MMC Mode
SD 也能讀取 MMC 記憶體,雖然 MMC 標準上提到,MMC 記憶體不見得要支援 SPI mode(但是一定要支援 1-bit mode),但是市面上能看到的 MMC 卡其實都有支援 SPI mode。因此,我們可以把 SD 設定成 SPI mode 的傳輸方式來讀取 MMC 記憶卡。
SD 的 MMC Mode 就是用來讀取 MMC 卡的一種傳輸模式。不過,SD 的 MMC Mode 雖然也是使用 SPI mode,但其物理特性仍是有差異的:
為避免混淆,有時也用 SPI/MMC mode 與 SPI/SD mode 的寫法來做清楚區別。
Linux 的 SD/MMC 驅動程式
Linux 2.6.17 正式加入 SD/MMC 驅動程式,「官方版」的 release 當然只能在 ARM 平臺上使用,若不討論 host controller 的支援,目前的 Linux SD/MMC/SDIO 支援狀況(Core API)如下(Open source compatible for SD/MMC/SDIO):
1. 支援 MMC。Open source 的實作即是 SD-MMC 的驅動程式。
2. Core API 「可以做到」支援 SD/SPI mode only,因為有辦法做到支援 SPI mode,當然 1-bit mode 也「可以想辦法」做出來。將 1-bit mode 擴充至 4-bit mode,網路上雖然有人做,不過會有版權問題。
3. SDIO 目前只看到 Atheros Wi-Fi card 的支援(可在 sourceforge 上找到,已正式釋出 source code)。
4. 完整的 SD stack 是要付錢的,請特別注意,SD Card Association product license agreement 並「不」允許 open source 的驅動程式實作。所以也不用再問,為什麼沒有 open source 的 SD 驅動程式了;Linux 是無罪的!
請特別留意的是,以上所述是「官方」的正式支援,並不包含玩家所分享的各種 patch。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw