找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2027|回复: 4
打印 上一主题 下一主题
收起左侧

请问4G的SD卡能用单片机+SPI驱动吗?

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 50 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:535136 发表于 2020-3-22 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;

}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:691449 发表于 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里已经加上了。
回复

使用道具 举报

板凳
ID:535136 发表于 2020-3-23 14:48 | 只看该作者
xianming 发表于 2020-3-23 12:31
小于2G的卡属于SD,大于2G的卡属于SDHC,大于32G的卡是SDXC(单片机一般用不着大于32G的)
SD的ACMD41为69 ...

还请问参数中的 ‘ 30 ’哪里来的,我看手册上是0x40000000
回复

使用道具 举报

地板
ID:535136 发表于 2020-3-23 18:29 | 只看该作者
xianming 发表于 2020-3-23 12:31
小于2G的卡属于SD,大于2G的卡属于SDHC,大于32G的卡是SDXC(单片机一般用不着大于32G的)
SD的ACMD41为69 ...

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

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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