I am trying to make an SPI interface on a 186 Microprocessor using bit banging and a GPIO to control the CS, SCLK, MOSI and reading in the MISO lines. Mode 0. I cannot get SDHC (version2) cards to intialise to the ready state. Older SD cards work fine.
So my init sequence is as follows:
- Plug in the SD card into a live socket
- wait ~100ms
- start initialization (CS, MOSI high + send 100 clock)
then every command has the following sequence..
CMD0 (arg:0, crc:0x95) + wait R1 response
8 more clocks
8 more clocks
Same sequence for CMD8 as follows...
(a) For the older SD cards CMD8 gives illegal
Then I send a sequence of CMD01 which initially give an 01h R1 and eventually give 00h -- indicating the card is ready.
(b) For the newer SDHC commands I get ..
CMD8 (arg:0x000001AA, crc:0x87) + wait R1 + arg echo response
- CMD55 (arg:0, crc:0x65) + wait response
- CMD41 (arg:0x40000000, crc:0x77) + wait response
- repeat ACMD41 (CMD55 + CMD41) forever.
The SDHC card never comes ready
I have tried 8GB Sandisk and Transcend SDHC cards-- the result is the same. Am I missing something here? However I suspect the clock signal....
My question is to do with the SCLK signal.
Because it is generated by bit banging, it has an uneven mark-space ratio, that dips below the 100kHz occasionally.
Has anyone successfully used an SDHC card in SPI with a slower than 100kHz clock? Or an uneven mark-space clock.
Unfortunately, it's not that easy for me to improve the clock speed with the bit banging method that I have in the code.
Thanks for any help.