sd-card - SDHC卡SPI初始化

标签 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 时,我发送的命令 ID 为 0x69。这是正确的吗?或者我应该发送 CMD55,然后再发送 CMD1?
  • 1 显示我需要在发送 ACMD41 之后发送 CMD58 和可能的 CMD16。有必要吗?我能够在不执行这些操作的情况下读取有效的 MBR。

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

最佳答案

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

例如,对于命令 ACMD41:

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

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

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

关于sd-card - SDHC卡SPI初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423912/

相关文章:

linux - 我可以/如何强制 micro-SD 卡进行 r/w 安装?

c++ - 如何反转存储在内存地址的位?

filesystems - FAT 文件系统中奇怪的目录条目

c - 如何计算 FAT 文件系统中的 FAT 大小

c - c 语言中数据类型 BYTE、WORD 和 DWORD 的格式说明符?

android - 安全图像存储安卓

android - 如何复用 getExternalStorageState?

android - 从 Android 应用程序发送 SD 命令

android - Android 如何解释 SPI 接收到的输入

linux-kernel - 如何使用单个 SPI 平台驱动程序处理 Linux 内核中的两个 SPI 设备?