Gast
#3213994
Hallo Zusammen.
Bin ratlos, versuche seit Tagen ein Fehler in der Anbindung einer SD-
Karte mit Chans Lib zu finden. Die Karte ist über SDIO angebunden und
laut Oszi auch ok. die Initialisierung läuft bei einer Karte 2G fast
durch jedoch bei errorstatus =
SD_EnableWideBusOperation(SDIO_BusWide_4b);
erhalte ich einen Fehler SD_LOCK_UNLOCK_FAILED.
Habe schon alles kontrolliert den Takt Quarz 8 Mhz PLL_M 8 PLL_N 336
PLL_Q 7 damit ergibt sich ein Takt von 48 Mhz.
Pullup 47K Versorgung 100N
Hat evtl jemand einen Tip.
//==============================================================
// Init der SD-Karte
// -> die restliche Initialisierung (GPIO,NVIC)
// muss schon gemacht sein
//==============================================================
SD_Error SD_Init(void)
{
__IO SD_Error errorstatus = SD_OK;
SDIO_DeInit();
/*!< CMD Response TimeOut (wait for CMDSENT flag) */
errorstatus = SD_PowerON();
if (errorstatus != SD_OK) {return(errorstatus);}
/*!< CMD Response TimeOut (wait for CMDSENT flag) */
errorstatus = SD_InitializeCards();
if (errorstatus != SD_OK) {return(errorstatus);}
// Einstellen der SDIO Peripherie
// SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) SDIO_CK=48 Mhz / 118 +2
= 400 Khz
// STM32F4xx SDIOCLK ist Eingestellt auf to 48MHz Externer Quarz HSE=8
Mhz PLL_M=8 PLL_N=336 PLL_Q=7
// SDIO_CK sollte 400 KHz nicht überschreiten
SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
SDIO_InitStructure.SDIO_ClockPowerSave =
SDIO_ClockPowerSave_Disable;
SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
SDIO_InitStructure.SDIO_HardwareFlowControl =
SDIO_HardwareFlowControl_Disable;
SDIO_Init(&SDIO_InitStructure);
// Lese CSD/CID MSD Register
errorstatus = SD_GetCardInfo(&SDCardInfo);
if (errorstatus == SD_OK) {errorstatus = SD_SelectDeselect((uint32_t)
(SDCardInfo.RCA << 16));}
if (errorstatus == SD_OK)
{
errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b);
}
return(errorstatus);
}