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
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