野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15635|回复: 3

SDIO操作内存卡问题。卡在了获取RCA的步骤。

[复制链接]
发表于 2015-12-4 20:55:12 | 显示全部楼层 |阅读模式
上电成功之后,发送CMD2和CMD3。在全速运行的时候,没有返回错误,但是获得的RCA是0,这显然是不对的。在进行硬件调试的时候,返回了命令响应超时的错误。贴上代码:errorstatus=GetCard_RCA(&CardRCA);
                /*if(errorstatus==SD_OK)
                {
                        break;
                }
        }
        if(errorstatus!=SD_OK)
        {
                printf("\r\n错误代码%d\r\n",errorstatus);
                return 0;
        }
       
        printf("\r\n成功,卡的RCA为%d\r\n",CardRCA);


这段是处理代码。下面的是GetCard_RCA()
SD_error GetCard_RCA(uint32_t* CardRCA)
{
        SDIO_CmdInitTypeDef  CmdStructure;
       
        SD_error errorstatus=SD_OK;
       
       
        CmdStructure.SDIO_Argument=0x0;   //ÎTÄúèY
        CmdStructure.SDIO_CmdIndex=2;
        CmdStructure.SDIO_Response=SDIO_Response_Long;  //  r2
        CmdStructure.SDIO_Wait=SDIO_Wait_No;         
        CmdStructure.SDIO_CPSM=SDIO_CPSM_Enable;
       
        errorstatus=SDIO_error();
       
        if(errorstatus!=SD_OK)
        {
                return errorstatus;
        }
       
       
       
        CmdStructure.SDIO_Argument=0x0;   
        CmdStructure.SDIO_CmdIndex=3;
        CmdStructure.SDIO_Response=SDIO_Response_Short;  //  r6
        CmdStructure.SDIO_Wait=SDIO_Wait_No;         
        CmdStructure.SDIO_CPSM=SDIO_CPSM_Enable;

       SDIO_SendCommand(&CmdStructure);
       
        errorstatus=SD_ans_error(CardRCA); //调试是返回的errorstatus是超时,全速时返回的是正常。
       
        if(errorstatus!=SD_OK)
        {
                return errorstatus;
        }
       
        *CardRCA=*CardRCA>>16;
       
        return errorstatus;

SDIO_error的作用是获取命令发送后的状态,SD_ans_error是在SDIO的基础上增加了对卡的回复状态进行判断,如果卡的状态正常,就把回复内容放在*CardRCA里。
问题1;为什么会出现调试和全速运行的结果不一样?我代码设置的是轮询判断的方式,所以应该不会出现延时不够的问题。
问题2;我该相信调试结果还是全速时的结果?全速虽然不报错,但是获得RCA为0,显然是有问题的。
代码肯定是错了,我对比了官方例程中,没有发现问题在哪。还请给位高手给小弟指点一二。
回复

使用道具 举报

 楼主| 发表于 2015-12-4 21:08:52 | 显示全部楼层
自己顶一下
回复 支持 反对

使用道具 举报

发表于 2015-12-5 08:42:58 | 显示全部楼层
全速运行正常那就可以,调试模式有时就是这样会有不可知的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-6 17:12:41 | 显示全部楼层
flyleaf 发表于 2015-12-5 08:42
全速运行正常那就可以,调试模式有时就是这样会有不可知的问题

关键是全速的时候获取的RCA是错误的  是有问题的啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:51 , Processed in 0.059554 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表