我正在使用SPI微控制器来连接使用STM32外设的SD卡存储器。我用2 2Gb、4 2Gb、8 2Gb和16 2Gb的SanDisk卡做了测试。当我对2 2Gb和8 2Gb的卡执行重置时,什么都没有发生,并且我继续我的测试。但是,对于4 4Gb和16 4Gb,一旦执行重置,初始化就会失败。事实上,在第一次插入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);使用此解决方案,只需几次重置测试即可通过初始化。但是,在任何时候它都可能失败,这与2 2Gb和8 2Gb卡的情况不同。
有什么建议可以解决吗??
发布于 2017-10-12 13:14:44
我的24 GB SanDisk SD卡也面临着同样的问题。据我所知,也许SD卡一旦在SPI模式下初始化就不再接受CMD0 (这是软件重置命令!),让它们恢复到初始状态的唯一方法就是执行它们的电源循环。
https://stackoverflow.com/questions/33942079
复制相似问题