內(nèi)核版本:3.10.1
MMC
MMC全稱MultiMedia Card,由西門子公司和SanDisk公司1997年推出的多媒體記憶卡標(biāo)準(zhǔn),。MMC卡尺寸為32mm x24mm x 1.4mm,,它將存貯單元和控制器一同做到了卡上,智能的控制器使得MMC保證兼容性和靈活性,。
MMC卡具有MMC和SPI兩種工作模式,,MMC模式是默認(rèn)工作模式,具有MMC的全部特性,。而SPI模式則是MMC協(xié)議的一個(gè)子集,,主要用于低速系統(tǒng)。
SD
SD卡全稱Secure DigitalMemory Card,,由松下,、東芝和SanDisk公司于1999年8月共同開發(fā)的新一代記憶卡標(biāo)準(zhǔn),,已完全兼容MMC標(biāo)準(zhǔn)。SD卡比MMC卡多了一個(gè)進(jìn)行數(shù)據(jù)著作權(quán)保護(hù)的暗號(hào)認(rèn)證功能,,讀寫速度比MMC卡快4倍,。
SD卡尺寸為32mm x 24mm x2.1mm,長(zhǎng)寬和MMC卡一樣,,只是比MMC卡厚了0.7mm,,以容納更大容量的存貯單元。SD卡與MMC卡保持向上兼容,,也就是說,,MMC卡可以被新的設(shè)有SD卡插槽的設(shè)備存取,但是SD卡卻不可以被設(shè)有MMC插槽的設(shè)備存取,。
SDIO
SDIO全稱Secure DigitalInput and Output Card,,SDIO是在SD標(biāo)準(zhǔn)上定義了一種外設(shè)接口,它使用SD的I/O接口來連接外圍設(shè)備,,并通過SD上的I/O數(shù)據(jù)接口與這些外圍設(shè)備傳輸數(shù)據(jù)?,F(xiàn) 在已經(jīng)有很多手持設(shè)備支持SDIO功能,而且許多SDIO外設(shè)也被開發(fā)出來,,目前常見的SDIO外設(shè)有:WIFI Card,、GPS Card、 Bluetooth Card等等,。
eMMC
eMMC全稱Embedded MultiMediaCard,,是MMC協(xié)會(huì)所制定的內(nèi)嵌式存儲(chǔ)器標(biāo)準(zhǔn)規(guī)格,主要應(yīng)用于智能手機(jī)和移動(dòng)嵌入式產(chǎn)品等,。eMMC是一種嵌入式非易失性存儲(chǔ)系 統(tǒng),,由閃存和閃存控制器兩部分組成,它的一個(gè)明顯優(yōu)勢(shì)是在封裝中集成了一個(gè)閃存控制器,,它采用JEDEC標(biāo)準(zhǔn)BGA封裝,,并采用統(tǒng)一閃存接口管理閃存。
eMMC結(jié)構(gòu)由一個(gè)嵌入式存儲(chǔ)解決方案組成,,帶有MMC接口,、快閃存儲(chǔ)設(shè)備及主控制器,所有這些由一個(gè)小型BGA封裝,。由于采用標(biāo)準(zhǔn)封裝,,eMMC也很容易升級(jí),并不用改變硬件結(jié)構(gòu),。
eMMC的這種將Nand Flash芯片和控制芯片封裝在一起的設(shè)計(jì)概念,,就是為了簡(jiǎn)化產(chǎn)品內(nèi)存儲(chǔ)器的使用,客戶只需要采購(gòu)eMMC芯片放進(jìn)產(chǎn)品中,,不需要處理其它復(fù)雜的Nand Flash兼容性和管理問題,,減少研發(fā)成本和研發(fā)周期,。
下面我們以Mini2440為例,分析其SDI驅(qū)動(dòng)程序,。
Mini2440 MMC/SD硬件接口電路原理圖如下:
從Mini2440原理圖可以看出,,Mini2440 SDI使用的GPE7-GPE10作為4根數(shù)據(jù)信號(hào)線,使用GPE6作為命令信號(hào)線,,使用GPE5作為時(shí)鐘信號(hào)線。另外,,使用GPG8的外部中斷功能來作SD卡的插撥檢測(cè),,使用GPH8來判斷SD卡是否有寫保護(hù)。
一,、SDI設(shè)備的注冊(cè)
先來看device注冊(cè)過程,,在arch/arm/mach-s3c24xx/mach-mini2440.c文件中,有如下內(nèi)容:
這里定義了Mini2440所有的platform device,,這里,,我們要關(guān)注的是s3c_device_sdi,它是Mini2440的SDI控制器,。
s3c_device_sdi定義在arch/arm/plat-samsung/devs.c文件中:
回憶一下platform_device定義在include/linux/platform_device.h文件中:
其中,,s3c_sdi_resource定義在arch/arm/plat-samsung/devs.c文件中:
struct resource定義在include/linux/ioport.h文件中: