4343/* Definition for BSP SD */
4444#if defined(SDMMC1 ) || defined(SDMMC2 )
4545 #ifndef SD_INSTANCE
46- #define SD_INSTANCE SDMMC1
47- #endif
48-
49- #define SD_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE
50- #define SD_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE
51- #ifdef SDMMC2
52- #define SD_CLK2_ENABLE __HAL_RCC_SDMMC2_CLK_ENABLE
53- #define SD_CLK2_DISABLE __HAL_RCC_SDMMC2_CLK_DISABLE
46+ #if defined(SDMMC1 )
47+ #define SD_INSTANCE SDMMC1
48+ #else
49+ #define SD_INSTANCE SDMMC2
50+ #endif
5451 #endif
5552
5653 #define SD_CLK_EDGE SDMMC_CLOCK_EDGE_RISING
8481
8582#elif defined(SDIO )
8683 #define SD_INSTANCE SDIO
87- #define SD_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE
88- #define SD_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE
8984 #define SD_CLK_EDGE SDIO_CLOCK_EDGE_RISING
9085 #if defined(SDIO_CLOCK_BYPASS_DISABLE )
9186 #define SD_CLK_BYPASS SDIO_CLOCK_BYPASS_DISABLE
@@ -160,12 +155,20 @@ uint8_t BSP_SD_GetInstance(void)
160155 SD_PinNames .pin_d3 = PinMap_SD_DATA3 [0 ].pin ;
161156 SD_PinNames .pin_cmd = PinMap_SD_CMD [0 ].pin ;
162157 SD_PinNames .pin_ck = PinMap_SD_CK [0 ].pin ;
163- #if defined(SDMMC1 ) && defined(SDMMC2 )
158+ #if defined(SDMMC1 ) || defined(SDMMC2 )
159+ #if !defined(SDMMC_CKIN_NA )
164160 SD_PinNames .pin_ckin = PinMap_SD_CKIN [0 ].pin ;
161+ #endif
162+ #if !defined(SDMMC_CDIR_NA )
165163 SD_PinNames .pin_cdir = PinMap_SD_CDIR [0 ].pin ;
164+ #endif
165+ #if !defined(SDMMC_D0DIR_NA )
166166 SD_PinNames .pin_d0dir = PinMap_SD_D0DIR [0 ].pin ;
167+ #endif
168+ #if !defined(SDMMC_D123DIR_NA )
167169 SD_PinNames .pin_d123dir = PinMap_SD_D123DIR [0 ].pin ;
168- #endif /* SDMMC1 && SDMMC2 */
170+ #endif
171+ #endif /* SDMMC1 || SDMMC2 */
169172 }
170173 /* Get SD instance from pins */
171174 sd_d0 = pinmap_peripheral (SD_PinNames .pin_d0 , PinMap_SD_DATA0 );
@@ -192,36 +195,52 @@ uint8_t BSP_SD_GetInstance(void)
192195 return MSD_ERROR ;
193196 }
194197 uSdHandle .Instance = sd_base ;
195- #if defined(SDMMC1 ) && defined(SDMMC2 )
198+ #if defined(SDMMC1 ) || defined(SDMMC2 )
199+ #if !defined(SDMMC_CKIN_NA )
196200 if (SD_PinNames .pin_ckin != NC ) {
197201 SD_TypeDef * sd_ckin = pinmap_peripheral (SD_PinNames .pin_ckin , PinMap_SD_CKIN );
202+ if (pinmap_merge_peripheral (sd_ckin , sd_base ) == NP ) {
203+ core_debug ("ERROR: SD CKIN pin mismatch\n" );
204+ return MSD_ERROR ;
205+ }
206+ }
207+ #endif
208+ #if !defined(SDMMC_CDIR_NA )
209+ if (SD_PinNames .pin_cdir != NC ) {
198210 SD_TypeDef * sd_cdir = pinmap_peripheral (SD_PinNames .pin_cdir , PinMap_SD_CDIR );
211+ if (pinmap_merge_peripheral (sd_cdir , sd_base ) == NP ) {
212+ core_debug ("ERROR: SD CDIR pin mismatch\n" );
213+ return MSD_ERROR ;
214+ }
215+ }
216+ #endif
217+ #if !defined(SDMMC_D0DIR_NA )
218+ if (SD_PinNames .pin_cdir != NC ) {
199219 SD_TypeDef * sd_d0dir = pinmap_peripheral (SD_PinNames .pin_d0dir , PinMap_SD_D0DIR );
200- SD_TypeDef * sd_d123dir = pinmap_peripheral (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
201-
202- /* Pins Dx/cmd/CK must not be NP. */
203- if (sd_ckin == NP || sd_cdir == NP || sd_d0dir == NP || sd_d123dir == NP ) {
204- core_debug ("ERROR: at least one SDMMC pin has no peripheral\n" );
220+ if (pinmap_merge_peripheral (sd_d0dir , sd_base ) == NP ) {
221+ core_debug ("ERROR: SD DODIR pin mismatch\n" );
205222 return MSD_ERROR ;
206223 }
207- SD_TypeDef * sdmmc_cx = pinmap_merge_peripheral (sd_ckin , sd_cdir );
208- SD_TypeDef * sdmmc_dx = pinmap_merge_peripheral (sd_d0dir , sd_d123dir );
209- SD_TypeDef * sdmmc_base = pinmap_merge_peripheral (sdmmc_cx , sdmmc_dx );
210- if (sdmmc_cx == NP || sdmmc_dx == NP || sdmmc_base == NP ) {
211- core_debug ("ERROR: SD pins mismatch\n" );
224+ }
225+ #endif
226+ #if !defined(SDMMC_D123DIR_NA )
227+ if (SD_PinNames .pin_cdir != NC ) {
228+ SD_TypeDef * sd_d123dir = pinmap_peripheral (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
229+ if (pinmap_merge_peripheral (sd_d123dir , sd_base ) == NP ) {
230+ core_debug ("ERROR: SD D123DIR pin mismatch\n" );
212231 return MSD_ERROR ;
213232 }
214- uSdHandle .Instance = pinmap_merge_peripheral (sd_base , sdmmc_base );
215233 }
216234#endif
235+ #endif /* SDMMC1 || SDMMC2 */
217236 /* Are all pins connected to the same SDx instance? */
218237 if (uSdHandle .Instance == NP ) {
219238 core_debug ("ERROR: SD pins mismatch\n" );
220239 return MSD_ERROR ;
221240 }
222241 return MSD_OK ;
223242}
224- #endif /* STM32_CORE_VERSION */
243+ #endif /* STM32_CORE_VERSION && (STM32_CORE_VERSION > 0x02050000) */
225244
226245/**
227246 * @brief Initializes the SD card device with CS check if any.
@@ -240,7 +259,7 @@ uint8_t BSP_SD_Init(void)
240259 if (BSP_SD_GetInstance () == MSD_ERROR ) {
241260 return MSD_ERROR ;
242261 }
243- #endif
262+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
244263
245264 uSdHandle .Init .ClockEdge = SD_CLK_EDGE ;
246265#if defined(SD_CLK_BYPASS )
@@ -508,25 +527,44 @@ __weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
508527 pinmap_pinout (SD_PinNames .pin_d3 , PinMap_SD_DATA3 );
509528 pinmap_pinout (SD_PinNames .pin_cmd , PinMap_SD_CMD );
510529 pinmap_pinout (SD_PinNames .pin_ck , PinMap_SD_CK );
511- #if defined(SDMMC1 ) && defined(SDMMC2 )
530+ #if defined(SDMMC1 ) || defined(SDMMC2 )
531+ #if !defined(SDMMC_CKIN_NA )
512532 if (SD_PinNames .pin_ckin != NC ) {
513533 pinmap_pinout (SD_PinNames .pin_ckin , PinMap_SD_CKIN );
534+ }
535+ #endif
536+ #if !defined(SDMMC_CDIR_NA )
537+ if (SD_PinNames .pin_cdir != NC ) {
514538 pinmap_pinout (SD_PinNames .pin_cdir , PinMap_SD_CDIR );
539+ }
540+ #endif
541+ #if !defined(SDMMC_D0DIR_NA )
542+ if (SD_PinNames .pin_d0dir != NC ) {
515543 pinmap_pinout (SD_PinNames .pin_d0dir , PinMap_SD_D0DIR );
544+ }
545+ #endif
546+ #if !defined(SDMMC_D123DIR_NA )
547+ if (SD_PinNames .pin_d123dir != NC ) {
516548 pinmap_pinout (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
517549 }
518550#endif
551+ #endif /* SDMMC1 || SDMMC2 */
552+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
519553 /* Enable SD clock */
520- #if defined(SDMMC1 ) && defined(SDMMC2 )
554+ #if defined(SDMMC1 ) || defined(SDMMC2 )
555+ #if defined(SDMMC1 )
521556 if (hsd -> Instance == SDMMC1 ) {
522- SD_CLK_ENABLE ();
523- } else {
524- SD_CLK2_ENABLE ();
557+ __HAL_RCC_SDMMC1_CLK_ENABLE ();
558+ }
559+ #endif
560+ #if defined(SDMMC2 )
561+ if (hsd -> Instance == SDMMC2 ) {
562+ __HAL_RCC_SDMMC2_CLK_ENABLE ();
525563 }
564+ #endif
526565#else
527566 UNUSED (hsd );
528- SD_CLK_ENABLE ();
529- #endif
567+ __HAL_RCC_SDIO_CLK_ENABLE ();
530568#endif
531569}
532570
@@ -573,26 +611,45 @@ __weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
573611 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_d3 ), STM_GPIO_PIN (SD_PinNames .pin_d3 ));
574612 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_cmd ), STM_GPIO_PIN (SD_PinNames .pin_cmd ));
575613 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_ck ), STM_GPIO_PIN (SD_PinNames .pin_ck ));
576- #if defined(SDMMC1 ) && defined(SDMMC2 )
614+ #if defined(SDMMC1 ) || defined(SDMMC2 )
615+ #if !defined(SDMMC_CKIN_NA )
577616 if (SD_PinNames .pin_ckin != NC ) {
578617 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_ckin ), STM_GPIO_PIN (SD_PinNames .pin_ckin ));
618+ }
619+ #endif
620+ #if !defined(SDMMC_CDIR_NA )
621+ if (SD_PinNames .pin_cdir != NC ) {
579622 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_cdir ), STM_GPIO_PIN (SD_PinNames .pin_cdir ));
623+ }
624+ #endif
625+ #if !defined(SDMMC_D0DIR_NA )
626+ if (SD_PinNames .pin_d0dir != NC ) {
580627 HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_d0dir ), STM_GPIO_PIN (SD_PinNames .pin_d0dir ));
581- HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_d123dir ), STM_GPIO_PIN (SD_PinNames .pin_d123dir ));
582628 }
583629#endif
630+ #if !defined(SDMMC_D123DIR_NA )
631+ if (SD_PinNames .pin_d123dir != NC ) {
632+ HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_d123dir ), STM_GPIO_PIN (SD_PinNames .pin_d123dir ));
633+ }
584634#endif
635+ #endif /* SDMMC1 || SDMMC2 */
636+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
585637
586638 /* Disable SD clock */
587- #if defined(SDMMC1 ) && defined(SDMMC2 )
639+ #if defined(SDMMC1 ) || defined(SDMMC2 )
640+ #if defined(SDMMC1 )
588641 if (hsd -> Instance == SDMMC1 ) {
589- SD_CLK_DISABLE ();
590- } else {
591- SD_CLK2_DISABLE ();
642+ __HAL_RCC_SDMMC1_CLK_DISABLE ();
592643 }
644+ #endif
645+ #if defined(SDMMC2 )
646+ if (hsd -> Instance == SDMMC2 ) {
647+ __HAL_RCC_SDMMC2_CLK_DISABLE ();
648+ }
649+ #endif
593650#else
594651 UNUSED (hsd );
595- SD_CLK_DISABLE ();
652+ __HAL_RCC_SDIO_CLK_DISABLE ();
596653#endif
597654}
598655
0 commit comments