реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SD карта через SDIO на STM32F4Discovery, странности
hd44780
сообщение Feb 24 2013, 07:05
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



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

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

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

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

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

CODE
// 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-шной ссылке выше.
Датчики разъёма не опрашиваю, плату криво спаял, они оба всегда замкнуты. Но это мелочи - кнопки опрашивать я умею.
Кто-нибудь может сказать, в чём здесь дело?

Спасибо.

Сообщение отредактировал IgorKossak - Feb 24 2013, 11:38
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!

Прикрепленные файлы
Прикрепленный файл  sdio_sd.zip ( 18.86 килобайт ) Кол-во скачиваний: 21
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 27 2013, 12:18
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Многосекторные операции запустил.
Кому интересно - см. http://forum.easyelectronics.ru/viewtopic....=250912#p250912 - подробности.
Сорри за внешний ресурс, но так вышло ....


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 01:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01314 секунд с 7
ELECTRONIX ©2004-2016