levshkatov Опубликовано 14 апреля, 2017 Поделиться Опубликовано 14 апреля, 2017 Подключаю microSD карточку к stmf4 используя FatFs. Инициализирую SDIO: static void MX_SDIO_SD_Init(void) { hsd.Instance = SDIO; hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; hsd.Init.BusWide = SDIO_BUS_WIDE_4B; hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hsd.Init.ClockDiv = 3; } Успешно привязываю драйвер: FATFS_LinkDriver(&SD_Driver, SDPath) А дальше не могу пройти вот этот этап: f_mount(&fsFileSystem, (TCHAR const*)SDPath, 1) Программа доходит до выполнения функции SD_CmdError(*hsd), пытается считать флаг SDIO_FLAG_CMDSENT в течение 0xFFFF таймаута и по его истечении выкидывает ошибку. static HAL_SD_ErrorTypedef SD_CmdError(SD_HandleTypeDef *hsd) { HAL_SD_ErrorTypedef errorstate = SD_OK; uint32_t timeout, tmp; timeout = SDIO_CMD0TIMEOUT; tmp = __HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_CMDSENT); while((timeout > 0U) && (!tmp)) { tmp = __HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_CMDSENT); timeout--; } if(timeout == 0U) { errorstate = SD_CMD_RSP_TIMEOUT; return errorstate; } /* Clear all the static flags */ __HAL_SD_SDIO_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); return errorstate; } Физически карта вроде бы нормально подключена, pull-up резисторы на линиях данных и на CMD. CLK напрямую к МК. На что стоит грешить? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.