2022-11-29 06:20 AM
There is a newly introduced bug in the freshly upgraded package coming with the IDE 1.11. MX_SDMMC1_SD_Init(void) does not configure hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B but directly to the final state choosen in CubeMX (in my case 4B). But the SD requires to be started and configured with 1B before switching to the final configuration. Forcing manually to 1B makes the job, but CubeMX changes it back to 4B after each generation. The easy workaround is to force 1B in the user code at the end of SD_init function.
Could you confirm this is a bug and roll back to the correct version ?
2022-11-29 07:13 AM
Hi @Brieuc ,To confirm this bug , can you give me more detail about your workspace? Name of board?
Regard,
Diane P
2022-11-29 07:20 AM
Hi Diane,
I use a custom board with a standard 4-wire SD connection driven by a STM32L476RGT6. The workspace has been upgraded from IDE 1.10 to 1.11 today. Do you need more details ?
2023-02-03 01:18 AM
Hi Diane, Brieuc
I confirm the bug. A previous version of STM32CUBE used to generate code like this:
hmmc1.Instance = SDMMC1;
hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hmmc1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hmmc1.Init.BusWide = SDMMC_BUS_WIDE_1B; //<< OK it works
hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
hmmc1.Init.ClockDiv = 0;
if (HAL_MMC_Init(&hmmc1) != HAL_OK)
{
Error_Handler();
}
if (HAL_MMC_ConfigWideBusOperation(&hmmc1, SDMMC_BUS_WIDE_4B) != HAL_OK)
{
Error_Handler();
}
now Version: 1.11.2 generates code like this:
hmmc1.Instance = SDMMC1;
hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hmmc1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hmmc1.Init.BusWide = SDMMC_BUS_WIDE_4B; //<< WRONG!!!
hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
hmmc1.Init.ClockDiv = 0;
if (HAL_MMC_Init(&hmmc1) != HAL_OK)
{
Error_Handler();
}
if (HAL_MMC_ConfigWideBusOperation(&hmmc1, SDMMC_BUS_WIDE_4B) != HAL_OK)
{
Error_Handler();
}
I use a custom board with a standard 4-wire SD connection to a STM32L4; please find schematic in attachment
2023-02-03 01:44 AM
2023-02-03 02:25 AM
but on my H743 sd-init is (always, i did not update now)
always working fine. so 4-bit mode is not the problem here.
hsd1.Instance = SDMMC1;
hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_ENABLE;
hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
hsd1.Init.ClockDiv = 1;
/* USER CODE BEGIN SDMMC1_Init 2 */
if (HAL_SD_Init(&hsd1) != HAL_OK)
{
Error_Handler();
}
sdmmc clk is 100MHz .
2023-02-13 04:43 AM
Hi @Brieuc @fabio239955 @AScha.3
Thanks you for your feedback.
Can you give me you STM32CubeMx version ?
I'm escalating the problem to the relevant team so that it can be resolved.
Regards
DianeP
2023-02-13 07:07 AM
Thanks Dianep
My current STM32CubeIDE (with bug) is Version: 1.11.2 Build: 14494_20230119_0724 (UTC).
In April 2022 I was using a different version and it worked properly – non such a bug. I do not know the version. It was the latest available vestion at thet time.
With best regards
Fabio
2023-02-13 11:46 AM
hi,
i am using :
STM32CubeIDE
Version: 1.10.1
Build: 12716_20220707_0928 (UTC)
OS: Linux, v.4.19.0-1-amd64, x86_64 / gtk 3.22.11
Java vendor: Eclipse Adoptium
Java runtime version: 11.0.14.1+1
Java version: 11.0.14.1
+
STM32CubeMX - STM32 Device Configuration Tool
Version: 6.6.1-RC2
Build: 20220706-1420 (UTC)
2023-07-14 02:41 AM
I can confirm the bug. Custom board with F746 chip, 4-bit SD card, FatFS(!). Version 1.10.1 of CubeIDE generated this code:
static void MX_SDMMC1_SD_Init(void) {
/* USER CODE BEGIN SDMMC1_Init 0 */
/* USER CODE END SDMMC1_Init 0 */
/* USER CODE BEGIN SDMMC1_Init 1 */
/* USER CODE END SDMMC1_Init 1 */
hsd1.Instance = SDMMC1;
hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B; //! 1 bit here
hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
hsd1.Init.ClockDiv = 1;
/* USER CODE BEGIN SDMMC1_Init 2 */
if (HAL_SD_Init(&hsd1) != HAL_OK) {
Error_Handler();
}
if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK) { //! 4 bit here
Error_Handler();
}
/* USER CODE END SDMMC1_Init 2 */
}
and everything worked as expected.
Newer versions of CubeIDE (1.12.1 and 1.13.0) generate the same code but with 4 bit constant in both places. And firmware simply hangs. Please return it to working state.