Доброго дня!
Нужен совет по использованию периферийного модуля LPC2478 для работы с SD/MMC картами.
Ситуация такова: используется microSD QUMO 2Gb, карта исправно проходит инициализацию и нормально отвечает на любые команды, но чтение/запись произвести не удаётся. Фактически после посылки CMD17 и перевода модуля на приём получаю MCISTATUS -> RXOVERRUN, при этом MCIFIFOCNT = 0, MCIFIFO0-MCIFIFO15 = 0.
Последовательность инициализации: CMD0 -> ACMD41 -> CMD2 -> CMD3 -> CMD9 -> CMD7 -> ACMD6(на этом этапе включается 4х битный интерфейс) -> CMD16(блок 512 байт) -> CMD17 на этом этапе приходит подтверждение, что команда получена и карта находится в TRANSFER STATE, но вцелом тишина и переполнение очереди в MCISTATUS.
За основу взят популярный пример из состава Keil переложенный в IAR. DMA пока не использую.
CODE
// Чтение одного блока
uint32 MCI_Read_Block(uint32 blockNum)
{
uint32 i;
uint32 DataCtrl = 0;
MCICLEAR = 0x7FF;
MCIDATACTRL = 0;
for (i = 0; i < 0x10; i++);
if (MCI_CheckStatus() != TRUE)
{
MCI_Send_Stop();
return(FALSE);
}
MCIDATATIMER = DATA_TIMER_VALUE;
MCIDATALENGTH = BLOCK_LENGTH;
if (MCI_Send_Read_Block(blockNum) == FALSE)
{
return (FALSE);
}
DataCtrl |= ((1 << 0) | (1 << 1) | (DATA_BLOCK_LEN << 4));
MCIDATACTRL = DataCtrl;
for (i = 0; i < 0x10; i++);
return (TRUE);
}
int main()
{
...
if (MCI_FullCardInitialization())
{
if (MCI_Read_Block(1))
{
while (!(MCISTAUS & MCI_RX_HALF_FULL)) {}; // зацикливает
}
else
{
// fatal error
}
}
}
Сообщение отредактировал LiloQQ - Mar 26 2011, 11:18