0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
|
|
1 | |
SDIO interface for SD card03.05.2012, 15:15. Показов 214785. Ответов 202
Метки нет (Все метки)
Привет всем!
Пришлось создать тему ввиду ее экзотичности на этом форуме. Подключение по SPI уже пора хоронить.)) Кто работал с подключение карт к STM32 по SDIO? Имею вопросы.
0
|
03.05.2012, 15:15 | |
Ответы с готовыми решениями:
202
Cube+Coocox+SD Card (SDIO) Программирование АЦП и ЦАП в MatLab (L-CARD L-780M и L-CARD E14-440) interface conversion: interface is int64, not int32 SDIO+FAT |
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
|
|
13.08.2017, 08:41 | 201 |
Включил прерывания, удалил все задержки, добавил ожидание 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); В новой версии 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
Как насчёт того, чтобы поставить циклы ожидания перед чтением/отправкой? Это хотя бы ускорит запись одиночных крупных блоков. 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 | |
13.08.2017, 10:07 | |
Помогаю со студенческими работами здесь
203
SDIO + SD + STM32F103 SDIO + STM32F429 Миниатюрный МК с SDIO LPC43xx + SDIO SDIO + FAT Sdio vs spi F407 и SDIO Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |