I'm attempting to interface to an SD card using an AT89S8252 MCU. I'm using an 74LS125 to convert between 5V and 3.3V. The hardware seems to be ok since I *do* get a response from the card but I'm having problems initializing the card in SPI mode.
I am sending 96 clock cycles initially and then I send a CMD0. Everything I've read suggests that CMD0 should initially respond with
0x01 at which point I can issue CMD1 to take the card out of idle mode. Sometimes this works. But most of the time it doesn't work.I usually get 0xFC back from the card and it never returns another value until I eject the card and re-insert it. At that point CMD0 returns 0x03 and never goes to 0x01. Sometimes I find that if I insert the card into an SD card reader I have and then reinsert it into my hardware that the card works as expected (CMD0 returns 0x01, I then issue CMD1 which returns 0x01 for awhile and then returns 0x00).
The 0x03 response to CMD0 suggests to me it is in idle mode and reporting an "erase/reset" error. I've been unable to determine what exactly that means.
At this point I'm running out of ideas of what I could be doing wrong. I've looked at some code that was written for Atmel AVRs and it appears I'm doing the same thing. And like I said sometimes it works. But most of the time it seems the card is in some kind of strange state that I can't get it out of.
If anyone has any ideas I would be very interested in some suggestions. Thanks, Craig