SD卡的控制方法(指令集和控制時序)


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要有具體的實現方法,需要解決的就是時序問題

下圖就為復位的時序圖,只要能夠按照下圖的時序進行操作,肯定能夠復位成功.

 

 

  

SD卡的控制方法(指令集和控制時序) - 我心永恆 - ARM-新的夢想

本復位分為(1)上電,(2)延時74個周期以上,(3)發送命令CMD0,(4)發送命令參數0X0000,(5)發送CRC校驗0X95,(6)等待響應(7)響應0X01此時得到正確響應復位成功,否則重復以上操作直到成功為止。

介紹復位的同時其他的命令也和復位命令類似,只是根據命令的作用不同有着不同的響應類型和不同的后續操作,下面給出集中常用命令的時序圖。

(1)讀CID寄存器時序圖

 

SD卡的控制方法(指令集和控制時序) - 我心永恆 - ARM-新的夢想

 

說明:當發送命令並得到響應0X00后就開始准備接收CID寄存器中的內容,此時只要接收到起始標志0XFE后,之后的16個字節的內容即為CID寄存器的內容。

(2)讀CSD寄存器內容時序和讀CID的類似,只是此時發送的命令為CMD9

SD卡數據的讀寫是以塊為單位:默認情況下一塊的大小為512字節

(3) 讀SD卡一個塊(512字節)時序

 

SD卡的控制方法(指令集和控制時序) - 我心永恆 - ARM-新的夢想

(4) 寫一個塊(512字節)時序圖

 

SD卡的控制方法(指令集和控制時序) - 我心永恆 - ARM-新的夢想
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM