在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: dabenzhong

[求助] SD卡的初始化过程

[复制链接]
 楼主| 发表于 2012-5-15 07:58:42 | 显示全部楼层
如果第一次发送ACMD41的参数都是0的话,那不就是询问OCR寄存器么,那有啥区别的?
发表于 2012-5-15 08:48:53 | 显示全部楼层
不一样的,你可以试试,协议上规定是需要全为0的,卡里面可能就是检测全是0,才往下执行状态机
 楼主| 发表于 2012-5-15 09:14:39 | 显示全部楼层
哦,我先试试看,谢谢你了啊。
发表于 2012-5-15 09:48:30 | 显示全部楼层
怎麼跟我讀的spec不一樣???
底下先不談READY這件事,先談OCR register

如果是SD 1.0~1.1
SD Host在CMD0之後會對SD CARD送ACMD41,  argument會內含OCR register的值(就是表示SD HOST可以支援的working voltage),然後SD CARD也會把可以support的working voltage回覆在R3 response裡面

如果是SD 2.0~3.X
SD HOST會發送CMD8 --> CMD0 --> AMCD41, ACMD41的argument也一樣會包含OCR register的值,只是額外還會在OCR register的BIT[30],顯示SD HOST是否支援高容量的CARD (High capacity) 或是一般容量的CARD (Standard capacity)

如果SD HOST送了ACMD41但argument全為0,就表示這個SD HOST任何工作電壓都不支援,這時候就看SD CARD端的設計,有的SD CARD還是會乖乖的在SD response裡面回覆可以support的工作電壓, 反正SD HOST有送Command來詢問,只要是legal command, 而且願意繼續送出SD Clock,那麼SD CARD就願意繼續回覆Response,

當然有的SD CARD也可能就直接不回覆response了,反正SD HOST都說任何電壓都不支援了,我為啥還要回覆response

另外,ACMD41是需要SD HOST一直發送給SD CARD,直到SD CARD回覆的response裡,OCR value BIT[31]變成1,SD HOST才會繼續送CMD2, CMD3 .....讓SD STATE繼續往後走,所以可別只送一次ACMD41,這樣SD CARD是來不及在短時間之內就處理完內部的工作而去設ORC register BIT[31] =1
发表于 2012-5-15 10:05:37 | 显示全部楼层
第一,試著把你的OCR value改的跟CARD片一樣
現在的CARD都是Support 3.3V左右,但是可容忍範圍3.6V~2.7V都可以,因為怕有相容性問題,所以容忍範圍都比較大

第二,如果還是不行,請更換另一張SD CARD
有可能是SD CARD 內部的韌體死掉了,或是SD CARD內部的FLASH有很多BAD BLOCK,才會造成在initial state,SD CARD 一直是BUSY的狀態

另外提醒,雖然SD SPEC規定initial timeout時間為1秒,但是多半都是幾百us~數ms SD CARD就會ready, 以SD HOST的角度來說.....如果可以...請把timeout的時間拉長一點,因為現在SD CARD搭配的NAND FLASH效能越來越不好,需要花更多的時間才會變成READY
发表于 2012-5-15 10:33:31 | 显示全部楼层
本帖最后由 harejavahill 于 2012-5-15 10:52 编辑

回复 15# pcbass


   至于1.0,我不确认,但对于2.0,你说可能不正确。 你说的是第二次(或者第三次。。。。)发ACMD41时的参数设置
 楼主| 发表于 2012-5-15 14:17:01 | 显示全部楼层
现在的结果还是不行,我把现在做的过程以及结果都写下来,大家看看是不是哪里有问题,谢谢各位。
首先,问题是SD卡在ACMD41的response当中的busy位总是维持0状态,不能完成当前的initial操作。
而我做的操作流程有两个
第一个流程是CMD0、CMD8、CMD55、ACMD41(first ACMD41)、CMD55、ACMD41(询问ACMD41)、CMD55、ACMD41(询问acmd41)、。。。。。。。。。
第二个流程是CMD0、CMD8、CMD55、ACMD41(询问ACMD41)、CMD55、ACMD41(first ACMD41)、CMD55、ACMD41(询问acmd41)、。。。。。。。。。
根据我看到的协议呢,在2.0协议的情况下,ACMD41的第一次发送会像SD卡发送当前的HCS和电压值,在此之后,再发送的ACMD41仅仅是询问ACMD41,主要的用途是为了获得SD卡的OCR寄存器的值,并且查询当前initial的过程有没有完成,也就是OCR的31位busy位了。我觉得这个的理解是没错的,我从协议上也看到了相应的说明。至于在询问ACMD41阶段的参数值是不是和first ACMD41一致,还是清零,这个我可以试试。
 楼主| 发表于 2012-5-15 14:28:31 | 显示全部楼层
目前所做的两种测试结果什么区别,得到的响应很相近。
CMD0命令为:
0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_1001_0101
CMD8命令为:
0100_1000_0000_0000_0000_0000_0000_0001_1010_1010_1000_0111
CMD8的response为:
0000_1000_0000_0000_0000_0000_0000_0001_1010_1010_0001_0011
CMD55的命令为:
0111_0111_0000_0000_0000_0000_0000_0000_0000_0000_0110_0101
CMD55的response为:
0011_0111_0000_0000_0000_0000_0000_0001_001-_0000_1000_0011
ACMD41的命令为:
0110_1001_0100_0000_0010_0000_0000_0000_0000_0000_1100_1101
ACMD41的response为:
0011_1111_0100_0000_1111_1111_1000_0000_0000_0000_1111_1111
 楼主| 发表于 2012-5-15 14:30:17 | 显示全部楼层
在上述的命令响应当中,ACMD41的response一致是如此的,而且最奇怪的是,所有的电压位都表示位1,这是有错误么?
我用万用表量了一下SD卡的供电电压为3.5V,所以我觉得我的设定没有错误的啊
发表于 2012-5-15 14:36:59 | 显示全部楼层
对你说了半天,白说了。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 01:41 , Processed in 0.019778 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表