SD命令與響應(一)
阿新 • • 發佈:2018-11-16
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;
tmpreg|=cmdindex&0X3F; //設定新的cmdindex
tmpreg|=waitrsp<<6; //設定新的waitrsp
tmpreg|=0<<8; //無等待
tmpreg|=1<<10; //使能命令通道狀態機
SDIO->CMD=tmpreg;
}
4,初始化流程圖如下