@@ -156,10 +156,18 @@ uint8_t BSP_SD_GetInstance(void)
156156 SD_PinNames .pin_cmd = PinMap_SD_CMD [0 ].pin ;
157157 SD_PinNames .pin_ck = PinMap_SD_CK [0 ].pin ;
158158#if defined(SDMMC1 ) || defined(SDMMC2 )
159+ #if !defined(SDMMC_CKIN_NA )
159160 SD_PinNames .pin_ckin = PinMap_SD_CKIN [0 ].pin ;
161+ #endif
162+ #if !defined(SDMMC_CDIR_NA )
160163 SD_PinNames .pin_cdir = PinMap_SD_CDIR [0 ].pin ;
164+ #endif
165+ #if !defined(SDMMC_D0DIR_NA )
161166 SD_PinNames .pin_d0dir = PinMap_SD_D0DIR [0 ].pin ;
167+ #endif
168+ #if !defined(SDMMC_D123DIR_NA )
162169 SD_PinNames .pin_d123dir = PinMap_SD_D123DIR [0 ].pin ;
170+ #endif
163171#endif /* SDMMC1 || SDMMC2 */
164172 }
165173 /* Get SD instance from pins */
@@ -188,35 +196,51 @@ uint8_t BSP_SD_GetInstance(void)
188196 }
189197 uSdHandle .Instance = sd_base ;
190198#if defined(SDMMC1 ) || defined(SDMMC2 )
199+ #if !defined(SDMMC_CKIN_NA )
191200 if (SD_PinNames .pin_ckin != NC ) {
192201 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 ) {
193210 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 ) {
194219 SD_TypeDef * sd_d0dir = pinmap_peripheral (SD_PinNames .pin_d0dir , PinMap_SD_D0DIR );
195- SD_TypeDef * sd_d123dir = pinmap_peripheral (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
196-
197- /* Pins Dx/cmd/CK must not be NP. */
198- if (sd_ckin == NP || sd_cdir == NP || sd_d0dir == NP || sd_d123dir == NP ) {
199- 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" );
200222 return MSD_ERROR ;
201223 }
202- SD_TypeDef * sdmmc_cx = pinmap_merge_peripheral (sd_ckin , sd_cdir );
203- SD_TypeDef * sdmmc_dx = pinmap_merge_peripheral (sd_d0dir , sd_d123dir );
204- SD_TypeDef * sdmmc_base = pinmap_merge_peripheral (sdmmc_cx , sdmmc_dx );
205- if (sdmmc_cx == NP || sdmmc_dx == NP || sdmmc_base == NP ) {
206- 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" );
207231 return MSD_ERROR ;
208232 }
209- uSdHandle .Instance = pinmap_merge_peripheral (sd_base , sdmmc_base );
210233 }
211234#endif
235+ #endif /* SDMMC1 || SDMMC2 */
212236 /* Are all pins connected to the same SDx instance? */
213237 if (uSdHandle .Instance == NP ) {
214238 core_debug ("ERROR: SD pins mismatch\n" );
215239 return MSD_ERROR ;
216240 }
217241 return MSD_OK ;
218242}
219- #endif /* STM32_CORE_VERSION */
243+ #endif /* STM32_CORE_VERSION && (STM32_CORE_VERSION > 0x02050000) */
220244
221245/**
222246 * @brief Initializes the SD card device with CS check if any.
@@ -235,7 +259,7 @@ uint8_t BSP_SD_Init(void)
235259 if (BSP_SD_GetInstance () == MSD_ERROR ) {
236260 return MSD_ERROR ;
237261 }
238- #endif
262+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
239263
240264 uSdHandle .Init .ClockEdge = SD_CLK_EDGE ;
241265#if defined(SD_CLK_BYPASS )
@@ -504,14 +528,28 @@ __weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
504528 pinmap_pinout (SD_PinNames .pin_cmd , PinMap_SD_CMD );
505529 pinmap_pinout (SD_PinNames .pin_ck , PinMap_SD_CK );
506530#if defined(SDMMC1 ) || defined(SDMMC2 )
531+ #if !defined(SDMMC_CKIN_NA )
507532 if (SD_PinNames .pin_ckin != NC ) {
508533 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 ) {
509538 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 ) {
510543 pinmap_pinout (SD_PinNames .pin_d0dir , PinMap_SD_D0DIR );
511- pinmap_pinout (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
512544 }
513545#endif
546+ #if !defined(SDMMC_D123DIR_NA )
547+ if (SD_PinNames .pin_d123dir != NC ) {
548+ pinmap_pinout (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
549+ }
514550#endif
551+ #endif /* SDMMC1 || SDMMC2 */
552+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
515553 /* Enable SD clock */
516554#if defined(SDMMC1 ) || defined(SDMMC2 )
517555#if defined(SDMMC1 )
@@ -574,14 +612,28 @@ __weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
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 ));
576614#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 */
587639#if defined(SDMMC1 ) || defined(SDMMC2 )
0 commit comments