1. 程式人生 > >SD命令與響應(一)

SD命令與響應(一)

1,SDIO命令分為ACMD和CMD,ACMD傳送前,必須先發送CMD55.SDIO的命令和響應都是通過SDIO_CMD傳輸的。

任何命令都是固定的48位。命令格式如下:


    所有命令都是由主機(我用的CPU是STM32F407ZET6)發出,其中起始位,傳輸位,結束位,CRC7都是由SDIO硬體控制,我們設定的是命令索引和引數部分。命令索引在SDIO_CMD暫存器設定,引數在SDIO_ARG裡設定。


2,一般情況下,SD卡接收到命令之後,都會回覆一個應答,這個應答稱之為響應,響應也是在CMD線上序列傳輸的。響應又分為長響應和短響應。響應格式如下:



  



 3,其中STM32F407CMD暫存器如下



其程式碼如下:

//SDIO·傳送命令函式

//cmdindex:命令索引
//waitrsp:期待的響應

//arg:引數

void SDIO_Send_Cmd(u8 cmdindex,u8 waitrsp,u32 arg)
{
         u32 tmpreg;
SDIO->ARG=arg;
tmpreg=SDIO->CMD; 
tmpreg&=0XFFFFF800;
//清除cmdindex和waitrsp
tmpreg|=cmdindex&0X3F; //設定新的cmdindex  
tmpreg|=waitrsp<<6; //設定新的waitrsp
tmpreg|=0<<8; //無等待
        tmpreg|=1<<10; //使能命令通道狀態機
SDIO->CMD=tmpreg;
}

4,初始化流程圖如下