1 SD/MMC卡基礎概念
1.1 MMC卡
MMC:MMC就是MultiMediaCard的縮寫,即多媒體卡。它是一種非易失性存儲器件,體積小巧(24mm*32mm*1.4mm),容量大,耗電量低,傳輸速度快,廣泛應用於消費類電子產品中。
1.2 SD卡
SD:SD卡為Secure Digital Memory Card, 即安全數碼卡。它在MMC的基礎上發展而來,增加了兩個主要特色:SD卡強調數據的安全安全,可以設定所儲存的使用權限,防止數據被他人復制;另外一個特色就是傳輸速度比2.11版的MMC卡快。在數據傳輸和物理規范上,SD卡(24mm*32mm*2.1mm,比 MMC卡更厚一點),向前兼容了MMC卡.所有支持SD卡的設備也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。
1.3 SDIO
SDIO:SDIO是在SD標准上定義了一種外設接口,它和SD卡規范間的一個重要區別是增加了低速標准。在SDIO卡只需要SPI和1位SD傳輸模式。低速卡的目標應用是以最小的硬件開銷支持低速IO能力。
1.4 MCI
MCI:MCI是Multimedia Card Interface的簡稱,即多媒體卡接口。上述的MMC,SD,SDI卡定義的接口都屬於MCI接口。MCI這個術語在驅動程序中經常使用,很多文件,函數名字都包括”mci”。
1.5 MMC/SD/SDIO卡的區別
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 卡)有:
Wi-Fi card (無線網絡卡) CMOS sensor card (照相模塊) GPS card GSM/GPRS modem card Bluetooth card Radio/TV card
SDIO 的應用將是未來嵌入式系統最重要的接口技術之一,並且也會取代目前 GPIO 式的 SPI 接口。
1.6 硬件連接圖
以Exynos4412開發板為例,其SD卡硬件原理圖如下:
SD卡設備的連接方式就是SDIO總線的驅動方式,這里使用EINT7作為NCD的控制器,當SD卡設備插入/取出時均會中斷響應。
2 SD協議
2.1 總線接口
按照SD卡的協議的描述可分為2種總線的接口
2.1.1 SD BUS
物理層定義:
D0-D3 數據傳送
CMD 進行CMD 和Respons
CLK 大家最熟悉的HOST時鍾信號線了
VDD VSS 電源和地
2.1.2S PI BUS
一般用SPI協議的接口來做
物理層定義:
CLK HOST: 時鍾信號線 DATAIN HOST-àSD :Card 數據信號線 DATAOUT SD Card :HOST 數據信號線
2.2 請求處理流程
根據協議,MMC/SD卡的驅動被分為:卡識別階段和數據傳輸階段。
在卡識別階段通過命令使MMC/SD處於:空閑(idle)、准備(ready)、識別(ident)、等待(stby)、不活動(ina)幾種不同的狀態;而在數據傳輸階段通過命令使MMC/SD處於:發送(data)、傳輸(tran)、接收(rcv)、程序(prg)、斷開連接(dis)幾種不同的狀態。所以可以總結MMC/SD在工作的整個過程中分為兩個階段和十種狀態。下面使用圖形來描述一下在兩個階段中這十種狀態之間的轉換關系。
2.2.1 卡識別階段
2.2.2 數據傳輸階段
3 MMC/SD設備驅動在Linux中的結構層次
在Linux中MMC/SD卡的記憶體都當作塊設備。MMC/SD設備驅動代碼在drivers\mmc 分別有card、core和host三個文件夾,
card層:要把操作的數據以塊設備的處理方式寫到記憶體上或從記憶體上讀取;
core層:則是將數據以何種格式,何種方式在 MMC/SD主機控制器與MMC/SD卡的記 憶體(即塊設備)之間進行傳遞,這種格式、方式被稱之為規范或協議,
host層:就是你要動手實現的具體MMC/SD設備驅動了,包括RAM芯片中的 SDI控制器(支持對MMC/SD卡的控制,俗稱MMC/SD主機控制器)和SDI控制器與MMC/SD卡的硬件接口電路。
card、core和host這三層的關系,如下圖所示:
整個MMC/SD模塊中最重要的部分是Core核心層,它提供了一系列的接口函數,對上提供了將主機驅動注冊到系統,給應用程序提供設備訪問接口,對下提供了對主機控制器控制的方法及塊設備請求的支持。對於主機控制器的操作就是對相關寄存器進行讀寫,而對於MMC/SD設備的請求處理則比較復雜。