我正在使用一个microSD http://en.wikipedia.org/wiki/Secure_Digital#Physical_size卡采用嵌入式设计。该卡使用 SPI 接口连接到微控制器。它适用于我以前使用过的所有卡,但现在我的新卡无法初始化。该卡是 Transcend 2 GB microSD 卡 (TS2GUSD)。
发送初始时钟序列以切换到 SPI 模式后,我执行以下操作:
CMD0(参数 0,CRC 0x95)-> 响应 0x01 -> OK
CMD8(参数 0x000001AA,CRC 0x87) -> 响应 0x01 0x000001AA -> 表示它是 SDC V2+ 卡,支持电压范围 2.7 V - 3.6 V -> OK
然后我应该发送 ACMD41 命令,但是当发送必须在 CMD41 之前的 CMD55(参数 0,CRC 0)时,我得到响应 0x05 -> 非法命令。
我也尝试过发送 CMD1 (对于 MMC 卡),但它给出了类似的非法命令回复。该代码适用于我的 Sandisk 2 GB microSD 卡。
我该如何解决这个问题?
我好像发现问题了。当我计算 CMD55 的正确 CRC 并发送它而不是虚拟 CRC 时,命令被接受(结果 0x01)。如果你看物理层规范 http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf在第 7.2.2 节中,明确指出:
SPI 接口默认在 CRC OFF 模式下初始化。 (命令 CMD0 和 CMD8 除外)。
这一系列的Transcend卡似乎并非如此,因此违反了规范。此外,如果出现 CRC 错误,回复应为 0x09 而不是 0x05。我尝试使用 CMD59 显式关闭 CRC 检查,但这似乎没有帮助。
=> 为(所有?)命令计算正确的 CRC 使卡正常工作。
我正在就此事与 Transcend 支持部门联系。如果我学到一些有用的东西,你就会在这里知道。
请注意,我之前使用过其他 2 GB Transcend 卡,但它们是台湾制造的,而新卡是韩国制造的(似乎是三星卡(MMAGR02GUDCA))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)