1. 程式人生 > >STM32F4——SD卡相關操作

STM32F4——SD卡相關操作

一、簡介:

    SD卡從MMC基礎發展而來,一種記憶裝置,廣泛用於便攜裝置,SD卡按容量分為:SD卡(0~2G)、SDHC卡(2~32G)和SDXC卡(32G~2T)。對於SD的使用過程中相應引腳和對應模式如下圖所示:

二、相關暫存器:

    對於SD卡相關暫存器如下圖所示:

三、SD卡相關操作及指令:

    1、初始化;

    SD卡的初始化操作是相對比較複雜的,流程圖如下:

【圖片】

    基本操作過程為:

    (1)首先是給卡上電(設定SDIO_POWER[1:0]=11)。

    (2)上電後傳送CMD0命令,對卡進行軟復位。

    (3)因為只有2.0版本以後卡才支援CMD8命令,2.0版本以後的卡和MMC卡不支援該命令,所以可以傳送CMD8命令,做出第一步的判斷。

    (4.1)如果傳送CMD8後有響應,則傳送ACMD41命令,傳送ACMD41命令帶一個引數位HCS=1,表示主機支援SDHC高容量SD卡,如果SD卡為SDHC卡就會做出相應,同時在響應(OCR)的資訊中CCS位為1,如果響應(OCR)中的CCS位為0,表示為SD2.0標準容量卡。

    (4.2)如果傳送CMD8命令沒有相應,則傳送ACMD41命令時引數位HCS=0,則可以用於判斷其他兩種卡型別,如果卡對ACMD41命令有響應則為SD1.X型別的卡,如果沒有響應則為MMC卡。如此一來就可以判斷卡的型別並做出相應的初始化。

    2、單塊資料讀取:

    (1)CMD16命令(用於設定資料塊大小)。(2)等待響應(R1)。(3)CMD17指令(開始讀取單塊資料)。(4)等待響應(R1)。

    3、多塊資料讀取:

    (1)CMD16命令(用於設定資料塊大小)。(2)等待響應(R1)。(3)CMD18指令(開始讀取資料)。(4)等待響應(R1)。(5)依次接收資料。(6)傳送CMD12指令(用於結束傳送)。(7)等待響應(R1)。

    4、單塊寫資料:

    (1)CMD16命令(用於設定資料塊大小)。(2)等待響應(R1)。(3)傳送CMD13指令(用於查詢卡的狀態)。(4)等待READY_FOR_DATA位=1。(5)傳送CMD24指令(開始寫入資料)。

    5、多塊資料寫入:

    (1)CMD16命令(用於設定資料塊大小)。(2)傳送ACMD23指令(用於擦除資料塊)。(3)傳送CMD25指令(開始寫入資料塊)。(4)依次寫入需要寫入的資料。(5)傳送CMD13指令(用於查詢卡的狀態)。(6)等待寫入過程結束。