diff --git a/bsp/stm32/libraries/HAL_Drivers/config/f7/sdio_config.h b/bsp/stm32/libraries/HAL_Drivers/config/f7/sdio_config.h index b773ccd970358de11309d8475781e16b0c8cb0c5..d6127d9b738796bf7a97a0eea3d986cfe3451ea8 100644 --- a/bsp/stm32/libraries/HAL_Drivers/config/f7/sdio_config.h +++ b/bsp/stm32/libraries/HAL_Drivers/config/f7/sdio_config.h @@ -17,7 +17,7 @@ #ifdef BSP_USING_SDIO #define SDIO_BUS_CONFIG \ { \ - .Instance = SDIO, \ + .Instance = SDMMC1, \ .dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ .dma_rx.Instance = DMA2_Stream3, \ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_sdio.c b/bsp/stm32/libraries/HAL_Drivers/drv_sdio.c index f2d686734339c52ab63ff348c52323989af91528..3294b89190ab15689396f692b26763506c03fed2 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_sdio.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_sdio.c @@ -19,6 +19,12 @@ #define LOG_TAG "drv.sdio" #include +#if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F4) +#define SDCARD_INSTANCE SDIO +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F7) +#define SDCARD_INSTANCE SDMMC1 +#endif /* defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F4) */ + static struct stm32_sdio_config sdio_config = SDIO_BUS_CONFIG; static struct stm32_sdio_class sdio_obj; static struct rt_mmcsd_host *host; @@ -809,14 +815,14 @@ int rt_hw_sdio_init(void) { struct stm32_sdio_des sdio_des; SD_HandleTypeDef hsd; - hsd.Instance = SDIO; + hsd.Instance = SDCARD_INSTANCE; { rt_uint32_t tmpreg = 0x00U; #if defined(SOC_SERIES_STM32F1) /* enable DMA clock && Delay after an RCC peripheral clock enabling*/ SET_BIT(RCC->AHBENR, sdio_config.dma_rx.dma_rcc); tmpreg = READ_BIT(RCC->AHBENR, sdio_config.dma_rx.dma_rcc); -#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32L4) +#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) SET_BIT(RCC->AHB1ENR, sdio_config.dma_rx.dma_rcc); /* Delay after an RCC peripheral clock enabling */ tmpreg = READ_BIT(RCC->AHB1ENR, sdio_config.dma_rx.dma_rcc); @@ -828,7 +834,7 @@ int rt_hw_sdio_init(void) HAL_SD_MspInit(&hsd); sdio_des.clk_get = stm32_sdio_clock_get; - sdio_des.hw_sdio = (struct stm32_sdio *)SDIO; + sdio_des.hw_sdio = (struct stm32_sdio *)SDCARD_INSTANCE; sdio_des.rxconfig = DMA_RxConfig; sdio_des.txconfig = DMA_TxConfig; diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_sdio.h b/bsp/stm32/libraries/HAL_Drivers/drv_sdio.h index f0b3cdb34732954837ac583023c86757635cd52e..e753ad05778be304fa35e926e9cc2aa955886923 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_sdio.h +++ b/bsp/stm32/libraries/HAL_Drivers/drv_sdio.h @@ -19,6 +19,12 @@ #include #include +#if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F4) +#define SDCARD_INSTANCE_TYPE SDIO_TypeDef +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F7) +#define SDCARD_INSTANCE_TYPE SDMMC_TypeDef +#endif /* defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F4) */ + #define SDIO_BUFF_SIZE 4096 #define SDIO_MAX_FREQ 2000000 #define SDIO_ALIGN_LEN 32 @@ -158,7 +164,7 @@ struct stm32_sdio_des struct stm32_sdio_config { - SDIO_TypeDef *Instance; + SDCARD_INSTANCE_TYPE *Instance; struct dma_config dma_rx, dma_tx; }; diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_spi.c b/bsp/stm32/libraries/HAL_Drivers/drv_spi.c index bff01dcd349a9421e4fc6c00eb0e886a5d8823bf..36cf7fa4019414455d44088735eafef89c61505c 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_spi.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_spi.c @@ -484,14 +484,10 @@ static int rt_hw_spi_bus_init(void) /* enable DMA clock && Delay after an RCC peripheral clock enabling*/ SET_BIT(RCC->AHBENR, spi_config[i].dma_rx.dma_rcc); tmpreg = READ_BIT(RCC->AHBENR, spi_config[i].dma_rx.dma_rcc); -#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32L4) +#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) SET_BIT(RCC->AHB1ENR, spi_config[i].dma_rx.dma_rcc); /* Delay after an RCC peripheral clock enabling */ tmpreg = READ_BIT(RCC->AHB1ENR, spi_config[i].dma_rx.dma_rcc); -#elif defined(SOC_SERIES_STM32F7) - SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ - /* Delay after an RCC peripheral clock enabling */ \ - tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ #endif UNUSED(tmpreg); /* To avoid compiler warnings */ } @@ -761,5 +757,5 @@ int rt_hw_spi_init(void) } INIT_BOARD_EXPORT(rt_hw_spi_init); -#endif /* BSP_USING_SPI1 || BSP_USING_SPI2 || BSP_USING_SPI3 || BSP_USING_SPI4 || BSP_USING_SPI5 */ +#endif /* BSP_USING_SPI1 || BSP_USING_SPI2 || BSP_USING_SPI3 || BSP_USING_SPI4 || BSP_USING_SPI5 || BSP_USING_SPI6 */ #endif /* RT_USING_SPI */ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c index 24029d66d622448856e0a1d6b70f0e5a1cd4374f..acf7222470eb972b42e3a080a8c66c080a8cb1aa 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c @@ -492,11 +492,7 @@ static void stm32_dma_config(struct rt_serial_device *serial) /* enable DMA clock && Delay after an RCC peripheral clock enabling*/ SET_BIT(RCC->AHBENR, uart->config->dma_rcc); tmpreg = READ_BIT(RCC->AHBENR, uart->config->dma_rcc); -#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32L4) - /* enable DMA clock && Delay after an RCC peripheral clock enabling*/ - SET_BIT(RCC->AHB1ENR, uart->config->dma_rcc); - tmpreg = READ_BIT(RCC->AHB1ENR, uart->config->dma_rcc); -#elif defined(SOC_SERIES_STM32F7) +#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) /* enable DMA clock && Delay after an RCC peripheral clock enabling*/ SET_BIT(RCC->AHB1ENR, uart->config->dma_rcc); tmpreg = READ_BIT(RCC->AHB1ENR, uart->config->dma_rcc); diff --git a/bsp/stm32/stm32f767-fire-challenger/README.md b/bsp/stm32/stm32f767-fire-challenger/README.md index 0aa2ebc3b1de1d624b3c7f88292e7fc59eabe1d8..01257ed515ab48857c7d58058c30bffb4e715b37 100644 --- a/bsp/stm32/stm32f767-fire-challenger/README.md +++ b/bsp/stm32/stm32f767-fire-challenger/README.md @@ -44,7 +44,7 @@ | QSPI Flash | 支持 | | | 电位器 | 支持 | 使用 ADC1 | | 以太网 | 暂不支持 | 移植中 | -| MPU6050六轴传感器 | 支持 | | +| MPU6050六轴传感器 | 支持 | | | SDRAM | 支持 | | | SD卡 | 即将支持 | | | CAN | 即将支持 | | @@ -58,7 +58,7 @@ | RTC | 支持 | | | WDT | 支持 | | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | -| SDIO | 暂不支持 | 即将支持 | +| SDIO | 支持 | | | PWM | 暂不支持 | 即将支持 | | USB Device | 暂不支持 | 即将支持 | | USB Host | 暂不支持 | 即将支持 | diff --git a/bsp/stm32/stm32f767-fire-challenger/board/Kconfig b/bsp/stm32/stm32f767-fire-challenger/board/Kconfig index 6498babce501152ecf21ac74f450af319cd1c7f9..1b7bca93685b1a14c94801d4a6028bf7f2b8efd8 100644 --- a/bsp/stm32/stm32f767-fire-challenger/board/Kconfig +++ b/bsp/stm32/stm32f767-fire-challenger/board/Kconfig @@ -231,6 +231,12 @@ menu "On-chip Peripheral Drivers" select RT_USING_WDT default n + config BSP_USING_SDIO + bool "Enable SDIO" + select RT_USING_SDIO + select RT_USING_DFS + default n + endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c new file mode 100644 index 0000000000000000000000000000000000000000..0a84162150840b65225ea93f1c47aad5ec27f199 --- /dev/null +++ b/bsp/stm32/stm32f767-fire-challenger/board/ports/sdcard_port.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-13 balanceTWK add sdcard port file + */ + +#include + +#ifdef BSP_USING_SDCARD + +#include +#include +#include +#include "drv_gpio.h" + +#define DBG_ENABLE +#define DBG_SECTION_NAME "app.card" +#define DBG_COLOR + +#define DBG_LEVEL DBG_INFO +#include + +#define WIFI_RESET_PIN GET_PIN(G, 9) + +int ewm1062_disable(void) +{ + rt_pin_mode(WIFI_RESET_PIN, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_RESET_PIN,PIN_LOW); + return RT_EOK; +} +INIT_BOARD_EXPORT(ewm1062_disable); + +void sd_mount(void *parameter) +{ + while (1) + { + rt_thread_mdelay(500); + if(rt_device_find("sd0") != RT_NULL) + { + if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK) + { + LOG_I("sd card mount to '/'"); + break; + } + else + { + LOG_W("sd card mount to '/' failed!"); + } + } + } +} + +int stm32_sdcard_mount(void) +{ + rt_thread_t tid; + + tid = rt_thread_create("sd_mount", sd_mount, RT_NULL, + 1024, RT_THREAD_PRIORITY_MAX - 2, 20); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create sd_mount thread err!"); + } + return RT_EOK; +} +INIT_APP_EXPORT(stm32_sdcard_mount); + +#endif /* BSP_USING_SDCARD */ +