Цитата(Genadi Zawidowski @ Jan 23 2013, 20:11)

В карту при этом должны вдвигаться все "1" по SPI.
не понял насчёт выдвигания "1" по SPI. Поясните, если нетрудно.
Привожу функцию чтения сектора. Что и где надо добавить?
Мучаюсь уже второй день (((
CODE
unsigned char SD_readSingleBlock(unsigned long startBlock)
{
unsigned char response;
unsigned int i, retry=0;
//передаём в карту байты 0xFF до тех пор , пока карта не начнёт
//отвечать 0xFF, т.е. будет свободна
while(1)
{
if(SPI_transmit(0xFF)==0xff)
break;
}
// эта команда выполнятеся корректно - ответ 0x00
response = SD_sendCommand(READ_SINGLE_BLOCK, startBlock<<9); //read a Block command
//block address converted to starting address of 512 byte Block
if(response != 0x00) //check for SD status: 0x00 - OK (No flags set)
return response;
SD_CS_ASSERT; // CS опускаем в ноль
// а вот тут маркера так и не поступает
while(SPI_receive() != 0xfe) //wait for start block token 0xfe (0x11111110)
if(retry++ > 0xfffe){SD_CS_DEASSERT;
return 1;} //return if time-out
for(i=0; i<512; i++) //read 512 bytes
buffer[i] = SPI_receive();
SPI_receive(); //receive incoming CRC (16-bit), CRC is ignored here
SPI_receive();
SPI_receive(); //extra 8 clock pulses
SD_CS_DEASSERT;
return 0;
}
Сообщение отредактировал IgorKossak - Jan 24 2013, 12:25
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!