标题: 请问4G的SD卡能用单片机+SPI驱动吗? [打印本页]

作者: ildpj    时间: 2020-3-22 18:07
标题: 请问4G的SD卡能用单片机+SPI驱动吗?
本帖最后由 ildpj 于 2020-3-23 14:51 编辑

请问4G以上的sd卡,能用SPI驱动吗? 我使用16G的sd卡,初始化一直没有通过,前面的CMD0,CMD8,都能正常返回0x01,但就是ACMD41一直返回0x01,困惑了我好久,哪位大佬指点指点我,,,,谢谢

我用的51单片机模拟SPI驱动的,下面是复位的程序,大神帮忙看看



uchar SD_Reset()
{
    uchar j,time=0,r1,time1;
    cs=1;
   
    SD_Delay=1;              //降低速率
    for(j=0;j<20;j++)      //执行160时钟
    {
        Write_Byte(0xff);        
    }
    cs=0;
    /*发送CMD0*/
    do
    {
        r1=Write_Common(0,0x00000000,0x95);
        time++;
        if(time>=255)
        {
            cs=1;
            Write_Byte(0xff);
            return 2;
        }
    }
    while(r1!=0x01)    ;                                   //正常
    time=0;
    /*CMD8*/
    do
     {
        r1=Write_Common(8,0x000001AA,0x87);
        time++;
        if(time>254)
        {                           
            cs=1;
            Write_Byte(0xff);        
            return     3;     
         }
     }
    while(r1!=0x01);                                    //正常
    table[0]=Read_Byte();
    table[1]=Read_Byte();
    table[2]=Read_Byte();
    table[3]=Read_Byte();
    sendBin(table[2]);
    sendDate(' ');
    sendBin(table[3]);
   /*ACMD41*/
   time=0;
   time1=0;
        do
        {
            do
            {
                r1=Write_Common(55,0x0000000,0xff);
                time1++;
                if(time1>200)
                {
                    cs=1;
                    Write_Byte(0xff);
                    return     5;                 
                }
            }
            while(r1!=0x01);
            time1=0;
            r1=Write_Common(41,0x4000000,0xff);
            time++;
            if(time>254)
            {
                cs=1;
                Write_Byte(0xff);
                return     r1;             //响应0x01,无法正常初始化   
            }
        }while((r1!=0x00));                   //???
        

    cs=1;
    Write_Byte(0xff);
    SD_Delay=0;
    return 0;

}





作者: xianming    时间: 2020-3-23 12:31
小于2G的卡属于SD,大于2G的卡属于SDHC,大于32G的卡是SDXC(单片机一般用不着大于32G的)
SD的ACMD41为69 00 30 00 00 FF
SDHC的ACMD41为69 40 30 00 00 FF

上面都是十六进制。
69是十六进制的41(0x29)加上0x40的结果,你的好像Write_Common里已经加上了。
作者: ildpj    时间: 2020-3-23 14:48
xianming 发表于 2020-3-23 12:31
小于2G的卡属于SD,大于2G的卡属于SDHC,大于32G的卡是SDXC(单片机一般用不着大于32G的)
SD的ACMD41为69 ...

还请问参数中的 ‘ 30 ’哪里来的,我看手册上是0x40000000
作者: ildpj    时间: 2020-3-23 18:29
xianming 发表于 2020-3-23 12:31
小于2G的卡属于SD,大于2G的卡属于SDHC,大于32G的卡是SDXC(单片机一般用不着大于32G的)
SD的ACMD41为69 ...

多谢,我找到问题了,我的ox4000000,少写了一个零




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1