summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/sdio.c15
-rw-r--r--ports/stm32/sdio.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/ports/stm32/sdio.c b/ports/stm32/sdio.c
index 87f550e3a..3ebd4947f 100644
--- a/ports/stm32/sdio.c
+++ b/ports/stm32/sdio.c
@@ -93,6 +93,21 @@ void sdio_deinit(void) {
#endif
}
+void sdio_reenable(void) {
+ if (__HAL_RCC_SDMMC1_IS_CLK_DISABLED()) {
+ __HAL_RCC_SDMMC1_CLK_ENABLE(); // enable SDIO peripheral
+ sdio_enable_high_speed_4bit();
+ }
+}
+
+void sdio_enable_irq(bool enable) {
+ if (enable) {
+ SDMMC1->MASK |= SDMMC_MASK_SDIOITIE;
+ } else {
+ SDMMC1->MASK &= ~SDMMC_MASK_SDIOITIE;
+ }
+}
+
void sdio_enable_high_speed_4bit(void) {
SDMMC_TypeDef *SDIO = SDMMC1;
SDIO->POWER = 0; // power off
diff --git a/ports/stm32/sdio.h b/ports/stm32/sdio.h
index e7115e6f8..7cbf024ca 100644
--- a/ports/stm32/sdio.h
+++ b/ports/stm32/sdio.h
@@ -31,6 +31,8 @@
void sdio_init(uint32_t irq_pri);
void sdio_deinit(void);
+void sdio_reenable(void);
+void sdio_enable_irq(bool enable);
void sdio_enable_high_speed_4bit(void);
int sdio_transfer(uint32_t cmd, uint32_t arg, uint32_t *resp);
int sdio_transfer_cmd53(bool write, uint32_t block_size, uint32_t arg, size_t len, uint8_t *buf);