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