SDHC卡SPI初始化

时间:2011-06-21 10:35:49

标签: sd-card spi fat

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

所以我正在做的是初始化卡片:

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

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

  • 发送ACMD41时,我发送的命令号为0x69。这是对的吗?或者我应该发送CMD55然后发送CMD1?
  • 图表 1 表示我需要在发送ACMD41后发送CMD58和可能的CMD16。有必要吗?我能够在没有这样做的情况下阅读有效的MBR。

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

1 个答案:

答案 0 :(得分:2)

“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卡是一种痛苦,所以不要放弃。祝你好运!