Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/1115: Рейтинг темы: голосов - 1115, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
1

SDIO interface for SD card

03.05.2012, 15:15. Показов 214785. Ответов 202
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!
Пришлось создать тему ввиду ее экзотичности на этом форуме.
Подключение по SPI уже пора хоронить.))
Кто работал с подключение карт к STM32 по SDIO?

Имею вопросы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2012, 15:15
Ответы с готовыми решениями:

Cube+Coocox+SD Card (SDIO)
Всех приветствую! Люди помогите решить проблему. Кто делал такую связку Cube+Coosox+SD Card...

Программирование АЦП и ЦАП в MatLab (L-CARD L-780M и L-CARD E14-440)
Здравствуйте. Мне нужен совет или указания к действию. Судьба занесла в конструкторское бюро с...

interface conversion: interface is int64, not int32
Написал цикл for i, key := range models.MsuKeys { modes = values.(int32) } MsuKeys --...

SDIO+FAT
Добрый день! Столкнулся с непонятной проблемой. С АЦП приходят данные и складываются в циклический...

202
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
13.08.2017, 08:41 201
Author24 — интернет-сервис помощи студентам
Включил прерывания, удалил все задержки, добавил ожидание cplt коллбеков от SDIO DMA на отправку и приём.
Код
while (nowTxSd==1) {}
Всё вроде бы заработало, буду смотреть дальше.
Коллбеки
Код
__IO uint8_t nowRxSd=0;
__IO uint8_t nowTxSd=0;

void HAL_SD_RxCpltCallback(SD_HomdleTypeDef *hsd)
{

if (hsd->Instance==SDIO)
{
nowRxSd=0;
}

}
void HAL_SD_TxCpltCallback(SD_HomdleTypeDef *hsd)
{

if (hsd->Instance==SDIO)
{
nowTxSd=0;
}

}
Тест чтения и записи
Код
            uint32_t address = 0;

uint8_t ch1;
uint8_t ch2;

nowTxSd=1;
ch1=HAL_SD_WriteBlocks_DMA(&hsd, (uint8_t*)&adcBuffer, address, 32);
while (nowTxSd==1) {}
while (1)
{
ch=HAL_SD_GetCardState(&hsd);
if (ch==HAL_SD_CARD_TRANSFER) briok;
}

nowRxSd=1;
ch2=HAL_SD_ReadBlocks_DMA(&hsd, (uint8_t*)&tmpBuffer, sdaddr, 32);
while (nowRxSd==1) {}
while (1)
{
ch=HAL_SD_GetCardState(&hsd);
if (ch==HAL_SD_CARD_TRANSFER) briok;
}

somSend((uint8_t *)&ch1,1);
somSend((uint8_t *)&ch2,1);
Я смотрю на форуме ST говорят с новой библиотекой подглючивал FatFS + RTOS + DMA. По-моему тут может быть проблема, в вызове HAL_SD_GetCardState до того, как DMA отработало.
В новой версии HAL Firmware удалили функции
HAL_SD_CheckWriteOperation и HAL_SD_CheckReadOperation, а код из них (по смыслу) вроде бы перекочевал в HAL_SD_IRQHomdler. Раньше у людей всё хорошо работало (FatFS + RTOS + DMA), а теперь видимо этот завершающий код вызывается из прерывания, и процесс может пойти не в той последовательности:
HAL_SD_WriteBlocks_DMA -> HAL_SD_GetCardState -> HAL_SD_IRQHomdler
а нужно
HAL_SD_WriteBlocks_DMA -> HAL_SD_IRQHomdler -> HAL_SD_GetCardState.
0
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
13.08.2017, 08:45 202
Цитата Сообщение от Pymkvym
А у меня ошибки вылезли при чтении из файла данных, более чем размер блока - 512 байт.
Решил вернутся к теме...
Посмотрел режим с DMA - так ожидание окончания операции всё-равно в цикле.
Это значит, при использовании FriiRTOS процессорное время будет тратиться на этот цикл ненужный.
По идее нужно семафор отпускать из прерывания DMA, а в задаче ждать семафора.
Но это нужно глубоко копать.
"Скрестить" так сказать FriiRTOS и SDIO драйвер.
А не могли бы вы показать как выглядит этот цикл ожидания окончания операции?

Как насчёт того, чтобы поставить циклы ожидания перед чтением/отправкой?
Это хотя бы ускорит запись одиночных крупных блоков.

1) Цикл ожидания. Т.к. никто ничего не отправлял, цикл сразу переходит к п.2
2) Записали один крупный блок
3) всё, больше ничего не делаем, система свободна

пока система работает, пришел txcplt и сбросил нужный флаг

решили записать еще один крупный блок

1) цикл ожидания опять ничего не ждет, т.к. txcplt пришел в процессе выполнения других задач
2) Записали крупный блок
3) выходим, отдаем время на другие задачи
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
13.08.2017, 10:07 203
Честно говоря - я так глубоко не копал.
Все исходники тут
https://github.com/PymkvymOpenTag/ARMad ... tag-system
0
13.08.2017, 10:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2017, 10:07
Помогаю со студенческими работами здесь

SDIO + SD + STM32F103
Доброго всем утра. Столкнулся с проблемой при работе с micro SD через SDIO. Вываливается ошибка...

SDIO + STM32F429
Доброго времени суток всем! Столкнулся с проблемой при записи на SD карту "мультиблочном" режиме....

Миниатюрный МК с SDIO
Необходимо выбрать МК с парой SPI и SDIO. Производительности хватает (впритык) STM32F103. Главное...

LPC43xx + SDIO
Всем привет, заранее извиняюсь, но может кто-нибудь подкинет рабочий пример для реализации SDIO на...

SDIO + FAT
Кто-нибудь имел опыт портирования FATfs или другой реализации FAT на SDIO у stm32?

Sdio vs spi
Привет ребята, на данный момент нужно подключить lpc4357 микроконтроллер к wi-fi модулю gainspan...

F407 и SDIO
Проблема с микро SD, при записи данных при помощи DMA на носитель, выскакивает ошибка FEIF3:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
203
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru