题
我用一个 sd 卡在一个嵌入式的设计。卡连接到一个微控制器使用的SPI接口。它的工作的现用于所有的卡我已经使用过,但是现在我的新卡不会初始化。该卡是一个超越2GB卡(TS2GUSD).
在发送之后的最初时钟的火车要开到SPI模式,我做到以下几点:
CMD0(参数0,CRC0x95)->响应0x01->确定
CMD8(参0x000001AA,儿童权利委员会0x87)->响应0x01 0x000001AA->意味着它的SDC V2+卡,电压的范围2.7V-3.6V支持->确定
然后我应该送ACMD41命令,但是,当发送的CMD55(参数0,CRC0),必须先于CMD41,我得到响应0x05->的非法命令。我还想送CMD1(MMC卡),但它提供了一个类似的 非法的命令 响应。代码作品的现有我的闪2GB sd卡。
如何解决这个问题?
解决方案
我似乎找到了这个问题。当我的计算正确CRC CMD55和发送,而不是一个虚拟的儿童权利委员会,命令被接受(结果0x01).如果你看看 物理层说明书 第7.2.2,它明确地说:
SPI接口被初始化CRC关模式中的缺省值。(除命令CMD0和CMD8).
这似乎不是这种情况与这一系列的跨越卡,从而违反了规范。还在的情况下CRC错误的答复应0x09而不是0x05。我试着明确关闭CRC检查与CMD59,但这似乎并没有帮助。
=>计算正确的CRC(?) 命令使得该卡的工作。
我在联系与超越支持这一点。如果我学到一些有用的东西我将,你知道这里。
注意我用其他2GB超越卡之前,但他们在台湾的,而新一是在韩国(似乎是一个三星卡(MMAGR02GUDCA)).
其他提示
我有几乎相同的问题。当发送ACMD41,我发CMD55随后通过CMD41.响应对CMD55是0x01,表示闲置状态和运行初始化过程(这是正常的,我认为)。CMD41会的反应与0x05,表明非法命令。事实证明,我的特别卡,并CRC检默认情况下,甚至在SPI模式,并misreports CRC错误作为非法的命令(即,它不遵循SD spec).当我的计算正确的儿童权利委员会,它工作正常。这里是CRC7计算代码,我在使用,它具有运作良好,对我来说:
https://github.com/hazelnusse/crc7
除非你已经照顾到禁止CRC检查,我认为这可能是最好的假设这不是残疾人,并确保计算适当CRC每个命令的框架。从什么我可以告诉大家,一些卡禁止通过默认在SPI模式和其他启用它,虽然SD规范的国家应当无障碍通过默认在SPI模式,除了CMD8.
你说你用 CRC 0
对失败的命令。我假设你的意思是,你发送的整个最后一个字节 0x00
.注意CRC7仅仅是第7位的最后一个字节的最后一位叫 end bit
总是应该 1
.所以如果你发送 0x00
作为最后一个字节, 0
作为最后一点,失效是可以理解的,甚至是错误代码会有意义。如果你发送 1
作为最后一点,它应工作,即。使用的东西喜欢 0x01
或 0xFF
作为最后一个字节。
这是正常的,这可能是内部负责泵的使用清除电压,需要更长的时间比平常要准备好...你必须坚持CMD55+ACMD41组合,直到初完成。
该CMD58也可以帮你检查,如果你提供正确的电压的水平(有时插座有联系问题)。
发送CMD0有芯片的选择(0)本身并不化的卡在SPI模式。这只集SPI模式。卡不是初始化,直到ACMD41返回接受的。然后CRC默认是关闭的。