16 ГБ SDHC - проблема ответа на запись данных SPI CMD24
Я использую PIC16F877A с SD-картой. Инициализация SPI прошла успешно. (SD-карта правильно ответила за CMD0, CMD8, ACMD41) Но во время записи данных я не получаю ожидаемого вывода. Ниже приведен код, который я использую для записи данных.
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
spi_read();
disp(readdata); // Getting error here -> I am getting 63 as response
/*
readdata= 0xXXX0AAA1 ;
AAA='010' - data accepted
AAA='101'-data rejected due to CRC error
AAA='110'-data rejected due to write error
*/
if((readdata & 0x1f) != 0x05)
{
SD_CS_DEASSERT;
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
resp = 1;
}
return resp;
}
Response output:
255
255
193
63
Если я уберу условие для проверки принятых данных, оно продолжит отображать 255 и правильно записать данные на SD. Но мой вопрос, почему данные принимаются ответ не приходит с SD-карты.
Это связано с кодом? или это связано с SDHC?
Пожалуйста, предложите мне.
Заранее спасибо.