OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2766|回复: 0

mini版子程序,sd(4G)卡初始化正常丹无法读出容量

[复制链接]

2

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2016-10-5
在线时间
48 小时
发表于 2016-10-6 19:17:05 | 显示全部楼层 |阅读模式
1金钱
我用的是4G内存卡,初始化后读的容量为0,发现在发送CMD9命令后,r1返回值为127
这是初始化程序
u8 SD_Initialize(void)
{
    u8 r1;      // ′æ·ÅSD¿¨μÄ·μ»ØÖμ
    u16 retry;  // óÃà′½øDD3¬ê±¼Æêy
    u8 buf[4];  
        u16 i;

        SD_SPI_Init();                //3õê¼»ˉIO
        SD_SPI_SpeedLow();        //éèÖÃμ½μíËùÄ£ê½
        for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//·¢&#203;í×&#238;éù74&#184;&#246;&#194;&#246;3&#229;
        retry=20;
        do
        {
                r1=SD_SendCmd(CMD0,0,0x95);//&#189;&#248;è&#235;IDLE×′ì&#172;
        }while((r1!=0X01) && retry--);
        SD_Type=0;//&#196;&#172;è&#207;&#206;T&#191;¨
        if(r1==0X01)
        {
                if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0
                {
                        for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);        //Get trailing return value of R7 resp
                        if(buf[2]==0X01&&buf[3]==0XAA)//&#191;¨ê&#199;·&#241;&#214;§3&#214;2.7~3.6V
                        {
                                retry=0XFFFE;
                                do
                                {
                                        SD_SendCmd(CMD55,0,0X01);        //·¢&#203;íCMD55
                                        r1=SD_SendCmd(CMD41,0x40000000,0X01);//·¢&#203;íCMD41
                                }while(r1&&retry--);
                                if(retry&&SD_SendCmd(CMD58,0,0X01)==0)//&#188;&#248;±eSD2.0&#191;¨°&#230;±&#190;&#191;aê&#188;
                                {
                                        for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);//μ&#195;μ&#189;OCR&#214;μ
                                        if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC;    //&#188;ì2éCCS
                                        else SD_Type=SD_TYPE_V2;   
                                }
                        }
                }else//SD V1.x/ MMC        V3
                {
                        SD_SendCmd(CMD55,0,0X01);                //·¢&#203;íCMD55
                        r1=SD_SendCmd(CMD41,0,0X01);        //·¢&#203;íCMD41
                        if(r1<=1)
                        {               
                                SD_Type=SD_TYPE_V1;
                                retry=0XFFFE;
                                do //μè′yí&#203;3&#246;IDLE&#196;£ê&#189;
                                {
                                        SD_SendCmd(CMD55,0,0X01);        //·¢&#203;íCMD55
                                        r1=SD_SendCmd(CMD41,0,0X01);//·¢&#203;íCMD41
                                }while(r1&&retry--);
                        }else//MMC&#191;¨2&#187;&#214;§3&#214;CMD55+CMD41ê&#182;±e
                        {
                                SD_Type=SD_TYPE_MMC;//MMC V3
                                retry=0XFFFE;
                                do //μè′yí&#203;3&#246;IDLE&#196;£ê&#189;
                                {                                                                                            
                                        r1=SD_SendCmd(CMD1,0,0X01);//·¢&#203;íCMD1
                                }while(r1&&retry--);  
                        }
                        if(retry==0||SD_SendCmd(CMD16,512,0X01)!=0)SD_Type=SD_TYPE_ERR;//′í&#206;óμ&#196;&#191;¨
                }
        }
        SD_DisSelect();//è&#161;&#207;&#251;&#198;&#172;&#209;&#161;
        SD_SPI_SpeedHigh();//&#184;&#223;&#203;ù
        if(SD_Type)return 0;
        else if(r1)return r1;           
        return 0xaa;//&#198;&#228;&#203;&#251;′í&#206;ó
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 17:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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