43
43
/* Definition for BSP SD */
44
44
#if defined(SDMMC1 ) || defined(SDMMC2 )
45
45
#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
54
51
#endif
55
52
56
53
#define SD_CLK_EDGE SDMMC_CLOCK_EDGE_RISING
84
81
85
82
#elif defined(SDIO )
86
83
#define SD_INSTANCE SDIO
87
- #define SD_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE
88
- #define SD_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE
89
84
#define SD_CLK_EDGE SDIO_CLOCK_EDGE_RISING
90
85
#if defined(SDIO_CLOCK_BYPASS_DISABLE )
91
86
#define SD_CLK_BYPASS SDIO_CLOCK_BYPASS_DISABLE
@@ -160,12 +155,20 @@ uint8_t BSP_SD_GetInstance(void)
160
155
SD_PinNames .pin_d3 = PinMap_SD_DATA3 [0 ].pin ;
161
156
SD_PinNames .pin_cmd = PinMap_SD_CMD [0 ].pin ;
162
157
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 )
164
160
SD_PinNames .pin_ckin = PinMap_SD_CKIN [0 ].pin ;
161
+ #endif
162
+ #if !defined(SDMMC_CDIR_NA )
165
163
SD_PinNames .pin_cdir = PinMap_SD_CDIR [0 ].pin ;
164
+ #endif
165
+ #if !defined(SDMMC_D0DIR_NA )
166
166
SD_PinNames .pin_d0dir = PinMap_SD_D0DIR [0 ].pin ;
167
+ #endif
168
+ #if !defined(SDMMC_D123DIR_NA )
167
169
SD_PinNames .pin_d123dir = PinMap_SD_D123DIR [0 ].pin ;
168
- #endif /* SDMMC1 && SDMMC2 */
170
+ #endif
171
+ #endif /* SDMMC1 || SDMMC2 */
169
172
}
170
173
/* Get SD instance from pins */
171
174
sd_d0 = pinmap_peripheral (SD_PinNames .pin_d0 , PinMap_SD_DATA0 );
@@ -192,36 +195,52 @@ uint8_t BSP_SD_GetInstance(void)
192
195
return MSD_ERROR ;
193
196
}
194
197
uSdHandle .Instance = sd_base ;
195
- #if defined(SDMMC1 ) && defined(SDMMC2 )
198
+ #if defined(SDMMC1 ) || defined(SDMMC2 )
199
+ #if !defined(SDMMC_CKIN_NA )
196
200
if (SD_PinNames .pin_ckin != NC ) {
197
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 ) {
198
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 ) {
199
219
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" );
205
222
return MSD_ERROR ;
206
223
}
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" );
212
231
return MSD_ERROR ;
213
232
}
214
- uSdHandle .Instance = pinmap_merge_peripheral (sd_base , sdmmc_base );
215
233
}
216
234
#endif
235
+ #endif /* SDMMC1 || SDMMC2 */
217
236
/* Are all pins connected to the same SDx instance? */
218
237
if (uSdHandle .Instance == NP ) {
219
238
core_debug ("ERROR: SD pins mismatch\n" );
220
239
return MSD_ERROR ;
221
240
}
222
241
return MSD_OK ;
223
242
}
224
- #endif /* STM32_CORE_VERSION */
243
+ #endif /* STM32_CORE_VERSION && (STM32_CORE_VERSION > 0x02050000) */
225
244
226
245
/**
227
246
* @brief Initializes the SD card device with CS check if any.
@@ -240,7 +259,7 @@ uint8_t BSP_SD_Init(void)
240
259
if (BSP_SD_GetInstance () == MSD_ERROR ) {
241
260
return MSD_ERROR ;
242
261
}
243
- #endif
262
+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
244
263
245
264
uSdHandle .Init .ClockEdge = SD_CLK_EDGE ;
246
265
#if defined(SD_CLK_BYPASS )
@@ -508,25 +527,44 @@ __weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
508
527
pinmap_pinout (SD_PinNames .pin_d3 , PinMap_SD_DATA3 );
509
528
pinmap_pinout (SD_PinNames .pin_cmd , PinMap_SD_CMD );
510
529
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 )
512
532
if (SD_PinNames .pin_ckin != NC ) {
513
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 ) {
514
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 ) {
515
543
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 ) {
516
548
pinmap_pinout (SD_PinNames .pin_d123dir , PinMap_SD_D123DIR );
517
549
}
518
550
#endif
551
+ #endif /* SDMMC1 || SDMMC2 */
552
+ #endif /* !STM32_CORE_VERSION || (STM32_CORE_VERSION <= 0x02050000) */
519
553
/* Enable SD clock */
520
- #if defined(SDMMC1 ) && defined(SDMMC2 )
554
+ #if defined(SDMMC1 ) || defined(SDMMC2 )
555
+ #if defined(SDMMC1 )
521
556
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 ();
525
563
}
564
+ #endif
526
565
#else
527
566
UNUSED (hsd );
528
- SD_CLK_ENABLE ();
529
- #endif
567
+ __HAL_RCC_SDIO_CLK_ENABLE ();
530
568
#endif
531
569
}
532
570
@@ -573,26 +611,45 @@ __weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
573
611
HAL_GPIO_DeInit ((GPIO_TypeDef * )STM_PORT (SD_PinNames .pin_d3 ), STM_GPIO_PIN (SD_PinNames .pin_d3 ));
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
- #if defined(SDMMC1 ) && defined(SDMMC2 )
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
- #if defined(SDMMC1 ) && defined(SDMMC2 )
639
+ #if defined(SDMMC1 ) || defined(SDMMC2 )
640
+ #if defined(SDMMC1 )
588
641
if (hsd -> Instance == SDMMC1 ) {
589
- SD_CLK_DISABLE ();
590
- } else {
591
- SD_CLK2_DISABLE ();
642
+ __HAL_RCC_SDMMC1_CLK_DISABLE ();
592
643
}
644
+ #endif
645
+ #if defined(SDMMC2 )
646
+ if (hsd -> Instance == SDMMC2 ) {
647
+ __HAL_RCC_SDMMC2_CLK_DISABLE ();
648
+ }
649
+ #endif
593
650
#else
594
651
UNUSED (hsd );
595
- SD_CLK_DISABLE ();
652
+ __HAL_RCC_SDIO_CLK_DISABLE ();
596
653
#endif
597
654
}
598
655
0 commit comments