执行硬件重置后,使用SPI初始化SanDisk SD卡失败

时间:2015-11-26 15:22:18

标签: embedded stm32 spi

我正在使用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卡则不然。

有什么建议可以解决吗?

1 个答案:

答案 0 :(得分:0)

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