我用一个 sd 卡在一个嵌入式的设计。卡连接到一个微控制器使用的SPI接口。它的工作的现用于所有的卡我已经使用过,但是现在我的新卡不会初始化。该卡是一个超越2GB卡(TS2GUSD).

在发送之后的最初时钟的火车要开到SPI模式,我做到以下几点:

  1. CMD0(参数0,CRC0x95)->响应0x01->确定

  2. 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 作为最后一点,它应工作,即。使用的东西喜欢 0x010xFF 作为最后一个字节。

这是正常的,这可能是内部负责泵的使用清除电压,需要更长的时间比平常要准备好...你必须坚持CMD55+ACMD41组合,直到初完成。

该CMD58也可以帮你检查,如果你提供正确的电压的水平(有时插座有联系问题)。

发送CMD0有芯片的选择(0)本身并不化的卡在SPI模式。这只集SPI模式。卡不是初始化,直到ACMD41返回接受的。然后CRC默认是关闭的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top