我正在尝试使用 SPI 总线和 STM32F4 探索板初始化 SD 卡。我主要依靠 Elm Chan 对示例代码中的 disk_initialize 函数的实现来建立自己的实现。不幸的是,我遇到了一个问题,在初始化过程中向 SD 卡发送 CMD58 返回结果为 0x01,这意味着 SD 卡处于空闲状态。但是,我仍然看到 SD 卡中接下来的四个字节为 0x00、0xFF、0x80、0x00,这是 R3 响应的正确格式。但是,我不确定是否可以信任这四个字节作为我的 OCR。
到目前为止,我已经尝试忽略 SD 卡处于空闲状态,而只是尝试使用接下来的四个字节作为 OCR,但在安装过程中,对于假设的卡类型,代码似乎在其他点失败OCR。
if (Timer1 && SD_SendCmd(CMD58, 0) == 0) {
for (n = 0; n < 4; n++) {
ocr[n] = SPI_RxByte();
}
type = (ocr[0] & 0x40) ? 6 : 2;
}
上面的代码段是我第一次看到空闲响应的地方。SD_SendCmd 是我将 CMD58 发送到 SD 卡的位置,并且我在其中接收 0x01 作为五字节响应的最左侧字节。因为我没有收到 0x00,这表明 SD 卡传递给它的命令没有问题,所以代码会中断初始化过程并返回错误。我将非常感谢您对此事的任何帮助,因为我已经被这个 0x01 返回值困扰了很长一段时间了。谢谢!