我正在使用STM32微控制器通过SPI外设与SD卡进行接口交互。我已经测试了2GB、4GB、8GB和16GB的SanDisk卡。当我对2GB和8GB的卡进行重置时,没有任何反应,我可以继续我的测试。然而,对于4GB和16GB的卡,在执行重置后初始化失败。事实上,在SD插槽中首次插入这些卡时,它们被很好地初始化,但一旦我执行重置,就无法通过。
当我尝试调试此问题时,我发现在处理重置时,对CMD0命令的响应是错误的。我得到的是0x00而不是0x01,这意味着我的卡不处于空闲状态。
我认为问题是由于CS线的时间问题导致的。因此,我尝试在发送CMD0命令之前去除CS并发送虚拟字节,以使卡等待8个时钟周期。然后,我发送CMD0并将CS线断言为高电平。(见下文)
使用这种解决方案,初始化在进行了几次重置测试后通过了。但是,它在任何时候都可能失败,而2Gb和8Gb卡则不会出现这种情况。
有什么建议可以解决这个问题吗?
当我尝试调试此问题时,我发现在处理重置时,对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卡则不会出现这种情况。
有什么建议可以解决这个问题吗?