Linux SD卡驅動開發(一) —— SD 相關基礎概念

zqixiao_09發表於2016-04-01

一.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 介面。


二、開發板SD資源

        以Exynos4412開發板為例,其SD卡硬體原理圖如下:


      圖中可以看到,SD卡裝置的連線方式就是SDIO匯流排的驅動方式,這裡使用EINT7作為NCD的控制器,當SD卡裝置插入/取出時均會中斷響應。


三、 SD協議概要

1、 匯流排介面  

按照SD卡的協議的描述可分為2種匯流排的介面 

SD BUS   

物理層定義:  

D0-D3 資料傳送  

CMD 進行CMD 和Respons   

CLK 大家最熟悉的HOST時鐘訊號線了 

VDD VSS 電源和地   


SPI BUS 

一般用SPI協議的介面來做 

物理層定義:  

CLK HOST時鐘訊號線了  

DATAIN HOST-àSD Card資料訊號線 

DATAOUT SD Card àHOST資料訊號線


2、請求處理流程

     根據協議,MMC/SD卡的驅動被分為:卡識別階段資料傳輸階段

    在卡識別階段通過命令使MMC/SD處於:空閒(idle)、準備(ready)、識別(ident)、等待(stby)、不活動(ina)幾種不同的狀態;

    而在資料傳輸階段通過命令使MMC/SD處於:傳送(data)、傳輸(tran)、接收(rcv)、程式(prg)、斷開連線(dis)幾種不同的狀態。

所以可以總結MMC/SD在工作的整個過程中分為兩個階段和十種狀態。下面使用圖形來描述一下在兩個階段中這十種狀態之間的轉換關係。

a -- 卡識別階段


b -- 資料傳輸階段




四、 MMC/SD裝置驅動在Linux中的結構層次  

 在Linux中MMC/SD卡的記憶體都當作塊裝置。MMC/SD裝置驅動程式碼在linux-2.6.38.2\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裝置的請求處理則比較複雜。



相關文章