打印

micro 2G sd卡执行cmd8命令时,每次的返回值不一样,求解

[复制链接]
5687|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adqprint|  楼主 | 2011-5-24 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好:
    我用的是micro 2G sd卡,spi接口。执行程序
    //-----------------SD卡复位到idle结束-----------------  
    //获取卡片的SD版本信息
    r1 = SD_SendCommand_NoDeassert(8, 0x1aa, 0x87);
r1每次的返回值都不一样。我看sd卡的手册上说
• Compatible with SD Specification Ver. 2.0
• Comply with SD File System Specification Ver. 2.0
那他应该返回值是0x01,请大家帮忙想想为什么。
我执行循环连续发送CMD0,直到SD卡返回0x01,进入IDLE状态这步是对的,这能说明硬件电路和卡没问题吧?
下面是cmd8执行程序
u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc)
{
    unsigned char r1;
    unsigned char Retry = 0;
    //????????
    SPI_ReadWriteByte(0xff);
    //片选端置低,选中SD卡
    SD_CS_ENABLE();
    //发送
    SPI_ReadWriteByte(cmd | 0x40);                         //分别写入命令
    SPI_ReadWriteByte(arg >> 24);
    SPI_ReadWriteByte(arg >> 16);
    SPI_ReadWriteByte(arg >> 8);
    SPI_ReadWriteByte(arg);
    SPI_ReadWriteByte(crc);
    //等待响应,或超时退出
    while((r1 = SPI_ReadWriteByte(0xFF))==0xFF)
    {
        Retry++;
        if(Retry > 200)break;   
    }
    //返回响应值
    return r1;
}
沙发
yinyangdianzi| | 2011-5-24 12:02 | 只看该作者
没次都要点新鲜感

使用特权

评论回复
板凳
t.jm| | 2011-5-24 12:45 | 只看该作者
SPI_ReadWriteByte(crc);
    //等待响应,或超时退出
    while((r1 = SPI_ReadWriteByte(0xFF))==0xFF)
    {
        Retry++;
        if(Retry > 200)break;   
    }
    //返回响应值
    return r1;

有可能这里没写好,我的试过读几次都是0x01,
1)最好在SPI_ReadWriteByte(crc);之后把这时接受到的垃圾数据取走,因为SPI是双向通信,每一个发送同时都会收到一个数据。
2)最好在CS设置高后发送8一个DUMMY字节。

使用特权

评论回复
地板
adqprint|  楼主 | 2011-5-24 14:49 | 只看该作者
谢谢二位,问题解决了,是硬件问题。MISO管脚有点和地虚接,从新焊接以后就好了

使用特权

评论回复
5
wenzj12345| | 2012-4-5 09:44 | 只看该作者
观注···

使用特权

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

本版积分规则

0

主题

60

帖子

1

粉丝