Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MCI FIFO LPC2478
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
haker_fox
Добрый день!

SDHC карта на CMD17 отправляет сектор (он фиксирован и равен 512 байт). Вычитываю регистр MCI_FIFO в прерывании RxFifoHalfFull. Более 64 байт не читается. Все остальные - нули.

Читал в DMA, теперь читаю в рукопашную (вроде у DMA в свзяке с MCI есть баг). Результат один. Сектор считан в WinHEX. Совпадают только 64 байта...

Смущает, что FIFO в MCI не одним регистром сделан, а имеет 16 последовательно расположенных адресов. В USART тоже FIFO, но там физически один регистр для чтения и записи. Почему здесь отличие?

Я его как-то непрвильно считываю? Получается совпадение: 16 регистров FIFO по 4 байта (32 бита) как раз равно 64 байтам.

Читаю FIFO так
CODE
// RxFifoHalfFull ISR
for( int i = 0; i < 8; i++ )
{
    uint32_t val = MCI_FIFO;
    // Здесь уже val побайтно раскидываю в байтовый буфер (сектор 512 байт)
}


Можно сказать, что проц не успевает, что я неправильно читаю FIFO. Но как я уже сказал, читал и DMA и вручную. Результат стаблильно один...

Есть идеи, коллеги? rolleyes.gif

Уже замаялся... В errata ошибок по MCI | DMA нет...

Спасибо, товарищи! rolleyes.gif
haker_fox
Блин, банальный RxOverrun. Почему-то забывал проверить флаг статуса. Понизил частоту карты до 400 КГц (для теста, пока DMA еще не освоил полностью) и принял сектор...

Мораль: проверяем все все все ошибки, статусы...)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.