Skip to content

Commit 6b23f7d

Browse files
msariisikdpgeorge
authored andcommitted
stm32/sdio: Use runtime calculation for clock divider of sdio on H7.
STM32H7 family has a different calculation compared to the current one for the SDMMC clock divider configuration.
1 parent 303e222 commit 6b23f7d

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

ports/stm32/sdio.c

+17
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@ static volatile uint8_t *sdmmc_buf_top;
9696
#define MICROPY_HW_SDIO_CMD (pin_D2)
9797
#endif
9898

99+
#if defined(STM32H7)
100+
static uint32_t safe_divide(uint32_t denom) {
101+
uint32_t num = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SDMMC);
102+
uint32_t divres;
103+
104+
divres = num / (2U * denom);
105+
if ((num % (2U * denom)) > denom) {
106+
divres++;
107+
}
108+
return divres;
109+
}
110+
#endif
111+
99112
void sdio_init(uint32_t irq_pri) {
100113
// configure IO pins
101114
mp_hal_pin_config_alt_static(MICROPY_HW_SDIO_D0, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_D0);
@@ -110,6 +123,8 @@ void sdio_init(uint32_t irq_pri) {
110123
SDMMC_TypeDef *SDIO = SDMMC;
111124
#if defined(STM32F7)
112125
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_PWRSAV | (120 - 2); // 1-bit, 400kHz
126+
#elif defined(STM32H7)
127+
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_PWRSAV | safe_divide(400000U); // 1-bit, 400kHz
113128
#else
114129
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_PWRSAV | (120 / 2); // 1-bit, 400kHz
115130
#endif
@@ -157,6 +172,8 @@ void sdio_enable_high_speed_4bit(void) {
157172
mp_hal_delay_us(10);
158173
#if defined(STM32F7)
159174
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_WIDBUS_0 | SDMMC_CLKCR_BYPASS /*| SDMMC_CLKCR_PWRSAV*/; // 4-bit, 48MHz
175+
#elif defined(STM32H7)
176+
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_WIDBUS_0 | safe_divide(48000000U); // 4-bit, 48MHz
160177
#else
161178
SDIO->CLKCR = SDMMC_CLKCR_HWFC_EN | SDMMC_CLKCR_WIDBUS_0; // 4-bit, 48MHz
162179
#endif

0 commit comments

Comments
 (0)