drv_sdmmc.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-05-23 liuduanfei first version
  9. * 2020-08-25 wanghaijing add sdmmmc2
  10. * 2023-03-26 wdfk-prog Distinguish between SDMMC and SDIO drivers
  11. */
  12. #ifndef __DRV_SDMMC_H__
  13. #define __DRV_SDMMC_H__
  14. #include <rtthread.h>
  15. #include "rtdevice.h"
  16. #include <rthw.h>
  17. #include <drv_common.h>
  18. #include <string.h>
  19. #include <drivers/mmcsd_core.h>
  20. #include <drivers/sdio.h>
  21. #define SDIO_BUFF_SIZE 4096
  22. #define SDIO_ALIGN_LEN 32
  23. #define SDIO1_BASE_ADDRESS (SDMMC1_BASE)
  24. #define SDIO2_BASE_ADDRESS (SDMMC2_BASE)
  25. #ifndef SDIO_CLOCK_FREQ
  26. #define SDIO_CLOCK_FREQ (200U * 1000 * 1000)
  27. #endif
  28. #ifndef SDIO_BUFF_SIZE
  29. #define SDIO_BUFF_SIZE (4096)
  30. #endif
  31. #ifndef SDIO_ALIGN_LEN
  32. #define SDIO_ALIGN_LEN (32)
  33. #endif
  34. #ifndef SDIO_MAX_FREQ
  35. #define SDIO_MAX_FREQ (25 * 1000 * 1000)
  36. #endif
  37. /* Frequencies used in the driver for clock divider calculation */
  38. #define SD_INIT_FREQ 400000U /* Initalization phase : 400 kHz max */
  39. #define SD_NORMAL_SPEED_FREQ 25000000U /* Normal speed phase : 25 MHz max */
  40. #define SD_HIGH_SPEED_FREQ 50000000U /* High speed phase : 50 MHz max */
  41. #define SDIO_ERRORS \
  42. (SDMMC_STA_IDMATE | SDMMC_STA_ACKTIMEOUT | \
  43. SDMMC_STA_RXOVERR | SDMMC_STA_TXUNDERR | \
  44. SDMMC_STA_DTIMEOUT | SDMMC_STA_CTIMEOUT | \
  45. SDMMC_STA_DCRCFAIL | SDMMC_STA_CCRCFAIL)
  46. #define SDIO_MASKR_ALL \
  47. (SDMMC_MASK_CCRCFAILIE | SDMMC_MASK_DCRCFAILIE | SDMMC_MASK_CTIMEOUTIE | \
  48. SDMMC_MASK_TXUNDERRIE | SDMMC_MASK_RXOVERRIE | SDMMC_MASK_CMDRENDIE | \
  49. SDMMC_MASK_CMDSENTIE | SDMMC_MASK_DATAENDIE | SDMMC_MASK_ACKTIMEOUTIE)
  50. #define HW_SDIO_DATATIMEOUT (0xFFFFFFFFU)
  51. typedef rt_uint32_t (*sdio_clk_get)(void);
  52. struct stm32_sdio_des
  53. {
  54. SD_HandleTypeDef hw_sdio;
  55. sdio_clk_get clk_get;
  56. };
  57. /* stm32 sdio dirver class */
  58. struct stm32_sdio_class
  59. {
  60. struct stm32_sdio_des *des;
  61. const struct stm32_sdio_config *cfg;
  62. struct rt_mmcsd_host host;
  63. };
  64. extern void stm32_mmcsd_change(void);
  65. #endif /* __DRV_SDMMC_H__ */