2015-11-26 62 views
3

我正在使用STM32微控制器来使用SPI外设连接SD卡存储器。 我已经完成了2Gb,4Gb,8Gb和16Gb SanDisk卡的测试。 当我使用2Gb和8Gb卡进行重置时,没有任何反应,我继续进行测试。但是,对于4Gb和16Gb,一旦执行初始化初始化失败。实际上,在SD插槽中的第一个插件中,这些卡的初始化效果相当不错,但是我执行的重置不会通过。初始化使用SPI的SanDisk SD卡在执行硬件复位后失败

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

我认为问题是由于CS线的时间问题。所以,我试图在发送CMD0命令并发送虚拟字节以使卡等待8个周期之前解除CS的断言。然后,我发送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卡的情况并非如此。

任何建议来解决它?

回答

0

我也面对与我的24 GB SanDisk SD卡完全相同的问题。我所学到的是,也许SD卡在SPI模式下初始化后不再接受CMD0(这是软件复位命令!),将它们恢复到初始状态的唯一方法是执行其重新启动循环。