【问题标题】:SDHC card SPI initialisationSDHC卡SPI初始化
【发布时间】:2011-09-19 09:59:19
【问题描述】:

我正在开发一个目前仅支持 SDSC v1 卡的嵌入式系统。由于越来越难找到小于 2 GB 的卡,我正在尝试添加对 SDHC 卡的支持。与卡的通信是通过 SPI 总线完成的。

这就是我初始化卡的方法:

  • 发送 CMD0。卡返回 0x1
  • 发送 CMD8 + 0x1AA。卡返回 0x1 和 0x1AA
  • 发送 ACMD41。卡返回 0x0。

之后,我阅读了MBR 并发现在 0x30 LBA 处有一个 FAT16 分区。但是,从该地址(0x30*512)读取扇区会返回重复的 0x01 0x09...

  • 发送 ACMD41 时,我发送的命令 ID 为 0x69。这是正确的吗?还是应该先发送 CMD55,然后再发送 CMD1?
  • 图表 1 显示我需要在发送 ACMD41 后发送 CMD58 和可能的 CMD16。有必要吗?我能够在不执行这些操作的情况下读取有效的 MBR。

1。 http://elm-chan.org/docs/mmc/mmc_e.html

【问题讨论】:

  • 我想提一下this question,这是相关的。我添加了一些关于使用 ACMD41 选择电压的信息,我认为了解这些信息很重要,以便让您的代码适用于更多卡。

标签: sd-card spi fat


【解决方案1】:

“ACMD”命令都需要 CMD55 后跟相关命令。

例如,对于命令 ACMD41:

SD_command(55, 0, 0, 0, 0, 0xFF);
n= SD_command(41, SD2<<6 , 0, 0, 0, 0xFF);

不要忘记在 0b01000000 中对第一个参数进行 OR。实际命令不是 55,而是 55|0b010000000b01110111,十进制 119)。我在 SD_command 函数本身中执行此操作。

连接到 SD 卡是一件非常痛苦的事情,所以不要放弃。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 2023-03-07
    • 1970-01-01
    • 2021-12-02
    • 2017-08-15
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多