1,SDIO命令分为ACMD和CMD,ACMD发送前,必须先发送CMD55.SDIO的命令和响应都是通过SDIO_CMD传输的。
任何命令都是固定的48位。命令格式如下:
所有命令都是由主机(我用的CPU是STM32F407ZET6)发出,其中起始位,传输位,结束位,CRC7都是由SDIO硬件控制,我们设置的是命令索引和参数部分。命令索引在SDIO_CMD寄存器设置,参数在SDIO_ARG里设置。
2,一般情况下,SD卡接收到命令之后,都会回复一个应答,这个应答称之为响应,响应也是在CMD线上串行传输的。响应又分为长响应和短响应。响应格式如下:
扫描二维码关注公众号,回复:
4096024 查看本文章
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,初始化流程图如下