Skip to content

Commit 4755239

Browse files
authored
Merge pull request #61 from fpistm/fix
fix: wrong preprocessor definitions
2 parents c000dfe + 67baf6e commit 4755239

File tree

2 files changed

+119
-40
lines changed

2 files changed

+119
-40
lines changed

Diff for: src/bsp_sd.c

+97-40
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,11 @@
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
@@ -84,8 +81,6 @@
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

Diff for: src/bsp_sd.h

+22
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,28 @@ Please update the core or install previous library version."
9090
#define GPIO_PIN_All GPIO_PIN_ALL
9191
#endif
9292

93+
/* Workaround while core does not defined *_NA for SDMMCx signals availability */
94+
#if defined(SDMMC1) || defined(SDMMC2)
95+
#if defined(STM32L4P5xx) || defined(STM32L4Q5xx) || defined(STM32L4R5xx) || defined(STM32L4R7xx) ||\
96+
defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
97+
#define STM32L4xx_PLUS
98+
#endif
99+
#if defined(STM32F7xx) || (defined(STM32L4xx) && !defined(STM32L4xx_PLUS))
100+
#if !defined(SDMMC_CKIN_NA)
101+
#define SDMMC_CKIN_NA
102+
#endif
103+
#if !defined(SDMMC_CDIR_NA)
104+
#define SDMMC_CDIR_NA
105+
#endif
106+
#if !defined(SDMMC_D0DIR_NA)
107+
#define SDMMC_D0DIR_NA
108+
#endif
109+
#if !defined(SDMMC_D123DIR_NA)
110+
#define SDMMC_D123DIR_NA
111+
#endif
112+
#endif /* STM32F7xx || STM32L4xx_PLUS */
113+
#endif /* SDMMC1 || SDMMC2 */
114+
93115
/* Default SDx pins definitions */
94116
#ifndef SDX_D0
95117
#define SDX_D0 NUM_DIGITAL_PINS

0 commit comments

Comments
 (0)