From 8fd29cfbc5c911c46f065e36389c3d246aa97854 Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Tue, 2 Mar 2021 16:14:41 +0100 Subject: stm32h7: Add init for sdmmc pins Update #4372 --- bsps/arm/stm32h7/hal/stm32h7xx_hal_sd.c | 2 + bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c | 88 ++++++++++++++++++++++++++++++ spec/build/bsps/arm/stm32h7/bspstm32h7.yml | 1 + 3 files changed, 91 insertions(+) create mode 100644 bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c diff --git a/bsps/arm/stm32h7/hal/stm32h7xx_hal_sd.c b/bsps/arm/stm32h7/hal/stm32h7xx_hal_sd.c index edafb06def..eb8dbe71f1 100644 --- a/bsps/arm/stm32h7/hal/stm32h7xx_hal_sd.c +++ b/bsps/arm/stm32h7/hal/stm32h7xx_hal_sd.c @@ -594,6 +594,7 @@ HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) } +#ifndef __rtems__ /** * @brief Initializes the SD MSP. * @param hsd: Pointer to SD handle @@ -608,6 +609,7 @@ __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) the HAL_SD_MspInit could be implemented in the user file */ } +#endif /* __rtems__ */ /** * @brief De-Initialize SD MSP. diff --git a/bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c b/bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c new file mode 100644 index 0000000000..2bbc4ff953 --- /dev/null +++ b/bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +static const stm32h7_gpio_config gpiob = { + .regs = GPIOB, + .config = { + .Pin = GPIO_PIN_8 | GPIO_PIN_9, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_VERY_HIGH, + .Alternate = GPIO_AF7_SDMMC1 + } +}; + +static const stm32h7_gpio_config gpioc_af12 = { + .regs = GPIOC, + .config = { + .Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_VERY_HIGH, + .Alternate = GPIO_AF12_SDMMC1 + } +}; + +static const stm32h7_gpio_config gpioc_af8 = { + .regs = GPIOC, + .config = { + .Pin = GPIO_PIN_6 | GPIO_PIN_7, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_VERY_HIGH, + .Alternate = GPIO_AF8_SDMMC1 + } +}; + +static const stm32h7_gpio_config gpiod = { + .regs = GPIOD, + .config = { + .Pin = GPIO_PIN_2, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_VERY_HIGH, + .Alternate = GPIO_AF12_SDMMC1 + } +}; + +void +HAL_SD_MspInit(SD_HandleTypeDef *hsd) +{ + stm32h7_clk_enable(STM32H7_MODULE_SDMMC1); + stm32h7_gpio_init(&gpiob); + stm32h7_gpio_init(&gpioc_af12); + stm32h7_gpio_init(&gpioc_af8); + stm32h7_gpio_init(&gpiod); + __HAL_RCC_SDMMC1_FORCE_RESET(); + __HAL_RCC_SDMMC1_RELEASE_RESET(); +} diff --git a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml index 80e13472c8..5b3ecc6a89 100644 --- a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml +++ b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml @@ -417,6 +417,7 @@ source: - bsps/arm/stm32h7/start/stm32h7-config-per.c - bsps/arm/stm32h7/start/stm32h7-config-pwr.c - bsps/arm/stm32h7/start/stm32h7-hal-eth.c +- bsps/arm/stm32h7/start/stm32h7-hal-sdmmc.c - bsps/arm/stm32h7/start/stm32h7-hal-uart.c - bsps/arm/stm32h7/start/stm32h7-hal.c - bsps/arm/stm32h7/start/system_stm32h7xx.c -- cgit v1.2.3