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

Embedded 在执行硬件重置后,使用SPI初始化SanDisk SD卡失败,embedded,stm32,spi,Embedded,Stm32,Spi,我正在使用STM32微控制器与使用SPI外围设备的SD卡内存接口。 我用2Gb、4Gb、8Gb和16Gb磁盘卡进行了测试。 当我使用2Gb和8Gb卡执行重置时,什么也没发生,我继续进行测试。但是,对于4Gb和16Gb,一旦执行重置,初始化就会失败。事实上,在SD插槽中的第一次插入时,这些卡的初始化效果相当好,但我执行的重置没有通过 当我试图调试此问题时,我发现在处理重置时,对命令CMD0的响应是错误的。我得到的是0x00而不是0x01,这意味着我的卡没有处于空闲状态 我认为问题是由于CS线路的时

我正在使用STM32微控制器与使用SPI外围设备的SD卡内存接口。 我用2Gb、4Gb、8Gb和16Gb磁盘卡进行了测试。 当我使用2Gb和8Gb卡执行重置时,什么也没发生,我继续进行测试。但是,对于4Gb和16Gb,一旦执行重置,初始化就会失败。事实上,在SD插槽中的第一次插入时,这些卡的初始化效果相当好,但我执行的重置没有通过

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

我认为问题是由于CS线路的时间问题造成的。因此,我尝试在发送CMD0命令和发送伪字节之前取消断言CS,以便使卡等待8次关闭。然后,我发送CMD0并将CS行断言为High。(见下文)

使用此解决方案,初始化在几次重置测试后通过。但是,在任何时候它都可能出现故障,2Gb和8Gb卡的情况并非如此


有什么建议可以解决吗?

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

我注意到,来自SanDisk的32 GB microSD卡在响应“读取块”或“写入块”命令完成其数据流之前无法正确响应CMD0。仅当在SD卡的最后一个字节之后发送时,我才在CMD0之后收到预期的0x01。超越(全尺寸卡)的8 GB不会出现此类问题。
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);