PIC16F877A : SD SPI write failing

Thread Starter

sanelectro

Joined Sep 26, 2008
2
Hello folks,

I am using PIC16F877A with SD card.
SPI init is successful.
But while writing data, I am not getting expected output.

short SD_writeSingleBlock(unsigned long addr)
{
short resp = 0;
unsigned int i, retry=0;

if(Command(24,addr,0,0)) //check for SD status: 0x00 - OK (No flags set)
{
SD_CS_ASSERT;
spi_write(0xfe); //Send start block token 0xfe (0x11111110)

for(i=0; i<512; i++) //send 512 bytes data
spi_write((short)'B');

spi_write(0xff); //transmit dummy CRC (16-bit), CRC is ignored here
spi_write(0xff);

spi_read();
disp(readdata);
spi_read();
disp(readdata);
spi_read();
disp(readdata); // Getting error here -> I am getting 193 as response
if((readdata & 0x1f) != 0x05) //readdata= 0xXXX0AAA1 ; AAA='010' - data accepted
{ //AAA='101'-data rejected due to CRC error
SD_CS_DEASSERT; //AAA='110'-data rejected due to write error
return 0;
}


//wait for SD card to complete writing and get idle
retry = 0;
do
{
spi_read();
//disp(readdata);
}while(readdata!=0xFF && retry++ < MaxTries);

if(readdata!=0xFF && retry == MaxTries)
{
SD_CS_DEASSERT;
return 0;
}

SD_CS_DEASSERT;
spi_write(0xff); //just spend 8 clock cycle delay before reasserting the CS line
SD_CS_ASSERT; //re-asserting the CS line to verify if card is still busy

//wait for SD card to complete writing and get idle
retry = 0;
do
{
spi_read();
//disp(readdata);
}while(readdata!=0xFF && retry++ < MaxTries);
if(readdata!=0xFF && retry == MaxTries)
{
SD_CS_DEASSERT;
return 0;
}

resp = 1;
}

return resp;
}


Response output:
255
255
193


Can you please tell me what is the issue?


Thanks in advance
 
Top