標籤:style blog http color io for ar 資料 問題
1.SD卡的命令格式:
SD卡的指令由6位元組(Byte)組成,如下:
Byte1:0 1 x x x x x x(命令號,由指令標誌定義,如CMD39為100111即16進位0x27,那麼完整的CMD39第一位元組為01100111,即0x27+0x40) Byte2-5:Command Arguments,命令參數,有些命令沒有參數 Byte6:前7位為CRC(Cyclic Redundacy Check,迴圈冗餘校正)校正位,最後一位為停止位0
2.SD卡的命令
SD卡命令共分為12類,分別為class0到class11,
不同的SDd卡,主控根據其功能,支援不同的命令集 如下:
Class0 :(卡的識別、初始化等基本命令集)
CMD0:複位SD 記憶卡.
CMD1:讀OCR寄存器.
CMD9:讀CSD寄存器.
CMD10:讀CID寄存器.
CMD12:停止讀多塊時的資料轉送
CMD13:讀 Card_Status 寄存器
Class2 (讀卡命令集):
CMD16:設定塊的長度
CMD17:讀單塊.
CMD18:讀多塊,直至主機發送CMD12為止 .
Class4(寫卡命令集) :
CMD24:寫單塊.
CMD25:寫多塊.
CMD27:寫CSD寄存器 .
Class5 (擦除卡命令集):
CMD32:設定擦除塊的起始地址.
CMD33:設定擦除塊的終止地址.
CMD38: 擦除所選擇的塊.
Class6(防寫保護命令集):
CMD28:設定防寫保護塊的地址.
CMD29:擦除防寫保護塊的地址.
CMD30: Ask the card for the status of the write protection bits
class7:卡的鎖定,解鎖功能命令集
class8:申請特定命令集 。
class10 -11 :保留
其中 class1, class3,class9:SPI模式不支援
瞭解了指令的形式和具體的控制內容,下面主要解決的就是MCU與SD卡的通訊問題,通訊主要需要注意下面的問題:
(1)供電電壓:必須是3.3V
(2) 通訊模式的切換:SD卡有兩種通訊模式:SPI模式和SD模式,預設情況下的通訊模式是SD模式,但是我們常用的模式是SPI模式,這就需要一個切換模式的方法,具體的實現方法在其他地方也都有介紹,其關鍵的地方就是先上電延時大於74個刻度後發送複位命令,複位成功(接收到0x01的響應)後,連續發送CMD55和ACMD41,直到響應0X00為止,此時SD卡已經進入SPI模式。
(3)上面所說的發送複位命令(CMD0)以及CMD55和ACMD41要有具體的實現方法,需要解決的就是時序問題,
就為複位的時序圖,只要能夠按照的時序進行操作,肯定能夠複位成功.
本複位分為(1)上電,(2)延時74個周期以上,(3)發送命令CMD0,(4)發送命令參數0X0000,(5)發送CRC校正0X95,(6)等待響應(7)響應0X01此時得到正確響應複位成功,否則重複以上操作直到成功為止。
介紹複位的同時其他的命令也和複位命令類似,只是根據命令的作用不同有著不同的響應類型和不同的後續操作,下面給出集中常用命令的時序圖。
(1)讀CID寄存器時序圖
說明:當發送命令並得到響應0X00後就開始準備接收CID寄存器中的內容,此時只要接收到起始標誌0XFE後,之後的16個位元組的內容即為CID寄存器的內容。
(2)讀CSD寄存器內容時序和讀CID的類似,只是此時發送的命令為CMD9
SD卡資料的讀寫是以塊為單位:預設情況下一塊的大小為512位元組
(3) 讀SD卡一個塊(512位元組)時序
(4) 寫一個塊(512位元組)時序圖
來自:http://hi.baidu.com/fingi/blog/item/1b459d08f9c72c38e8248817.html
SD卡的控制方法(指令集和控制時序)