【问题标题】:Initializating SanDisk SD card using SPI fails after doing HW reset硬件重置后使用 SPI 初始化闪迪 SD 卡失败
【发布时间】:2016-02-29 18:03:31
【问题描述】:

我正在使用 STM32 微控制器通过 SPI 外设连接 SD 卡存储器。 我已经用 2Gb 、 4Gb 、 8Gb 和 16Gb SanDisk 卡进行了测试。 当我使用 2Gb 和 8Gb 卡执行重置时,没有任何反应,我继续进行测试。但是,对于 4Gb 和 16Gb,一旦执行重置,初始化就会失败。事实上,在第一次插入 SD 插槽时,这些卡已经很好地初始化了,但是我执行了重置它并没有通过。

当我尝试调试这个问题时,我发现在处理重置时对命令 CMD0 的响应是错误的。我得到 0x00 而不是 0x01,这意味着我的卡没有处于空闲状态。

我认为问题是由于 CS 线的时间问题。因此,我尝试在发送 CMD0 命令和发送虚拟字节之前取消断言 CS,以使卡等待 8 个时钟周期。然后,我发送 CMD0 并将 CS 线断言为高电平。 (见下文)

SD_IO_CSState(0);
SD_IO_WriteByte(SD_DUMMY_BYTE);
response = SD_SendCmd(SD_CMD_GO_IDLE_STATE, 0, 0x95, SD_ANSWER_R1_EXPECTED);
SD_IO_CSState(1);
SD_IO_WriteByte(SD_DUMMY_BYTE);

使用此解决方案,初始化在几次重置测试后通过。但是,任何时候它都可能失败,而 2Gb 和 8Gb 卡则不会。

有什么解决办法吗??

【问题讨论】:

  • 我注意到 SanDisk 的 32 GB microSD 卡在完成数据流以响应“读取块”或“写入块”命令之前无法正确响应 CMD0。只有在从 SD 卡的最后一个字节发送后,我才会在 CMD0 之后收到预期的 0x01。 Transcend(全尺寸卡)的8 GB没有这样的问题。

标签: embedded stm32 spi


【解决方案1】:

我的 24 GB SanDisk SD 卡也面临同样的问题。我所了解到的是,一旦在 SPI 模式下初始化的 SD 卡可能不再接受 CMD0(这是软件重置命令!),将它们恢复到初始状态的唯一方法是执行它们的电源循环。

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 2021-12-02
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多