SDIO con descubrimiento STM32F4

1

Estoy probando un ejemplo sobre SDIO con la placa Open407V-D. Tengo problemas con la tarjeta SD de reinicio (CMD0). Cuando se comprueba el estado para enviar CMD0, el bit 11 (CMDACT) del registro de estado siempre se establece 1. Por lo tanto, se produce un tiempo de espera. ¿Cómo solucionar estos problemas?

 /* CMD0: GO_IDLE_STATE -------------------------------------------------------*/
 /* No CMD response required */
 SDIO_CmdInitStructure.SDIO_Argument = 0x0;
 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_GO_IDLE_STATE;
 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_No;
 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
 SDIO_SendCommand(&SDIO_CmdInitStructure);

 errorstatus = CmdError();

 if (errorstatus != SD_OK)
 {
    /* CMD Response TimeOut (wait for CMDSENT flag) */
    return(errorstatus);
 }


 //-------------------checke timeout--------------------//
 static SD_Error CmdError(void)
 {
   SD_Error errorstatus = SD_OK;
   uint32_t timeout;

   timeout = SDIO_CMD0TIMEOUT; /* 10000 */

   while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET))
 {
   timeout--;
 }

 if (timeout == 0)
 {
    errorstatus = SD_CMD_RSP_TIMEOUT;
    return(errorstatus);
 }

 /* Clear all the static flags */
 SDIO_ClearFlag(SDIO_STATIC_FLAGS);

 return(errorstatus);
 }
    
pregunta ios198

1 respuesta

2

Tuve el mismo problema, encontré una posibilidad en el foro de STM, no funcionó para mí, pero tal vez lo sea para ti. La respuesta fue: "pero agregué en unos pocos milisegundos retrasos alrededor de la fase de inicio SD, y eso pareció solucionar el problema".

Más tarde solucioné mi problema, no se configuró el indicador HSEON en el registro RCC y, debido a eso, el reloj PLL no pudo iniciarse. Sin el PLL, el SDIO no tiene reloj y, por lo tanto, no puede funcionar. He publicado todos mis pasos en el STM32 foro

    
respondido por el MattJ

Lea otras preguntas en las etiquetas