diff --git a/stm32cube/stm32h5xx/README b/stm32cube/stm32h5xx/README index 34f74df95..cfdf6a9a2 100644 --- a/stm32cube/stm32h5xx/README +++ b/stm32cube/stm32h5xx/README @@ -61,4 +61,10 @@ Patch List: Impacted files: drivers/include/Legacy/stm32_hal_legacy.h + *Fix SDIO initialization failure when skipping card identification sequence + Fixes an issue in the STM32H5 SDIO driver where HAL_SDIO_Init() fails if + the card identification sequence is skipped. + Impacted files: + stm32cube/stm32h5xx/drivers/src/stm32h5xx_hal_sdio.c + See release_note.html from STM32Cube diff --git a/stm32cube/stm32h5xx/drivers/src/stm32h5xx_hal_sdio.c b/stm32cube/stm32h5xx/drivers/src/stm32h5xx_hal_sdio.c index b0d2bd1ac..782099845 100644 --- a/stm32cube/stm32h5xx/drivers/src/stm32h5xx_hal_sdio.c +++ b/stm32cube/stm32h5xx/drivers/src/stm32h5xx_hal_sdio.c @@ -314,7 +314,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) { SDIO_InitTypeDef Init; uint32_t sdmmc_clk = 0U; - uint8_t data; /* Check the parameters */ assert_param(hsdio != NULL); @@ -407,12 +406,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) Init.ClockDiv = hsdio->Init.ClockDiv; (void)SDMMC_Init(hsdio->Instance, Init); - data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; - if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) - { - return HAL_ERROR; - } - hsdio->Context = SDIO_CONTEXT_NONE; hsdio->State = HAL_SDIO_STATE_READY; @@ -2507,6 +2500,7 @@ HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, */ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) { + uint8_t data; uint32_t errorstate; uint32_t timeout = 0U; uint16_t sdio_rca = 1U; @@ -2581,6 +2575,12 @@ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) return HAL_ERROR; } + data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; + if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) + { + return HAL_ERROR; + } + return HAL_OK; } diff --git a/stm32cube/stm32h7rsxx/README b/stm32cube/stm32h7rsxx/README index 4e2cb35a6..2ba0203a1 100644 --- a/stm32cube/stm32h7rsxx/README +++ b/stm32cube/stm32h7rsxx/README @@ -48,4 +48,10 @@ Patch List: Impacted files: drivers/include/Legacy/stm32_hal_legacy.h + *Fix SDIO initialization failure when skipping card identification sequence + Fixes an issue in the STM32H7RS SDIO driver where HAL_SDIO_Init() fails if + the card identification sequence is skipped. + Impacted files: + stm32cube/stm32h7rsxx/drivers/src/stm32h7rsxx_hal_sdio.c + See release_note.html from STM32Cube diff --git a/stm32cube/stm32h7rsxx/drivers/src/stm32h7rsxx_hal_sdio.c b/stm32cube/stm32h7rsxx/drivers/src/stm32h7rsxx_hal_sdio.c index fd8fc4b99..3c4f22b13 100644 --- a/stm32cube/stm32h7rsxx/drivers/src/stm32h7rsxx_hal_sdio.c +++ b/stm32cube/stm32h7rsxx/drivers/src/stm32h7rsxx_hal_sdio.c @@ -314,7 +314,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) { SDIO_InitTypeDef Init = {0U}; uint32_t sdmmc_clk; - uint8_t data; /* Check the parameters */ assert_param(hsdio != NULL); @@ -405,12 +404,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) Init.ClockDiv = hsdio->Init.ClockDiv; (void)SDMMC_Init(hsdio->Instance, Init); - data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; - if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) - { - return HAL_ERROR; - } - hsdio->Context = SDIO_CONTEXT_NONE; hsdio->State = HAL_SDIO_STATE_READY; @@ -2494,6 +2487,7 @@ HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, */ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) { + uint8_t data; uint32_t errorstate; uint32_t timeout = 0U; uint16_t sdio_rca = 1U; @@ -2568,6 +2562,12 @@ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) return HAL_ERROR; } + data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; + if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) + { + return HAL_ERROR; + } + return HAL_OK; } diff --git a/stm32cube/stm32h7xx/README b/stm32cube/stm32h7xx/README index 311e7a190..040848ab5 100644 --- a/stm32cube/stm32h7xx/README +++ b/stm32cube/stm32h7xx/README @@ -62,4 +62,10 @@ Patch List: Impacted files: drivers/include/Legacy/stm32_hal_legacy.h + *Fix SDIO initialization failure when skipping card identification sequence + Fixes an issue in the STM32H7 SDIO driver where HAL_SDIO_Init() fails if + the card identification sequence is skipped. + Impacted files: + stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_sdio.c + See release_note.html from STM32Cube diff --git a/stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_sdio.c b/stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_sdio.c index ddde94eb9..9deaf4c46 100644 --- a/stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_sdio.c +++ b/stm32cube/stm32h7xx/drivers/src/stm32h7xx_hal_sdio.c @@ -314,7 +314,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) { SDIO_InitTypeDef Init; uint32_t sdmmc_clk; - uint8_t data; /* Check the parameters */ assert_param(hsdio != NULL); @@ -398,12 +397,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) Init.ClockDiv = hsdio->Init.ClockDiv; (void)SDMMC_Init(hsdio->Instance, Init); - data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; - if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) - { - return HAL_ERROR; - } - hsdio->Context = SDIO_CONTEXT_NONE; hsdio->State = HAL_SDIO_STATE_READY; @@ -2486,6 +2479,7 @@ HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, */ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) { + uint8_t data; uint32_t errorstate; uint32_t timeout = 0U; uint16_t sdio_rca = 1U; @@ -2560,6 +2554,12 @@ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) return HAL_ERROR; } + data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; + if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) + { + return HAL_ERROR; + } + return HAL_OK; } diff --git a/stm32cube/stm32n6xx/README b/stm32cube/stm32n6xx/README index aed085b0e..4ae39dca5 100644 --- a/stm32cube/stm32n6xx/README +++ b/stm32cube/stm32n6xx/README @@ -53,4 +53,10 @@ Patch List: Impacted files: -soc/system_stm32n6xx_fsbl.c + *Fix SDIO initialization failure when skipping card identification sequence + Fixes an issue in the STM32HN6 SDIO driver where HAL_SDIO_Init() fails if + the card identification sequence is skipped. + Impacted files: + stm32cube/stm32n6xx/drivers/src/stm32n6xx_hal_sdio.c + See release_note.html from STM32Cube diff --git a/stm32cube/stm32n6xx/drivers/src/stm32n6xx_hal_sdio.c b/stm32cube/stm32n6xx/drivers/src/stm32n6xx_hal_sdio.c index 6b2fa3c8a..a48940503 100644 --- a/stm32cube/stm32n6xx/drivers/src/stm32n6xx_hal_sdio.c +++ b/stm32cube/stm32n6xx/drivers/src/stm32n6xx_hal_sdio.c @@ -314,7 +314,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) { SDIO_InitTypeDef Init; uint32_t sdmmc_clk; - uint8_t data; /* Check the parameters */ assert_param(hsdio != NULL); @@ -398,12 +397,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) Init.ClockDiv = hsdio->Init.ClockDiv; (void)SDMMC_Init(hsdio->Instance, Init); - data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; - if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) - { - return HAL_ERROR; - } - hsdio->Context = SDIO_CONTEXT_NONE; hsdio->State = HAL_SDIO_STATE_READY; @@ -2486,6 +2479,7 @@ HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, */ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) { + uint8_t data; uint32_t errorstate; uint32_t timeout = 0U; uint16_t sdio_rca = 1U; @@ -2560,6 +2554,12 @@ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) return HAL_ERROR; } + data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; + if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) + { + return HAL_ERROR; + } + return HAL_OK; } diff --git a/stm32cube/stm32u5xx/README b/stm32cube/stm32u5xx/README index af025ab2a..863404ffd 100644 --- a/stm32cube/stm32u5xx/README +++ b/stm32cube/stm32u5xx/README @@ -48,4 +48,10 @@ Patch List: Impacted files: drivers/include/Legacy/stm32_hal_legacy.h + *Fix SDIO initialization failure when skipping card identification sequence + Fixes an issue in the STM32U5 SDIO driver where HAL_SDIO_Init() fails if + the card identification sequence is skipped. + Impacted files: + stm32cube/stm32u5xx/drivers/src/stm32u5xx_hal_sdio.c + See release_note.html from STM32Cube diff --git a/stm32cube/stm32u5xx/drivers/src/stm32u5xx_hal_sdio.c b/stm32cube/stm32u5xx/drivers/src/stm32u5xx_hal_sdio.c index 83b3e7052..a87a5c2a2 100644 --- a/stm32cube/stm32u5xx/drivers/src/stm32u5xx_hal_sdio.c +++ b/stm32cube/stm32u5xx/drivers/src/stm32u5xx_hal_sdio.c @@ -314,7 +314,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) { SDIO_InitTypeDef Init; uint32_t sdmmc_clk; - uint8_t data; /* Check the parameters */ assert_param(hsdio != NULL); @@ -398,12 +397,6 @@ HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio) Init.ClockDiv = hsdio->Init.ClockDiv; (void)SDMMC_Init(hsdio->Instance, Init); - data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; - if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) - { - return HAL_ERROR; - } - hsdio->Context = SDIO_CONTEXT_NONE; hsdio->State = HAL_SDIO_STATE_READY; @@ -2560,6 +2553,12 @@ static HAL_StatusTypeDef SDIO_InitCard(SDIO_HandleTypeDef *hsdio) return HAL_ERROR; } + uint8_t data = (hsdio->Init.BusWide == HAL_SDIO_4_WIRES_MODE) ? 2U : 0U; + if (SDIO_WriteDirect(hsdio, SDMMC_SDIO_CCCR4_SD_BYTE3, HAL_SDIO_WRITE_ONLY, SDIO_FUNCTION_0, &data) != HAL_OK) + { + return HAL_ERROR; + } + return HAL_OK; }