2

我看到了很多关于 MMC/SD 卡的信息,我试图创建一个库来阅读这个(修改Procyon AVRlib)。

但是我这里有一些问题。我没有更改原始代码并在这里尝试。我的问题是关于 SD 卡的初始化。我这里有两个,一个 256 MB,另一个 1 GB。

我按以下顺序发送初始化命令:CMD0、CMD55、ACMD41 和 CMD1。

但是 256 MB SD 卡只为每个命令返回一个 0x01 响应。我多次发送 CMD1,256 MB SD 卡总是只返回 0x01,从不返回 0x00。

1 GB SD 更疯狂... CMD0 返回 0x01。很好,但是 CMD55 命令以 0x05 响应。有时它会以 0xC1 响应,有时也会在下一次交互中以 0xF0 响应 0x5F...

网上有资料和例子,但有点混乱。在我的项目中,我必须使用 1 GB 卡,并且我正在尝试使用带有 SD 适配器的 microSD 卡(我认为这不是问题)。

我该如何解决这个问题?

PS:我的问题类似于 Stack Overflow question Initializing SD card in SPI issues 中的问题,但解决方案并没有解决我的问题。1 GB SD 卡永远只返回 0x01... :cry:

4

4 回答 4

2

为什么需要 CMD1?您是否阅读了下面的注释,上面写着“CMD1 是对薄(1.4 毫米)标准尺寸 SD 存储卡的有效命令,只有在重新初始化卡后使用(而不是在上电复位后)。”?

关于 1 GB 卡,想到的想法:

  • 在每个命令(发送命令,获取回复)之后,您是否在使 CS 为高电平之前发送 8 个虚拟字节?
  • 返回的值看起来很奇怪(0x05 没有设置忙位,所以 WTF?),也许是硬件问题?
  • 该卡是否可以正常工作?
于 2010-08-16T10:47:52.213 回答
1

也许这有点帮助: SD Specifications Part 1 Physical LayerSimplified Specification

于 2010-08-04T18:36:58.487 回答
1

但是,该解决方案可能不适用于某些品牌的卡片。对于此类卡,您可能需要编辑过程/库。这可能就是您的 1 GB 卡行为不同的原因——它可能是不同品牌的卡。某些卡的 SPI 模式在商用设备中可能不那么流行,因此某些卡制造商的规范可能会更加偏离。

如果您对命令和时钟进行严格控制,您可能会对这些程序的正确性有更多的控制和信心。这很有用,因为您需要一些坚实的基础来逐步取得进展。我发现 <400 kHz 80 时钟在一张卡上很关键,但在另一张卡上可能以超过 2 MHz 的速度运行。

尝试一次执行一个对两张卡都可靠的命令。

于 2011-05-16T22:54:45.917 回答
1

此处提供了通过 SPI 使用 MMC/SD 的简单说明。我也使用了相关的FAT 文件系统库,它运行良好。

于 2011-05-17T18:50:13.067 回答