主题 : SD卡开发(初始化部分)困惑之一 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7361
精华: 0
发帖: 6
金钱: 55 两
威望: 51 点
综合积分: 12 分
注册时间: 2009-07-12
最后登录: 2017-09-13
楼主  发表于: 2009-07-17 10:44

 SD卡开发(初始化部分)困惑之一

管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
环境:Micro2440的板子+ADS1.2+Kingston 2G SD卡
目的:完成SD卡的初始化
过程:向SD卡依次发送CMD0、CMD55+ACMD41、CMD2、CMD3,CMD0之后有等待200ms。
问题:
(1)发送CMD55指令后,指令状态寄存器(rSDICSTA)值为0xC00,即返回超时,导致后面的ACMD41,CMD2,CMD3指令不能继续发送,出现此问题如何解决?
(2)CMD55指令需要以RCA作为参数,在初始化过程中是不是用0x0000作为CMD55的参数?
(3)指令引索(Command Index)是不是等于指令号+0x40?比如55号指令的CMD Index=0x40+55=0x77。


期待各位高见,以化解我难题!
[ 此帖被ahoo1225在2009-07-20 10:20重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-07-17 11:10
(1)发送CMD55指令后,指令状态寄存器(rSDICSTA)值为0xC00,即返回超时,导致后面的ACMD41,CMD2,CMD3指令不能继续发送,出现此问题如何解决?

这说明卡的状态不对,无法相应CMD55命令。确认当时SD卡的各个信号(Power, Clock, Data)是否正常

(2)CMD55指令需要以RCA作为参数,在初始化过程中是不是用0x0000作为CMD55的参数?

是的

(3)指令引索(Command Index)是不是等于指令号+0x40?比如55号指令的CMD Index=0x40+55=0x77。

关于SD Command数据的组织结构,最好的参考资料是SD的Physical Layer Specification,这里有一个简化版(完整版需要SD会员资格)
http://www.sdcard.org/developers/tech/sdcard/pls/
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 7361
精华: 0
发帖: 6
金钱: 55 两
威望: 51 点
综合积分: 12 分
注册时间: 2009-07-12
最后登录: 2017-09-13
2楼  发表于: 2009-07-18 15:15
谢谢kasim,问题已解决
问题(1):S3C2440的SD Interface固件未正确初始化
问题(2):如1楼Kasim的回复
问题(3):CMD Index不应该按照指令号+0x40计算,CMD Index就等于指令号。由于SD协议对主机发出的指令包格式为:
     "01" + 6bit的CMD Index + 32bit指令参数 + 7bit的CRC + "1"
因此这里的"01" + 6bit的CMD Index 恰好就是指令号+0x40。
勺饮不器盛沧海,拳石频移磊泰山
级别: 侠客
UID: 15752
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2010-03-09
最后登录: 2010-10-19
3楼  发表于: 2010-04-21 17:23
请教:您是用裸机完成对SD的读取吗?利用的是SPI模式还是SD模式?SD有没有文件系统呢?小弟也在研究SD卡编程,目前比较迷茫,请您不吝赐教!
勺饮不器盛沧海,拳石频移磊泰山