SPI模式下MMC卡的讀寫(xiě)機(jī)制
?多媒體卡MMC(MultiMedia Card)是由美國(guó)SanDisk公司和德國(guó)Simens公司于1997年共同開(kāi)發(fā)的一種多功能Flash存儲(chǔ)設(shè)備?;?a target="_blank">ARM7芯片LPC2200實(shí)現(xiàn)對(duì)MMC卡的讀寫(xiě)。使用LPC2200的串行外設(shè)接口(SPI接口)對(duì)MMC卡進(jìn)行控制,在SPI模式下對(duì)MMC卡進(jìn)行數(shù)據(jù)的讀寫(xiě)。
關(guān)鍵詞 MMC卡 LPC2200 接口設(shè)計(jì) SPI接口
引言
多媒體卡MMC的特點(diǎn)是閃存功耗低,密度高,體積小,可靠性高,可擦除,可重寫(xiě),容量大;內(nèi)置控制電路,可以使用在手機(jī)、數(shù)碼相機(jī)、MP3、PDA等多種數(shù)字設(shè)備上,可反復(fù)記錄30萬(wàn)次;現(xiàn)在市場(chǎng)上的主流容量有128 MB~2 GB。
SPI最早是由Motorola公司提出的一種串行總線接口,支持MCU與外設(shè)的雙工、同步串行通信。由于其簡(jiǎn)單的接口設(shè)計(jì),只用4根線即可完成所有的通信工作,因此被大部分的MCU芯片所支持。利用被廣泛支持的SPI總線來(lái)進(jìn)行MMC卡的讀寫(xiě),可解決沒(méi)有MMC控制器的問(wèn)題。
1? MMC卡
1.1? MMC卡簡(jiǎn)介
MMC卡的面積為24 mm×32 mm,厚度為1.4 mm。MMC卡的工作電壓為2.7~3.6 V,時(shí)鐘頻率范圍為0~20 MHz。為了支持廣泛的應(yīng)用,MMC卡接口簡(jiǎn)單(為7引腳),具有最大的可擴(kuò)展性和可配置性。其中3腳為電源供應(yīng),數(shù)據(jù)操作通過(guò)4腳的串行總線完成。作為SPI設(shè)備,MMC卡的SPI通道由以下4個(gè)信號(hào)組成:CS(片選),CLK(時(shí)鐘),DateIn(主機(jī)到卡的數(shù)據(jù)信號(hào))和DateOut(卡到主機(jī)的數(shù)據(jù)信號(hào))。CS是MMC卡的片選信號(hào)線,在整個(gè)SPI操作過(guò)程中,必須保持低電平有效;CLK便于同步;DateIn不但傳輸數(shù)據(jù),還發(fā)送命令;DateOut除了發(fā)送數(shù)據(jù)外,還傳送應(yīng)答信號(hào)。
1.2? MMC卡的SPI協(xié)議
MMC存儲(chǔ)卡有MMC和SPI兩種工作模式。MMC卡上電后即進(jìn)入MMC模式;當(dāng)片選(CS)線被拉低時(shí)發(fā)送Reset(CMD0)指令會(huì)使MMC卡進(jìn)入SPI模式。如果需要從SPI模式轉(zhuǎn)入MMC模式,只能切斷電源重新上電。
SPI協(xié)議是以主從方式工作的,這種模式通常有一個(gè)主設(shè)備和一個(gè)(或多個(gè))從設(shè)備。SPI接口是一種通用同步串行接口總線,字長(zhǎng)為8位,用來(lái)與外部設(shè)備進(jìn)行通信。該接口在工作時(shí),主設(shè)備通過(guò)提供移位時(shí)鐘和從使能信號(hào)來(lái)控制信息的流動(dòng)。主設(shè)備的每次開(kāi)始傳送任務(wù)時(shí),都先將片選(CS)線置低以激活MMC卡,使其進(jìn)入工作狀態(tài)。
MMC卡的SPI協(xié)議的特點(diǎn)主要有: 被選中的卡總是對(duì)來(lái)自于主設(shè)備的指令有所響應(yīng)的;當(dāng)卡遇到錯(cuò)誤時(shí),會(huì)返回一個(gè)出錯(cuò)響應(yīng)來(lái)代替期望的數(shù)據(jù);指令的響應(yīng)是一個(gè)8位或16位的結(jié)構(gòu);只支持單塊讀寫(xiě)操作。塊的大小可以大到一個(gè)扇區(qū)(512字節(jié)),小到1個(gè)字節(jié)。
MMC卡既可以采用MMC總線訪問(wèn),也可以采用SPI總線訪問(wèn)。大部分微處理器都有SPI接口而沒(méi)有MMC總線接口。如果采用I/O口模擬MMC總線,不但增加了軟件的開(kāi)銷(xiāo),而且對(duì)大多數(shù)微處理器來(lái)說(shuō),模擬MMC總線遠(yuǎn)不如真正的MMC總線速度快,這將大大降低總線數(shù)據(jù)傳輸?shù)乃俣取?/P>
基于以上考慮,可以采用LPC2200微處理器的SPI接口,設(shè)計(jì)訪問(wèn)MMC的硬件接口電路。LPC2200是系統(tǒng)的核心控制器,它的主要作用是將數(shù)據(jù)發(fā)送至MMC卡內(nèi)存儲(chǔ)。MMC卡的數(shù)據(jù)寫(xiě)入是以塊為單位的,一塊為512字節(jié),所以當(dāng)RAM中存放了512字節(jié)數(shù)據(jù)時(shí),LPC2200便將其一次性寫(xiě)入MMC卡中。
LPC2200微處理器與MMC卡卡座接口電路如圖1所示,連接引腳如表1所列。
3? SPI模式下MMC卡的讀寫(xiě)實(shí)現(xiàn)
3.1? MMC卡初始化
在對(duì)MMC卡讀寫(xiě)之前要進(jìn)行初始化操作,這是確保MMC卡能在SPI模式下進(jìn)行正常數(shù)據(jù)讀寫(xiě)的前提。MMC卡上電后默認(rèn)進(jìn)入MMC模式,等待至少74個(gè)時(shí)鐘周期后,片選信號(hào)置低,發(fā)送CMD0。CMD0的命令索引位是000000,即發(fā)送命令字0x40、0x0、0x0、0x0、0x0、0x95。如果收到應(yīng)答信號(hào)01H,則表示出錯(cuò)。然后向MMC卡發(fā)送CMD1,CMD1命令索引位是000001。因?yàn)檫M(jìn)入閑置狀態(tài)后CRC校驗(yàn)?zāi)J(rèn)關(guān)閉,故CRC校驗(yàn)位可取任意值。收到正確的應(yīng)答信號(hào)00H之后,MMC卡即進(jìn)入SPI模式;如果收到應(yīng)答信號(hào)不是00H,則重發(fā)CMD1直到收到正確的應(yīng)答。初始化過(guò)程如圖2所示。
3.2? MMC卡塊讀寫(xiě)
初始化完成后,可使用默認(rèn)的讀寫(xiě)長(zhǎng)度(512字節(jié))進(jìn)行MMC卡的讀寫(xiě);也可用CMD16來(lái)設(shè)置MMC卡的塊讀取長(zhǎng)度,可以是1~512字節(jié)之間的任意值。但是對(duì)MMC卡的寫(xiě)過(guò)程則要求塊長(zhǎng)度必須為512字節(jié)。MMC卡讀寫(xiě)數(shù)據(jù)時(shí)使用的是絕對(duì)地址,即從0開(kāi)始編號(hào)的32位地址,這里使用塊號(hào)來(lái)進(jìn)行讀寫(xiě)。塊號(hào)是從0開(kāi)始編號(hào)的,且每塊的大小為一扇區(qū)(即512字節(jié)),故開(kāi)始都必須將扇區(qū)號(hào)轉(zhuǎn)換成絕對(duì)地址。
(1) ?讀取數(shù)據(jù)塊向MMC卡發(fā)送CMD17,收到有效應(yīng)答信號(hào)0x00后,開(kāi)始接收數(shù)據(jù)。數(shù)據(jù)由數(shù)據(jù)起始令牌和數(shù)據(jù)塊組成,其中起始令牌值為0xFE。當(dāng)收起起始令牌后,隨后接收數(shù)據(jù)塊。讀操作如圖3所示。
(2) ?寫(xiě)入數(shù)據(jù)塊向MMC卡發(fā)送CMD24,收到有效應(yīng)答信號(hào)0x00后,開(kāi)始發(fā)送數(shù)據(jù)。數(shù)據(jù)同樣由數(shù)據(jù)起始令牌(0xFE)和數(shù)據(jù)塊組成。寫(xiě)操作如圖4所示。
4? 小結(jié)
SPI總線接口簡(jiǎn)單易用、兼容性好,使用SPI接口實(shí)現(xiàn)對(duì)MMC卡的讀寫(xiě)操作是非常簡(jiǎn)單有效的。用SPI接口可以實(shí)現(xiàn)每秒約1 MB的讀寫(xiě)速度,而用MMC接口則可以達(dá)到每秒約3 MB的讀寫(xiě)速度。雖然讀寫(xiě)速度降低了一些,但是已經(jīng)可以基本滿足讀寫(xiě)速度的要求。
評(píng)論