打印

关于SMDK2450的SD卡怎么才算初始化成功

[复制链接]
3543|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a7208184|  楼主 | 2011-3-14 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想请问大家下,小弟现在准备裸机实现SD卡的驱动。CPU采用的是SMDK2450。小弟发CMD55,ACMD41后,得到返回值0x00ff8000(这里,小弟有个疑问,OCR的最高位不是1)。发CMD2,想得到SD卡的CID,发现返回值是0,发CMD3,发现返回值是0xff。想知道这种情况正常吗?

疑惑一:觉得返回值是0x10ff8000,才会对,这样表明可以检测到SD卡。这样不知道行不行。

疑惑二:SD卡的CID值可能是0吗?觉得可能不对。

希望有这方面经验的朋友,帮忙看下。谢谢咯!!!!

相关帖子

沙发
a7208184|  楼主 | 2011-3-14 21:41 | 只看该作者
郁闷了!!不应该呀。发CMD55和ACMD41的时候,响应的最高位31位不是1,初始化总是失败。大家能不能帮帮忙,看下什么问题!!!

使用特权

评论回复
板凳
a7208184|  楼主 | 2011-3-14 22:08 | 只看该作者
可能是我描述不太清楚吧。现在我用的是s3c2450的板子,用的kingston 4GB的SD卡。目前遇到的问题是:
1、发CMD55和ACMD41后,返回的是0x00ff8000,总是不能返回0x80ff8000。然后接下来发送的CMD2和CMD3,都没有什么响应了。已经弄了快两天了。不知道哪里出了问题。希望有这方面经验的朋友帮忙下!!

使用特权

评论回复
地板
t.jm| | 2011-3-15 08:47 | 只看该作者
唉,我更郁闷,我的4G卡发CMD8,返回R1=1,(Ver:Reserved:VCA :Pattern)就不正确,
总是0x00000000,如果再继续读两字节就能读到返回的Pattern值,不知道是不是SPI的时序不对。

使用特权

评论回复
5
a7208184|  楼主 | 2011-3-15 12:31 | 只看该作者
这个问题应该对于有经验的朋友,很简单的呀。。本来这个协议时很简单的呀。不知道哪里出了问题。时钟频率也没有问题啊,上电后也有延时74个CLK啊。

使用特权

评论回复
6
l0p0c| | 2011-3-15 21:45 | 只看该作者
要严格按照协议走,否则不会成功@

使用特权

评论回复
7
a7208184|  楼主 | 2011-3-16 10:38 | 只看该作者
你好,6楼的朋友。我一直不太理解SD卡上电,延时64CLK,这个是直接延时64个系统时钟吗?还有,SD卡检测时候的频率一般多大会合适?是不是不能超过400KHZ

使用特权

评论回复
8
t.jm| | 2011-3-16 14:13 | 只看该作者
7楼我的发CMD55,ACMD41后,得到返回值0xffff8000

使用特权

评论回复
9
t.jm| | 2011-3-16 17:58 | 只看该作者
LZ 调试怎么样了?我的基本正常了,初始化到上面后(CMD55,ACMD41)就迫不急待读了一个块的数据对比正确。

使用特权

评论回复
10
wifi| | 2011-3-16 18:04 | 只看该作者
要严格按照协议走

使用特权

评论回复
11
a7208184|  楼主 | 2011-3-16 19:40 | 只看该作者
9楼的朋友,我现在也基本OK了。现在可以进到传输模式。不过在设置SD卡的速度模式时,我发CMD6,是数据CRC错误,很奇怪。。你的不会吗?

使用特权

评论回复
12
a7208184|  楼主 | 2011-3-17 11:08 | 只看该作者
大家好!我有个疑问,我获取SD卡的CSD的信息,很奇怪。我的用的是Kingston 4g的SDHC的卡,获取的数据时C_SIZE 是0, 一个block的size是512Byte,总的SD卡的size才1M,这是什么原因。。我把我获取的方法贴出来,大家帮忙看下, 这样对吗?


SD_SendCmd(0x09, s_RCA, 0);        //發送CSD,可以獲取卡的存儲等信息


        READ_BL_LEN = ((rHM1_RSPREG2 >> 8) & 0xf);//最大读取数据块长
        READ_BL_PARTIAL = ((rHM1_RSPREG2 >> 7) & 0x1) ;//允许读的部分块
        C_SIZE = ((rHM1_RSPREG2 & 0x3) << 10) | ((rHM1_RSPREG1 >> 22) & 0x3ff);//设备容量
        C_SIZE_MULT = ((rHM1_RSPREG1 >> 7) & 0x7);//容量乘子       
        CardSize = (1 << READ_BL_LEN) * (C_SIZE + 1) * (1 << (C_SIZE_MULT + 2)) / 1048576;//卡的容量
        OneBlockSize = (1 << READ_BL_LEN);//1个block的size

使用特权

评论回复
13
a7208184|  楼主 | 2011-3-17 16:53 | 只看该作者
2G卡和4G卡读取CSD可能有区别。我读4G卡就没有问题。不过小弟在读写的block的时候,出现了问题,出现数据超时错误。这是什么原因??没道理了呀!!

使用特权

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

本版积分规则

0

主题

76

帖子

1

粉丝