你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么无法初始化SD卡?用的都是库文件,为什么?为什么?

[复制链接]
yygy3748 提问时间:2017-3-22 16:42 /
阅读主题, 点击返回1楼
收藏 1 评论27 发布时间:2017-3-22 16:42
27个回答
回答时间:2017-3-23 16:15:03
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type!=SD_TYPE_V2HC)
    {
        sector = sector<<9;
    }
yygy3748 回答时间:2017-3-23 16:40:33
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type ...

这是初始化中的代码吗?
yygy3748 回答时间:2017-3-23 16:42:59
安 发表于 2017-3-23 16:15
有这么一段代码,楼主你看一下:
//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type ...

能上传一下你的代码给我看一下吗?
原子的代码就有  if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;  
回答时间:2017-3-23 16:59:30
楼主,你仿真进入这里,看一下CardType的值是多少。
yygy3748 回答时间:2017-3-23 17:01:07
安 发表于 2017-3-23 16:59
楼主,你仿真进入这里,看一下CardType的值是多少。

值为  SDIO_STD_CAPACITY_SD_CARD_V2_0
回答时间:2017-3-23 17:03:12
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;  这里改成SDIO_STD_CAPACITY_SD_CARD_V2_0再试一下,好久了,大概是1.0的才用地址左移。2.0的不用。你看一下SD卡的地址操作说明。
yygy3748 回答时间:2017-3-23 17:04:22
嗯,好的
yygy3748 回答时间:2017-3-23 17:06:38
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;这个是在读写里面的了

现在是发送ACMD41命令就出问题了
yygy3748 回答时间:2017-3-23 17:12:25
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

执行到下面的代码即返回


        if(errorstatus==SD_OK)//SD2.0/SD 1.1,否则为MMC卡
        {                                                                                                                                  
                //SD卡,发送ACMD41 SD_APP_OP_COND,参数为:0x80100000
                while((!validvoltage)&&(count<SD_MAX_VOLT_TRIAL))
                {                                                                                             
                  SDIO_CmdInitStructure.SDIO_Argument = 0x00;//发送CMD55,短响应
                  SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;          //CMD55
                  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);                        //发送CMD55,短响应         

                        errorstatus=CmdResp1Error(SD_CMD_APP_CMD);                  //等待R1响应  
                       
                        if(errorstatus!=SD_OK)
                                return errorstatus;           //响应错误

                  //acmd41,命令参数由支持的电压范围及HCS位组成,HCS位置一来区分卡是SDSc还是sdhc
                  SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SD_HIGH_CAPACITY | SDType;        //发送ACMD41,短响应       
                  SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND;
                  SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;  //r3
                  SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
                  SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
                  SDIO_SendCommand(&SDIO_CmdInitStructure);

                        errorstatus=CmdResp3Error();                                         //等待R3响应   
                       
                        if(errorstatus!=SD_OK)
                                return errorstatus;           //响应错误
                        response=SDIO->RESP1;;                                                           //得到响应
                        validvoltage=(((response>>31)==1)?1:0);                        //判断SD卡上电是否完成
                        count++;
                }


yygy3748 回答时间:2017-3-23 17:15:50
安 发表于 2017-3-23 17:03
你把if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector

到了确认卡是否是HC卡及上电是否完成时,出错,发送CMD55->发送ACMD41,如此循环八九点后,最终在响应CMD55命令时出错,Resp1返回 SD_CMD_CRC_FAIL

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版