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

[复制链接]
4280|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的时序不对。
 楼主| a7208184 发表于 2011-3-15 12:31 | 显示全部楼层
这个问题应该对于有经验的朋友,很简单的呀。。本来这个协议时很简单的呀。不知道哪里出了问题。时钟频率也没有问题啊,上电后也有延时74个CLK啊。
l0p0c 发表于 2011-3-15 21:45 | 显示全部楼层
要严格按照协议走,否则不会成功@
 楼主| a7208184 发表于 2011-3-16 10:38 | 显示全部楼层
你好,6楼的朋友。我一直不太理解SD卡上电,延时64CLK,这个是直接延时64个系统时钟吗?还有,SD卡检测时候的频率一般多大会合适?是不是不能超过400KHZ
t.jm 发表于 2011-3-16 14:13 | 显示全部楼层
7楼我的发CMD55,ACMD41后,得到返回值0xffff8000
t.jm 发表于 2011-3-16 17:58 | 显示全部楼层
LZ 调试怎么样了?我的基本正常了,初始化到上面后(CMD55,ACMD41)就迫不急待读了一个块的数据对比正确。
wifi 发表于 2011-3-16 18:04 | 显示全部楼层
要严格按照协议走
 楼主| a7208184 发表于 2011-3-16 19:40 | 显示全部楼层
9楼的朋友,我现在也基本OK了。现在可以进到传输模式。不过在设置SD卡的速度模式时,我发CMD6,是数据CRC错误,很奇怪。。你的不会吗?
 楼主| 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
 楼主| a7208184 发表于 2011-3-17 16:53 | 显示全部楼层
2G卡和4G卡读取CSD可能有区别。我读4G卡就没有问题。不过小弟在读写的block的时候,出现了问题,出现数据超时错误。这是什么原因??没道理了呀!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

76

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部