I am working on a project to read files off of SD cards with an xmega128a4u via SPI. I noticed that some cards initialize without an issue. However, I have two cards that just wont.
As far as I can tell, I am using the prescribed method of initialization for SPI communication:
- Assert the CS line
- Send at least 74 clock pulses (I's sending 80) at 100kHz to 400kHz (I'm at roughly 250kHz).
- Deassert the CS line
- Send CMD0 with 0x00000000 as the arg and 0x95 as the CRC
- Wait for a 0x01 response (or something other than 0xFF).
I have 5 Micro SD cards: 2 x 2GB, 1 x 4GB, 1 x 16GB, and 1 x64GB. I am having issues with only the 2GB cards (they are the same brand). Both never return anything but 0xFF. Even if I retry multiple times or poll indefinitely for something other than 0xFF.
I have ensured that they are FAT formatted and do work in multiple other devices. I have also verified, via a scope and a logic analyzer, that the expected signals are being sent with the right timing.
So the question is why? Is there a possibility that these cards just will not work with SPI? Or maybe there's another slightly different process to try with some cards?
Any info would help. P.S., I'm not using FatFs (or Petit) because I need something event further stripped down a purposefully made, and I'm also trying to learn.