AVR_DIY 发表于 2011-4-15 11:27:14

金士顿SD卡和其他SD卡不一样吗?怎么ACMD41命令通不过?

RT 我写了一段初始化SD卡并读写的驱动,发现奇怪的问题是:手里面有三张SD卡,两张三星的 512MB 、1G的 ,检测出是V2.0的卡,另外一张是金士顿的4G卡,三星的两张卡初始化 读写都没有问题的!但是4G金士顿的SD卡初始化的时候,一直卡在发送ACMD41后没有0x00返回,一直返回的是0x01....
我的初始化顺序是:CMD0---CMD8-----CMD55+ACMD41....
请大侠赐教......
PS:金士顿的卡检测出也是V2.0的协议..

AVR_DIY 发表于 2011-4-15 13:43:38

自己顶一下

AVR_DIY 发表于 2011-4-15 17:09:42

另外,碰到一个新问题:我误将512MB的SD卡的0扇区擦除了,写入了其他的内容,结果我读SD卡的容量啊 、CID等都是错误的,难道这些信息保存在扇区0?不是吧,按理说,用户应该删不了出厂的信息啊 ?为什么呢?我读另外两张卡就可以读到正确的CID CSD..不知道大家有没有碰到类似的问题?

AVR_DIY 发表于 2011-4-16 09:14:38

有人点击 就是没有人回./emotion/em044.gif

xuyibinaix 发表于 2011-7-9 20:47:30

你好,我也碰到这个问题了,CMD55+ACMD41一直返回1,请问你解决了吗?我邮箱:xuyibinaix@163.com

huatuizh 发表于 2011-7-9 21:19:15

这个兼容性问题,多半是由于时序保证的不够,尤其是,CS无效之后,要额外的发送一个0xFF的冗余dummy字节;甚至为求可靠,在CS有效之前,也要发送一次。
上电后低速率发送80个clk的1,也要做。
CSD/CID不放在sector0的,单独的寄存器存放的。读的不正确,还是没有完全兼容所有的卡的要求。
某些V1的卡CMD8会有返回误检成V2,所以,最准确的是靠check CCS in OCR when SDHC的。
我们之前的SD卡SPI程序,修修补补到后来,再没有碰见过不兼容的卡了。

Pony279 发表于 2011-9-25 00:02:56

5555555....我也是啊

Pony279 发表于 2011-10-9 01:43:10

回复【4楼】xuyibinaix
-----------------------------------------------------------------------

这位哥能否把代码共享下,我还是没搞定金士顿的4GSDHC卡

cock 发表于 2011-10-9 05:23:35

4G的卡与2G及以下的卡,协议不一样。

90999 发表于 2011-10-9 05:55:39

回复【5楼】huatuizh
这个兼容性问题,多半是由于时序保证的不够,尤其是,cs无效之后,要额外的发送一个0xff的冗余dummy字节;甚至为求可靠,在cs有效之前,也要发送一次。
上电后低速率发送80个clk的1,也要做。
csd/cid不放在sector0的,单独的寄存器存放的。读的不正确,还是没有完全兼容所有的卡的要求。
某些v1的卡cmd8会有返回误检成v2,所以,最准确的是靠check ccs in ocr when sdhc的。
我们之前的sd卡spi程序,修修补补到后来,再没有碰见过不兼容的卡了。
-----------------------------------------------------------------------

我也是,现在init也是自己写的,没有遇到什么不兼容的卡了。

yaya001 发表于 2011-10-9 07:29:06

mark

bitant 发表于 2011-11-8 13:41:20

很不错的经验。

dianzidog 发表于 2011-11-8 14:01:05

回复【5楼】huatuizh
-----------------------------------------------------------------------

对的,某些sd卡不用多余的clk,某些一定要。某些卡特别慢,等待超时的时间要非常长。

thaoce 发表于 2011-11-8 16:12:18

最近用了金士顿的2GSDHC卡,靠接口都和SD卡不一个样,少了个管脚,请问代码难开发吗?

Pony279 发表于 2011-11-8 22:21:46

硬件上也是很重要的,
我以前调的时候,
同一份代码,
在我的开发板上(5V单片机的引脚直接串电阻连SD卡)只能调通一张1G SD卡,调不通金士顿的4G SDHC卡, ACMD41那里怎么也调不过
但是后来另外去买了一个SD读写模块以后,两张卡都没问题了

turf456 发表于 2011-11-8 22:26:22

4G的是SDHC吧。和SD不一样

avrlv 发表于 2011-11-9 00:19:42

sdhc的资料谁有请上传,让大家学习一下!

huanyou 发表于 2011-12-16 23:24:37

回复【5楼】huatuizh   
这个兼容性问题,多半是由于时序保证的不够,尤其是,cs无效之后,要额外的发送一个0xff的冗余dummy字节;甚至为求可靠,在cs有效之前,也要发送一次。
上电后低速率发送80个clk的1,也要做。
csd/cid不放在sector0的,单独的寄存器存放的。读的不正确,还是没有完全兼容所有的卡的要求。
某些v1的卡cmd8会有返回误检成v2,所以,最准确的是靠check ccs in ocr when sdhc的。
我们之前的sd卡spi程序,修修补补到后来,再没有碰见过不兼容的卡了。
-----------------------------------------------------------------------

我也是,现在init也是自己写的,没有遇到什么不兼容的卡了。
回复【9楼】90999
-----------------------------------------------------------------------


应该补充:
    1> SD卡可以用SPI或是SDIO控制模块两种方式驱动
    2> 2G以下的与4G以上的协议不同
    3> 4G以上的是高度卡,需要用SDIO模块才能驱动

51_jiaduoW~W 发表于 2012-7-28 12:30:40

我的总是返回一个0x01,发送acmd41,解决的吗?不知道问题在哪?应该是sdv1的协议检测

zz蓝sea 发表于 2013-7-12 23:18:48

我说呢 我直接买了个16G的 怎么调都跳不过ACMD41

yfgww 发表于 2013-7-19 10:15:26

{:sad:}{:sad:}{:sad:}
页: [1]
查看完整版本: 金士顿SD卡和其他SD卡不一样吗?怎么ACMD41命令通不过?