金士顿SD卡和其他SD卡不一样吗?怎么ACMD41命令通不过?
RT 我写了一段初始化SD卡并读写的驱动,发现奇怪的问题是:手里面有三张SD卡,两张三星的 512MB 、1G的 ,检测出是V2.0的卡,另外一张是金士顿的4G卡,三星的两张卡初始化 读写都没有问题的!但是4G金士顿的SD卡初始化的时候,一直卡在发送ACMD41后没有0x00返回,一直返回的是0x01....我的初始化顺序是:CMD0---CMD8-----CMD55+ACMD41....
请大侠赐教......
PS:金士顿的卡检测出也是V2.0的协议.. 自己顶一下 另外,碰到一个新问题:我误将512MB的SD卡的0扇区擦除了,写入了其他的内容,结果我读SD卡的容量啊 、CID等都是错误的,难道这些信息保存在扇区0?不是吧,按理说,用户应该删不了出厂的信息啊 ?为什么呢?我读另外两张卡就可以读到正确的CID CSD..不知道大家有没有碰到类似的问题? 有人点击 就是没有人回./emotion/em044.gif 你好,我也碰到这个问题了,CMD55+ACMD41一直返回1,请问你解决了吗?我邮箱:xuyibinaix@163.com 这个兼容性问题,多半是由于时序保证的不够,尤其是,CS无效之后,要额外的发送一个0xFF的冗余dummy字节;甚至为求可靠,在CS有效之前,也要发送一次。
上电后低速率发送80个clk的1,也要做。
CSD/CID不放在sector0的,单独的寄存器存放的。读的不正确,还是没有完全兼容所有的卡的要求。
某些V1的卡CMD8会有返回误检成V2,所以,最准确的是靠check CCS in OCR when SDHC的。
我们之前的SD卡SPI程序,修修补补到后来,再没有碰见过不兼容的卡了。 5555555....我也是啊 回复【4楼】xuyibinaix
-----------------------------------------------------------------------
这位哥能否把代码共享下,我还是没搞定金士顿的4GSDHC卡 4G的卡与2G及以下的卡,协议不一样。 回复【5楼】huatuizh
这个兼容性问题,多半是由于时序保证的不够,尤其是,cs无效之后,要额外的发送一个0xff的冗余dummy字节;甚至为求可靠,在cs有效之前,也要发送一次。
上电后低速率发送80个clk的1,也要做。
csd/cid不放在sector0的,单独的寄存器存放的。读的不正确,还是没有完全兼容所有的卡的要求。
某些v1的卡cmd8会有返回误检成v2,所以,最准确的是靠check ccs in ocr when sdhc的。
我们之前的sd卡spi程序,修修补补到后来,再没有碰见过不兼容的卡了。
-----------------------------------------------------------------------
我也是,现在init也是自己写的,没有遇到什么不兼容的卡了。 mark 很不错的经验。 回复【5楼】huatuizh
-----------------------------------------------------------------------
对的,某些sd卡不用多余的clk,某些一定要。某些卡特别慢,等待超时的时间要非常长。 最近用了金士顿的2GSDHC卡,靠接口都和SD卡不一个样,少了个管脚,请问代码难开发吗? 硬件上也是很重要的,
我以前调的时候,
同一份代码,
在我的开发板上(5V单片机的引脚直接串电阻连SD卡)只能调通一张1G SD卡,调不通金士顿的4G SDHC卡, ACMD41那里怎么也调不过
但是后来另外去买了一个SD读写模块以后,两张卡都没问题了 4G的是SDHC吧。和SD不一样 sdhc的资料谁有请上传,让大家学习一下! 回复【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模块才能驱动 我的总是返回一个0x01,发送acmd41,解决的吗?不知道问题在哪?应该是sdv1的协议检测 我说呢 我直接买了个16G的 怎么调都跳不过ACMD41 {:sad:}{:sad:}{:sad:}
页:
[1]