打印

SD卡发送CMD55+ACMD41总是返回0x01?是怎么回事

[复制链接]
9495|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
472666GAQ|  楼主 | 2010-12-27 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
muhp3| | 2011-3-9 10:21 | 只看该作者
我以前也遇到过这种情况,一直解决不掉

使用特权

评论回复
板凳
Pony279| | 2011-9-22 15:50 | 只看该作者
我也遇到了这样的问题。。。有木有人解决了这个问题的?

使用特权

评论回复
地板
Pony279| | 2011-9-22 16:58 | 只看该作者
我也是啊:'(

使用特权

评论回复
5
penghuidong| | 2014-5-8 22:19 | 只看该作者
您好 我想问一下 我现在是51单片机读写SDHC 4G的小卡的  我给卡初始化的过程中CMD0和CMD8的应答都对()  然后我再写CMD55和ACMD41的时候都是返回的0XFF  不知道出现了什么问题啊  您能帮忙解决下吗?

使用特权

评论回复
6
东方赤那| | 2015-10-19 11:54 | 只看该作者
         cnt = 200;
         do
         { // Ñ­»·¶ÁÈ¡·¢ËÍÃüÁî0µÄ·µ»Ø״̬£¬Ö±µ½³öÏÖ0x01»òÊdz¬³ö200´Î
                sta = sd_send_cmds( CMD0, 0, 0x95 );
                cnt--;
         } while ( ( sta != 0x01 ) && ( cnt ) );

                if ( cnt == 0) // ÅжÏÉÏÃæÑ­»·Í˳öµÄÔ­Òò£¬¶ÁÈ¡µ½0x01£¿£¿£¿£¿ ³¬Ê±£¿£¿£¿£¿
                {
                        // Èç¹û³¬Ê±ÁË£¬È¡ÏûƬѡºó£¬Ö±½ÓÍ˳ö
                        GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                                // SD_CSΪ¸ß
                        SPI2_ReadWriteByte(0xFF);
                        SPI2_ReadWriteByte(0xFF);
                        return 1; // ·µ»Ø1£¬³õʼ»¯Ê§°Ü
                }       

                sta = sd_send_cmds( CMD8, 0x1AA, 0x87 );
                GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                                // SD_CSΪ¸ß
                SPI2_ReadWriteByte(0xFF);
               
//         do
//        {                                                                                                                                                                                           // ÒÔϲÙ×÷Ϊ¼¤»îSD¿¨£¬Ê¹SD¿¨½øÈëÕý³£¹¤×÷״̬
//            GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                                // SD_CSΪ¸ß                                                                                                                 // ÊÍ·ÅSD¿¨
//            SPI2_ReadWriteByte(0xFF);
//            GPIO_ResetBits(GPIOD,GPIO_Pin_2);                                                                                                                // Ñ¡ÖÐSD¿¨
//            sta=sd_send_cmds( CMD55, 0, 0x00 );
//        sta=sd_send_cmds(ACMD41, 0x40000000, 0x00);                                                                  // ·¢ËÍCMD41  ·´»ØÖµ‘ªÔ“ÊÇ0x00 …¢”µ0x40000000   0x00ff8000
//          } while (SD_GetResponse(SD_RESPONSE_NO_ERROR));                                            // Ñ­»·Ö±ÖÁ²Ù×÷³É¹¦  ·µ»ØÁã±íʾ³É¹¦
       
       
         cnt = 0xffff;
         do
         {
                GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                                // SD_CSΪ¸ß                                                                                                                 // ÊÍ·ÅSD¿¨
            SPI2_ReadWriteByte(0xFF);
            GPIO_ResetBits(GPIOD,GPIO_Pin_2);       
            sta=sd_send_cmds( CMD55, 0, 0x00 );
        sta=sd_send_cmds(ACMD41, 0x40000000, 0x00);                                                                  // ·¢ËÍCMD41  ·´»ØÖµ‘ªÔ“ÊÇ0x00 …¢”µ0x40000000   0x00ff8000
                cnt--;
         } while ( sta && cnt );       

          GPIO_SetBits(GPIOD,GPIO_Pin_2);         

使用特权

评论回复
7
东方赤那| | 2015-10-19 11:55 | 只看该作者
               sta = sd_send_cmds( CMD8, 0x1AA, 0x87 );
                 GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                                // SD_CSΪ¸ß
                 SPI2_ReadWriteByte(0xFF);

我的程序必须写成才可以通过

使用特权

评论回复
8
丑的欠打| | 2016-1-7 21:53 | 只看该作者
       根据SD2.0规范,如果主机支持SDHC或者SDXC的卡,ACMD41的参数中的HCS位应该置1,即32位的参数应该为0x40000000;如果主机只支持SDSC,那么ACMD的参数中的HCS位应该置0,即32位参数应该为0x00000000。
       简单起见,如果你的卡是SDHC/SDXC,ACMD41的参数就用0x40000000;如果你的卡是SDSC,即使你的程序也支持SDHC,请将ACMD41的参数改为0x00000000.
     

使用特权

评论回复
9
thytsx| | 2017-5-10 09:09 | 只看该作者
丑的欠打 发表于 2016-1-7 21:53
根据SD2.0规范,如果主机支持SDHC或者SDXC的卡,ACMD41的参数中的HCS位应该置1,即32位的参数应该为 ...

我使用的是sdhc的卡,参数使用的0x40000000,返回值第一个是0x01,接着再发就是一长串的返回值了,我是直接用示波器看的,大约十几个字节的返回值,不管发多少遍每次都一样

使用特权

评论回复
10
ccczzzyyy| | 2017-6-17 15:39 | 只看该作者
和楼主一样的问题,发送ACMD41后返回的是0x01,不知道楼主当时有没有解决呢?

使用特权

评论回复
11
ccczzzyyy| | 2017-6-17 16:08 | 只看该作者
ccczzzyyy 发表于 2017-6-17 15:39
和楼主一样的问题,发送ACMD41后返回的是0x01,不知道楼主当时有没有解决呢? ...

我晕,步进调试是01,整句调试是0x00.这是什么原因,有大神知道吗,,

使用特权

评论回复
12
tt朝花夕拾| | 2017-7-26 09:43 | 只看该作者
请问楼主这个问题解决了么?
ACMD41概率性的sdcard初始化返回0x01;
有的时候可以返回0x0,
请问是否了解呢?

使用特权

评论回复
13
小蜜蜂00| | 2018-5-8 10:17 | 只看该作者
我acmd41参数改0x40000000就好了具体代码看附件

复件 TF.zip

1.19 KB

tf初始化、读

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

285

帖子

2

粉丝