SD卡初始化

初始化工作分为两大步:第一步:进行电压适配工作。第二部:进行相对地址设定工作。

发送指令时可能会有状态转换,尤其是初始化时。

指令分为两类:一类为通用指令,另一类为针对某种卡的特定指令,但特定指令的实际数可以通用指令相同,所以CMD55+特定指令来发送特定指令,

电压适配工作

1、发送CMD0指令(GO_IDLE_STATE) 卡进入idle状态

2、发送指令CMD8(SEND_IF_COND),如果卡设备有response,说明此卡为SD2.0以上

3、发送指令CMD55(SDIO_APP_CMD),若响应为sd2.0/sd1.1,否则为mmc

4、发送指令CMD55+ACMD41,该指令是用来探测卡设备的工作电压是否符合host端的要求

第四步具体代码如下:

while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL))
    {
      SDIO_CmdInitStructure.SDIO_Argument = 0x00;
      SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
      SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
      SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
      SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
      SDIO_SendCommand(&SDIO_CmdInitStructure);

      errorstatus = CmdResp1Error(SDIO_APP_CMD);
      if (errorstatus != SD_OK)
      {
        return(errorstatus);
      }
      SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType;
      SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SD_APP_OP_COND;
      SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
      SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
      SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
      SDIO_SendCommand(&SDIO_CmdInitStructure);

      errorstatus = CmdResp3Error();
      if (errorstatus != SD_OK)
      {
        return(errorstatus);
      }

      response = SDIO_GetResponse(SDIO_RESP1);
      validvoltage = (bool) (((response >> 31) == 1) ? 1 : 0);
      count++;
    }

至此完成电压适配阶段,以上就是俗称的上电部分。

相对地址设定

1、发送CMD2(ALL_SEND_CID),获取CID,状态从Ready状态到Identification 状态

2、发送CMD3(SET_REL_ADDR),卡自动重置相对地址,并将相对地址发送过来;状态从Identification状态到 Stand-by状态,对以后的CMD2和CMD3不回应

完成第二部分。

另外附上以参考博客网址:http://blog.csdn.net/bingqingsuimeng/article/details/7958710

http://blog.163.com/huang_minjian/blog/static/182076549201123155822420/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值