@@ -156,10 +156,18 @@ uint8_t BSP_SD_GetInstance(void)
156
156
SD_PinNames .pin_cmd = PinMap_SD_CMD [0 ].pin ;
157
157
SD_PinNames .pin_ck = PinMap_SD_CK [0 ].pin ;
158
158
#if defined(SDMMC1 ) || defined(SDMMC2 )
159
+ #if !defined(SDMMC_CKIN_NA )
159
160
SD_PinNames .pin_ckin = PinMap_SD_CKIN [0 ].pin ;
161
+ #endif
162
+ #if !defined(SDMMC_CDIR_NA )
160
163
SD_PinNames .pin_cdir = PinMap_SD_CDIR [0 ].pin ;
164
+ #endif
165
+ #if !defined(SDMMC_D0DIR_NA )
161
166
SD_PinNames .pin_d0dir = PinMap_SD_D0DIR [0 ].pin ;
167
+ #endif
168
+ #if !defined(SDMMC_D123DIR_NA )
162
169
SD_PinNames .pin_d123dir = PinMap_SD_D123DIR [0 ].pin ;
170
+ #endif
163
171
#endif /* SDMMC1 || SDMMC2 */
164
172
}
165
173
/* Get SD instance from pins */
@@ -188,35 +196,51 @@ uint8_t BSP_SD_GetInstance(void)
188
196
}
189
197
uSdHandle .Instance = sd_base ;
190
198
#if defined(SDMMC1 ) || defined(SDMMC2 )
199
+ #if !defined(SDMMC_CKIN_NA )
191
200
if (SD_PinNames .pin_ckin != NC ) {
192
201
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 ) {
193
210
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 ) {
194
219
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" );
200
222
return MSD_ERROR ;
201
223
}
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" );
207
231
return MSD_ERROR ;
208
232
}
209
- uSdHandle .Instance = pinmap_merge_peripheral (sd_base , sdmmc_base );
210
233
}
211
234
#endif
235
+ #endif /* SDMMC1 || SDMMC2 */
212
236
/* Are all pins connected to the same SDx instance? */
213
237
if (uSdHandle .Instance == NP ) {
214
238
core_debug ("ERROR: SD pins mismatch\n" );
215
239
return MSD_ERROR ;
216
240
}
217
241
return MSD_OK ;
218
242
}
219
- #endif /* STM32_CORE_VERSION */
243
+ #endif /* STM32_CORE_VERSION && (STM32_CORE_VERSION > 0x02050000) */
220
244
221
245
/**
222
246
* @brief Initializes the SD card device with CS check if any.
@@ -235,7 +259,7 @@ uint8_t BSP_SD_Init(void)
235
259
if (BSP_SD_GetInstance () == MSD_ERROR ) {
236
260
return MSD_ERROR ;
237
261
}
238
- #endif
262
+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
239
263
240
264
uSdHandle .Init .ClockEdge = SD_CLK_EDGE ;
241
265
#if defined(SD_CLK_BYPASS )
@@ -504,14 +528,28 @@ __weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
504
528
pinmap_pinout (SD_PinNames .pin_cmd , PinMap_SD_CMD );
505
529
pinmap_pinout (SD_PinNames .pin_ck , PinMap_SD_CK );
506
530
#if defined(SDMMC1 ) || defined(SDMMC2 )
531
+ #if !defined(SDMMC_CKIN_NA )
507
532
if (SD_PinNames .pin_ckin != NC ) {
508
533
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 ) {
509
538
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 ) {
510
543
pinmap_pinout (SD_PinNames .pin_d0dir , PinMap_SD_D0DIR );
511
- pinmap_pinout (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
512
544
}
513
545
#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
+ }
514
550
#endif
551
+ #endif /* SDMMC1 || SDMMC2 */
552
+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
515
553
/* Enable SD clock */
516
554
#if defined(SDMMC1 ) || defined(SDMMC2 )
517
555
#if defined(SDMMC1 )
@@ -574,14 +612,28 @@ __weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
574
612
HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_cmd ), STM_GPIO_PIN (SD_PinNames .pin_cmd ));
575
613
HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_ck ), STM_GPIO_PIN (SD_PinNames .pin_ck ));
576
614
#if defined(SDMMC1 ) || defined(SDMMC2 )
615
+ #if !defined(SDMMC_CKIN_NA )
577
616
if (SD_PinNames .pin_ckin != NC ) {
578
617
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 ) {
579
622
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 ) {
580
627
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 ));
582
628
}
583
629
#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
+ }
584
634
#endif
635
+ #endif /* SDMMC1 || SDMMC2 */
636
+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
585
637
586
638
/* Disable SD clock */
587
639
#if defined(SDMMC1 ) || defined(SDMMC2 )
0 commit comments