mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-08 14:43:04 +08:00
[add] sdmmc (sd_card and emmc) driver.
This commit is contained in:
1 parent
3767a08901
commit
840af38dac
9 files changed
+1385
-12
No files matched your search
@@ -35,10 +35,6 @@ if GetDepend(['RT_USING_SERIAL']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart_ex.c']
|
||||
|
||||
#if GetDepend(['RT_USING_SPI']):
|
||||
# src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi.c']
|
||||
# src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_qspi.c']
|
||||
|
||||
if GetDepend(['RT_USING_USB_HOST']) or GetDepend(['RT_USING_USB_DEVICE']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pccard.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pcd.c']
|
||||
@@ -49,11 +45,6 @@ if GetDepend(['RT_USING_USB_HOST']) or GetDepend(['RT_USING_USB_DEVICE']):
|
||||
if GetDepend(['RT_USING_CAN']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_can.c']
|
||||
|
||||
#if GetDepend(['RT_USING_HWTIMER']) or GetDepend(['RT_USING_PWM']) or GetDepend(['RT_USING_PULSE_ENCODER']):
|
||||
# src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim.c']
|
||||
# src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim_ex.c']
|
||||
# src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_lptim.c']
|
||||
|
||||
if GetDepend(['BSP_USING_ETH']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_eth.c']
|
||||
|
||||
@@ -73,6 +64,7 @@ if GetDepend(['RT_USING_WDT']):
|
||||
if GetDepend(['RT_USING_SDIO']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_sdmmc.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_sd.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_delayblock.c']
|
||||
|
||||
if GetDepend(['RT_USING_AUDIO']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_i2s.c']
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
/*#define HAL_QSPI_MODULE_ENABLED */
|
||||
/*#define HAL_RNG_MODULE_ENABLED */
|
||||
/*#define HAL_SAI_MODULE_ENABLED */
|
||||
/*#define HAL_SD_MODULE_ENABLED */
|
||||
#define HAL_SD_MODULE_ENABLED
|
||||
/*#define HAL_MMC_MODULE_ENABLED */
|
||||
/*#define HAL_RTC_MODULE_ENABLED */
|
||||
/*#define HAL_SMBUS_MODULE_ENABLED */
|
||||
@@ -153,6 +153,8 @@
|
||||
#define CSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/
|
||||
#endif /* CSI_VALUE */
|
||||
|
||||
#define USE_SD_TRANSCEIVER 1U
|
||||
|
||||
/**
|
||||
* @brief External clock source for I2S peripheral
|
||||
* This value is used by the I2S HAL module to compute the I2S clock source
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -37,6 +37,32 @@ menu "Onboard Peripheral Drivers"
|
||||
bool "Enable Ethernet"
|
||||
default n
|
||||
select RT_USING_LWIP
|
||||
|
||||
menuconfig BSP_USING_SDMMC
|
||||
bool "Enable SDMMC"
|
||||
select RT_USING_SDIO
|
||||
select RT_USING_DFS
|
||||
select RT_USING_DFS_ELMFAT
|
||||
select BSP_USING_PMIC
|
||||
if BSP_USING_SDMMC
|
||||
menuconfig BSP_USING_SD_CARD
|
||||
bool "Enable sd card"
|
||||
default n
|
||||
if BSP_USING_SD_CARD
|
||||
config SD_USING_DFS
|
||||
bool "sd card fatfs"
|
||||
default n
|
||||
endif
|
||||
|
||||
menuconfig BSP_USING_EMMC
|
||||
bool "Enable eMMC (32 Gbits)"
|
||||
default n
|
||||
if BSP_USING_EMMC
|
||||
config EMMC_USING_DFS
|
||||
bool "emmc card fatfs"
|
||||
default n
|
||||
endif
|
||||
endif
|
||||
endmenu
|
||||
|
||||
menu "On-chip Peripheral Drivers"
|
||||
|
||||
@@ -22,6 +22,12 @@ if GetDepend(['BSP_USING_NAND']):
|
||||
if GetDepend(['BSP_USING_GBE']):
|
||||
src += Glob('ports/eth/drv_eth.c')
|
||||
|
||||
if GetDepend(['BSP_USING_SD_CARD']):
|
||||
src += Glob('ports/drv_sdcard.c')
|
||||
|
||||
if GetDepend(['BSP_USING_EMMC']):
|
||||
src += Glob('ports/drv_emmc.c')
|
||||
|
||||
if GetDepend(['BSP_USING_OPENAMP']):
|
||||
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
|
||||
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
|
||||
@@ -37,7 +43,6 @@ if GetDepend(['BSP_USING_OPENAMP']):
|
||||
src += Glob('ports/OpenAMP/virtual_driver/*.c')
|
||||
src += Glob('ports/OpenAMP/drv_openamp.c')
|
||||
|
||||
|
||||
path = [cwd]
|
||||
path += [cwd + '/CubeMX_Config/CM4/Inc']
|
||||
path += [cwd + '/ports']
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-07-16 thread-liu first version
|
||||
*/
|
||||
|
||||
#ifndef __DRV_EMMC_H__
|
||||
#define __DRV_EMMC_H__
|
||||
|
||||
#include <rtthread.h>
|
||||
#include "rtdevice.h"
|
||||
#include <rthw.h>
|
||||
#include <drv_common.h>
|
||||
#include <string.h>
|
||||
#include <drivers/mmcsd_core.h>
|
||||
#include <drivers/sdio.h>
|
||||
|
||||
#define SDIO_BUFF_SIZE 4096
|
||||
|
||||
#ifndef EMMC_BASE_ADDRESS
|
||||
#define EMMC_BASE_ADDRESS (SDMMC2)
|
||||
#endif
|
||||
|
||||
#ifndef EMMC_CLOCK_FREQ
|
||||
#define EMMC_CLOCK_FREQ (99U * 1000 * 1000)
|
||||
#endif
|
||||
|
||||
#ifndef EMMC_MAX_FREQ
|
||||
#define EMMC_MAX_FREQ (50 * 1000 * 1000)
|
||||
#endif
|
||||
|
||||
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
|
||||
|
||||
#define SDMMC_ERRORS \
|
||||
(SDMMC_STA_IDMATE | SDMMC_STA_ACKTIMEOUT | \
|
||||
SDMMC_STA_RXOVERR | SDMMC_STA_TXUNDERR | \
|
||||
SDMMC_STA_DTIMEOUT | SDMMC_STA_CTIMEOUT | \
|
||||
SDMMC_STA_DCRCFAIL | SDMMC_STA_CCRCFAIL)
|
||||
|
||||
#define SDIO_MASKR_ALL \
|
||||
(SDMMC_MASK_CCRCFAILIE | SDMMC_MASK_DCRCFAILIE | SDMMC_MASK_CTIMEOUTIE | \
|
||||
SDMMC_MASK_TXUNDERRIE | SDMMC_MASK_RXOVERRIE | SDMMC_MASK_CMDRENDIE | \
|
||||
SDMMC_MASK_CMDSENTIE | SDMMC_MASK_DATAENDIE | SDMMC_MASK_ACKTIMEOUTIE)
|
||||
|
||||
#define HW_SDIO_DATATIMEOUT (0xFFFFFFFFU)
|
||||
|
||||
struct stm32_sdio
|
||||
{
|
||||
volatile rt_uint32_t power; /* offset 0x00 */
|
||||
volatile rt_uint32_t clkcr; /* offset 0x04 */
|
||||
volatile rt_uint32_t arg; /* offset 0x08 */
|
||||
volatile rt_uint32_t cmd; /* offset 0x0C */
|
||||
volatile rt_uint32_t respcmd; /* offset 0x10 */
|
||||
volatile rt_uint32_t resp1; /* offset 0x14 */
|
||||
volatile rt_uint32_t resp2; /* offset 0x18 */
|
||||
volatile rt_uint32_t resp3; /* offset 0x1C */
|
||||
volatile rt_uint32_t resp4; /* offset 0x20 */
|
||||
volatile rt_uint32_t dtimer; /* offset 0x24 */
|
||||
volatile rt_uint32_t dlen; /* offset 0x28 */
|
||||
volatile rt_uint32_t dctrl; /* offset 0x2C */
|
||||
volatile rt_uint32_t dcount; /* offset 0x30 */
|
||||
volatile rt_uint32_t sta; /* offset 0x34 */
|
||||
volatile rt_uint32_t icr; /* offset 0x38 */
|
||||
volatile rt_uint32_t mask; /* offset 0x3C */
|
||||
volatile rt_uint32_t acktimer; /* offset 0x40 */
|
||||
volatile rt_uint32_t reserved0[3]; /* offset 0x44 ~ 0x4C */
|
||||
volatile rt_uint32_t idmatrlr; /* offset 0x50 */
|
||||
volatile rt_uint32_t idmabsizer; /* offset 0x54 */
|
||||
volatile rt_uint32_t idmabase0r; /* offset 0x58 */
|
||||
volatile rt_uint32_t idmabase1r; /* offset 0x5C */
|
||||
volatile rt_uint32_t reserved1[1]; /* offset 0x60 */
|
||||
volatile rt_uint32_t idmalar;
|
||||
volatile rt_uint32_t idmabar;
|
||||
volatile rt_uint32_t reserved2[5];
|
||||
volatile rt_uint32_t fifo;
|
||||
volatile rt_uint32_t reserved3[220];
|
||||
volatile rt_uint32_t verr;
|
||||
volatile rt_uint32_t ipidr;
|
||||
volatile rt_uint32_t sidr;
|
||||
};
|
||||
|
||||
typedef rt_uint32_t (*sdio_clk_get)(struct stm32_sdio *hw_sdio);
|
||||
|
||||
struct stm32_sdio_des
|
||||
{
|
||||
struct stm32_sdio *hw_sdio;
|
||||
sdio_clk_get clk_get;
|
||||
};
|
||||
|
||||
/* stm32 sdio dirver class */
|
||||
struct stm32_sdio_class
|
||||
{
|
||||
struct stm32_sdio_des *des;
|
||||
const struct stm32_sdio_config *cfg;
|
||||
struct rt_mmcsd_host host;
|
||||
};
|
||||
|
||||
extern void stm32_mmcsd_change(void);
|
||||
|
||||
#endif /* __DRV_SDIO_H__ */
|
||||
@@ -19,6 +19,8 @@
|
||||
#define LOG_TAG "drv.pmic"
|
||||
#include <drv_log.h>
|
||||
|
||||
#define I2C_NAME "i2c3"
|
||||
|
||||
static struct rt_i2c_bus_device *pmic_dev = RT_NULL;
|
||||
|
||||
/* i2c read reg */
|
||||
@@ -884,7 +886,7 @@ static int pmic_init(void)
|
||||
{
|
||||
BSP_PMIC_MspInit();
|
||||
|
||||
result = rt_hw_pmic_init("i2c3");
|
||||
result = rt_hw_pmic_init(I2C_NAME);
|
||||
if(result != RT_EOK)
|
||||
{
|
||||
LOG_D("stpmic init failed: %02x", result);
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user