我看到很多关于MMC / SD卡的信息,我试图建立一个库来读取它(修改Procyon AVRlib)。
但我在这里遇到了一些问题。我没有更改原始代码并在此处尝试过。我的问题是关于SD卡的初始化。我这里有两个,256 MB,另一个1 GB。
我按以下顺序发送init命令: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问题 Initializing SD card in SPI issues 中的问题,但解决方案并没有解决我的问题。 1 GB SD卡只返回0x01 ......:cry:
答案 0 :(得分:2)
为什么需要CMD1?你是否阅读了下面的说明,其中说“只有在重新初始化卡后使用(不是在上电复位后),CMD1才是薄(1.4 mm)标准尺寸SD存储卡的有效命令。”?
关于1 GB卡,想到的想法:
答案 1 :(得分:1)
答案 2 :(得分:1)
但是,该解决方案可能不适用于某些品牌的卡片。对于此类卡,您可能必须编辑过程/库。这可能就是为什么你的1 GB卡的行为不同 - 它可能是一张不同的卡片。某些卡的SPI模式可能不是商业设备的流行模式,因此某些卡制造商可能会更加偏离规范。
如果您点击命令和时钟,您可能会更有控制力并确信这些程序是正确的。这很有用,因为你需要一些坚实的基础来逐步推进。我发现< 400 kHz 80时钟在一张卡上是至关重要的,但在另一张卡上可能超过2 MHz。
尝试在两张卡都可靠的时间进行一个命令。
答案 3 :(得分:1)
提供了关于通过SPI的MMC / SD使用的简单解释here。我也使用了相关的FAT file-system library并且效果很好。