Перейти к содержанию
    

SD карта через SDIO на STM32F4Discovery

Здравствуйте, уважаемые :rolleyes:

 

Вот пытаюсь запустить :(

Все инициализации, размер карты (CSD) - всегда без проблем.

 

Использую драйвер, взятый отсюда

 

Его исходник приложил. Модификации, проведенные мною в нём - добавил в него все функции низкоуровневой инициализации, типа SD_LowLevel_DMA_RxConfig. В той ссылке оно разбросано по разным файлам.

 

Вот почитал инструкции в sdio_sd.c, немного поэкспериментировал.

Получился код:

 

  // Init SD card
 sdErr = SD_Init ( );
................

// SDIO Interrupt ENABLE
NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init ( &NVIC_InitStructure );

// DMA2 STREAMx Interrupt ENABLE
NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_Init ( &NVIC_InitStructure );

  sdErr = SD_ReadMultiBlocks ( sectorBuffer, i, 512, 1 );
  sdErr = SD_WaitReadOperation ( );
  while ( 1 )
  {
	state = SD_GetStatus();

	if ( state == SD_TRANSFER_OK )
	  break;
  } // while
........................

void SDIO_IRQHandler(void)
{
//  SD_ProcessIRQ();  -- это в инструкции, но такой функции нет
 SD_ProcessIRQSrc ( );
}

void SD_SDIO_DMA_IRQHANDLER(void)
{
 SD_ProcessDMAIRQ();
}

 

Все инициализации, размер карты (CSD) проходят всегда без проблем.

 

Проблема в следующем.

0-й сектор (MBR) всегда читается идеально, оба прерывания вызываются и отрабатывают.

 

На всех других секторах прерываний нету, SD_WaitReadOperation висит во внутреннем цикле (смотрел отладчиком):

 

  while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
  {
    timeout--;
  }

 

Т.е. флаги не сброшены - прямое следствие неотработавших прерываний DMA.

 

От номера сектора никак не зависит. Единственное исключение - MBR.

Соответственно и FatFs сразу обламывается и прочие гадости.

 

Пробовал 2 SD карты, одна 32МБ "демка" от фотоаппарата Canon, 2-я 4ГБ Transcend (не SDHC!!) - одинаково.

Монтаж - на проводках, примерно такой же, как и в ST-шной ссылке выше.

Датчики разъёма не опрашиваю, плату криво спаял, они оба всегда замкнуты. Но это мелочи - кнопки опрашивать я умею.

Кто-нибудь может сказать, в чём здесь дело?

 

Спасибо.

sdio_sd.zip

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Многосекторные операции запустил.

Кому интересно - см. http://forum.easyelectronics.ru/viewtopic....=250912#p250912 - подробности.

Сорри за внешний ресурс, но так вышло ....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...