Выловил ошибку в схеме - не подтянутую линию CMD.
Пример компилируется и под Windows, успешно детектируется и SD читается/пишется.
Нашел пример
https://bitbucket.org/antlabs_dev/fatfs-sd-stm32f103/src
В примере в файле sdcard.c зависает функция переключения ширины шины: SD_EnableWideBusOperation(SDIO_BusWide_4b); точнее FindSCR(RCA, scr);
Карточка не выходит на готовность.
В примере USB Mass Storage переключение на 4 битную шину происходит в файле sd_card_mode.c
Код
if(DiskMMC != _SdDskCtrlBlk.DiskType)
{
// Use wide bus for SD
res = _CardRCA;
if((_SdSendCmd(CMD55,&res) != SdOk) ||
!(res & 0x100))
{
return(SdCardError);
}
// Set bus width 4bits
res = 2;
if(_SdSendCmd(ACMD6,&res) != SdOk)
{
return(SdCardError);
}
SDIO->CLKCR |= 1UL << 11;
}
{
// Use wide bus for SD
res = _CardRCA;
if((_SdSendCmd(CMD55,&res) != SdOk) ||
!(res & 0x100))
{
return(SdCardError);
}
// Set bus width 4bits
res = 2;
if(_SdSendCmd(ACMD6,&res) != SdOk)
{
return(SdCardError);
}
SDIO->CLKCR |= 1UL << 11;
}
По отладчику видно что функция переключение происходит успешно.
Пробовал в примере от bitbucket убирать переключение на 4 битную шину.
DMA не завершает операцию.
Подтягивать все выводы интерфейса как-то не хочеться.
Ведь проект USB Mass Storage работает.
Может есть гдето заведомо рабочий проект под FatFs с SD для STM32F103?