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?

Пожалуйста, предложите мне.

Заранее спасибо.

0 ответов

Другие вопросы по тегам