From 845940dd908eb2f19f78fce9c96e3e3c674d3ecb Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Wed, 22 May 2019 15:13:40 +0200 Subject: [PATCH 1/3] STM32H7 - Fix building targets that can optionally define USE_SDCARD i.e. MINIMALH750_EXST doesn't currently build, but should when USE_SDCARD is enabled in the target config. The issue arises from target .mk file's FEATURES list in combination with STM32H7.mk including sdcard specific file when the SDCARD_SDIO feature is enabled. --- src/main/msc/usbd_storage_sdio.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/msc/usbd_storage_sdio.c b/src/main/msc/usbd_storage_sdio.c index fc7d690b9f..c24b4a1da1 100644 --- a/src/main/msc/usbd_storage_sdio.c +++ b/src/main/msc/usbd_storage_sdio.c @@ -32,6 +32,8 @@ #include "platform.h" +#ifdef USE_SDCARD + #include "common/utils.h" #include "drivers/dma.h" #include "drivers/dma_reqmap.h" @@ -308,3 +310,4 @@ static int8_t STORAGE_GetMaxLun (void) /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +#endif // USE_SDCARD From 3acaf1609035fb75d0bc58b8e2a51024f4ab325f Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Sun, 9 Jun 2019 23:32:54 +0200 Subject: [PATCH 2/3] STM32H7 - Fix errant SDIO request mapping. None needed as IDMA is used. See 54.4.1 SDMMC block diagram in H7 Reference Manual Rev 6 RM0433. --- src/main/drivers/dma_reqmap.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/drivers/dma_reqmap.c b/src/main/drivers/dma_reqmap.c index 1080a03c8e..ba5761c893 100644 --- a/src/main/drivers/dma_reqmap.c +++ b/src/main/drivers/dma_reqmap.c @@ -60,7 +60,7 @@ typedef struct dmaTimerMapping_s { #define REQMAP(periph, device) { DMA_PERIPH_ ## periph, periph ## DEV_ ## device, DMA_REQUEST_ ## periph ## device } #define REQMAP_DIR(periph, device, dir) { DMA_PERIPH_ ## periph ## _ ## dir, periph ## DEV_ ## device, DMA_REQUEST_ ## periph ## device ## _ ## dir } -// Resolve UART/UART mess +// Resolve UART/USART mess #define DMA_REQUEST_UART1_RX DMA_REQUEST_USART1_RX #define DMA_REQUEST_UART1_TX DMA_REQUEST_USART1_TX #define DMA_REQUEST_UART2_RX DMA_REQUEST_USART2_RX @@ -92,10 +92,6 @@ static const dmaPeripheralMapping_t dmaPeripheralMapping[] = { REQMAP(ADC, 3), #endif -#ifdef USE_SDCARD_SDIO - REQMAP_SGL(SDIO), -#endif - #ifdef USE_UART REQMAP_DIR(UART, 1, TX), REQMAP_DIR(UART, 1, RX), From fe797aa6330f9143f3b25fe1fd3b1258128cccf3 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Mon, 10 Jun 2019 00:04:39 +0200 Subject: [PATCH 3/3] STM32H7 - Fix SDIO initialisation caused by USE_DMA_SPEC changes. H7 uses IDMA, no DMA channel spec needed. --- src/main/drivers/sdcard_sdio_baremetal.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/drivers/sdcard_sdio_baremetal.c b/src/main/drivers/sdcard_sdio_baremetal.c index 588ca95a3b..8b411780a0 100644 --- a/src/main/drivers/sdcard_sdio_baremetal.c +++ b/src/main/drivers/sdcard_sdio_baremetal.c @@ -202,6 +202,7 @@ static void sdcardSdio_init(const sdcardConfig_t *config, const spiPinConfig_t * } #ifdef USE_DMA_SPEC +#if !defined(STM32H7) // H7 uses IDMA const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpecByPeripheral(DMA_PERIPH_SDIO, 0, sdioConfig()->dmaopt); if (!dmaChannelSpec) { @@ -215,6 +216,7 @@ static void sdcardSdio_init(const sdcardConfig_t *config, const spiPinConfig_t * sdcard.state = SDCARD_STATE_NOT_PRESENT; return; } +#endif #endif if (config->cardDetectTag) { sdcard.cardDetectPin = IOGetByTag(config->cardDetectTag); @@ -230,7 +232,11 @@ static void sdcardSdio_init(const sdcardConfig_t *config, const spiPinConfig_t * sdcard.useCache = 0; } #ifdef USE_DMA_SPEC +#if defined(STM32H7) // H7 uses IDMA + SD_Initialize_LL(0); +#else SD_Initialize_LL(dmaChannelSpec->ref); +#endif #else SD_Initialize_LL(SDCARD_SDIO_DMA_OPT); #endif