SPI模式下MMC卡的讀寫機制
3 SPI模式下MMC卡的讀寫實現(xiàn)
3.1 MMC卡初始化
在對MMC卡讀寫之前要進行初始化操作,這是確保MMC卡能在SPI模式下進行正常數(shù)據(jù)讀寫的前提,MMC卡上電后默認進入MMC模式,等待至少74個時鐘周期后,片選信號置低,發(fā)送CMD0,CMD0的命令索引位是000000,即發(fā)送命令字0x40、0x0、0x0、0x0、0x0、0x95。如果收到應(yīng)答信號01H,則表示出錯。然后向MMC卡發(fā)送CMD1,CMD1命令索引位是000001。因此進入閑置狀態(tài)后CRC校驗?zāi)J關(guān)閉,故CRC校驗位可取任意值。受到正確的應(yīng)答信號00H之后,MMC卡即進入SPI模式;如果收到應(yīng)答信號不是00H,則重發(fā)CMD1直到收到正確的應(yīng)答。初始化過程如圖2所示。
3.2 MMC卡塊讀寫
初始化完成后,可使用默認的讀寫長度(512字節(jié))進行MMC卡的讀寫;也可用CMD16來設(shè)置MMC卡的塊讀取長度,可以是1-512字節(jié)之間的任意值。但是對MMC卡的寫過程則要求塊長度必須為512字節(jié)。MMC卡讀寫數(shù)據(jù)時使用的是絕對地址,即從0開始編號的32位地址,這里使用塊號來進行讀寫,塊號是從0開始編號的,且每塊的大小為一扇區(qū)(即512字節(jié)),故開始都必須將扇區(qū)號轉(zhuǎn)換成絕對地址。
(1)讀取數(shù)據(jù)塊
向MMC卡發(fā)送CMD17,收到有效應(yīng)答信號0x00后,開始接收數(shù)據(jù),數(shù)據(jù)由數(shù)據(jù)起始令牌和數(shù)據(jù)塊組成,其中起始令牌值為0xFE。當(dāng)收起起始令牌后,隨后接收數(shù)據(jù)塊,讀操作如圖3所示。
(2)寫入數(shù)據(jù)塊
向MMC卡發(fā)送CMD24,收到有效應(yīng)答信號0x00后,開始發(fā)送數(shù)據(jù)。數(shù)據(jù)同樣由數(shù)據(jù)起始令牌(0xFE)和數(shù)據(jù)塊組成。寫操作如圖4所示。
4 小結(jié)
SPI總線接口簡單易用、兼容性好,使用SPI接口實現(xiàn)對MMC卡的讀寫操作是非常簡單有效的。用SPI接口可以實現(xiàn)每秒約1MB的讀寫速度,而用MMC接口則可以達到每秒約3MB的讀寫速度。雖然讀寫速度降低了一些,但是已經(jīng)可以基本滿足讀寫速度的要求。
評論