81
81
/* Includes ------------------------------------------------------------------*/
82
82
#include "bsp_sd.h"
83
83
84
+ #ifdef SDMMC1
85
+ /* Definition for BSP SD */
86
+ #define SD_INSTANCE SDMMC1
87
+ #define SD_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE
88
+ #define SD_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE
89
+ #define SD_CLK_EDGE SDMMC_CLOCK_EDGE_RISING
90
+ #define SD_CLK_BYPASS SDMMC_CLOCK_BYPASS_DISABLE
91
+ #define SD_CLK_PWR_SAVE SDMMC_CLOCK_POWER_SAVE_DISABLE
92
+ #define SD_BUS_WIDE_1B SDMMC_BUS_WIDE_1B
93
+ #define SD_BUS_WIDE_4B SDMMC_BUS_WIDE_4B
94
+ #define SD_HW_FLOW_CTRL SDMMC_HARDWARE_FLOW_CONTROL_DISABLE
95
+ #define SD_CLK_DIV SDMMC_TRANSFER_CLK_DIV
96
+ /* Definition for MSP SD */
97
+ #define SD_AF GPIO_AF12_SDMMC1
98
+ #elif defined(SDIO )
99
+ /* Definition for BSP SD */
100
+ #define SD_INSTANCE SDIO
101
+ #define SD_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE
102
+ #define SD_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE
103
+ #define SD_CLK_EDGE SDIO_CLOCK_EDGE_RISING
104
+ #define SD_CLK_BYPASS SDIO_CLOCK_BYPASS_DISABLE
105
+ #define SD_CLK_PWR_SAVE SDIO_CLOCK_POWER_SAVE_DISABLE
106
+ #define SD_BUS_WIDE_1B SDIO_BUS_WIDE_1B
107
+ #define SD_BUS_WIDE_4B SDIO_BUS_WIDE_4B
108
+ #define SD_HW_FLOW_CTRL SDIO_HARDWARE_FLOW_CONTROL_DISABLE
109
+ #define SD_CLK_DIV SDIO_TRANSFER_CLK_DIV
110
+ /* Definition for MSP SD */
111
+ #define SD_AF GPIO_AF12_SDIO
112
+ #else
113
+ #error "Unknown SD_INSTANCE"
114
+ #endif
115
+
84
116
/* BSP SD Private Variables */
85
117
static SD_HandleTypeDef uSdHandle ;
118
+ static uint32_t SD_detect_gpio_pin = GPIO_PIN_All ;
119
+ static GPIO_TypeDef * SD_detect_gpio_port = GPIOA ;
86
120
#if defined (STM32F4xx ) || defined(STM32F7xx ) || defined(STM32L4xx )
87
121
#define SD_OK HAL_OK
88
122
#define SD_TRANSFER_OK ((uint8_t)0x00)
@@ -145,10 +179,11 @@ uint8_t BSP_SD_Init(void)
145
179
* @brief Initializes the SD card device with CS initialization.
146
180
* @retval SD status
147
181
*/
148
- uint8_t BSP_SD_CSInit (void )
182
+ uint8_t BSP_SD_CSInit (GPIO_TypeDef * csport , uint32_t cspin )
149
183
{
150
184
uint8_t sd_state = MSD_OK ;
151
-
185
+ SD_detect_gpio_pin = cspin ;
186
+ SD_detect_gpio_port = csport ;
152
187
/* PLLSAI is dedicated to LCD periph. Do not use it to get 48MHz*/
153
188
154
189
/* uSD device interface configuration */
@@ -226,20 +261,61 @@ uint8_t BSP_SD_DeInit(void)
226
261
*/
227
262
uint8_t BSP_SD_ITConfig (void )
228
263
{
264
+ uint8_t sd_state = MSD_OK ;
229
265
GPIO_InitTypeDef gpio_init_structure ;
266
+ IRQn_Type sd_detect_EXTI_IRQn = EXTI0_IRQn ;
230
267
231
268
/* Configure Interrupt mode for SD detection pin */
232
- gpio_init_structure .Pin = SD_DETECT_PIN ;
269
+ gpio_init_structure .Pin = SD_detect_gpio_pin ;
233
270
gpio_init_structure .Pull = GPIO_PULLUP ;
234
271
gpio_init_structure .Speed = GPIO_SPEED_FAST ;
235
272
gpio_init_structure .Mode = GPIO_MODE_IT_RISING_FALLING ;
236
- HAL_GPIO_Init (SD_DETECT_GPIO_PORT , & gpio_init_structure );
237
-
238
- /* Enable and set SD detect EXTI Interrupt to the lowest priority */
239
- HAL_NVIC_SetPriority ((IRQn_Type )(SD_DETECT_EXTI_IRQn ), 0x0F , 0x00 );
240
- HAL_NVIC_EnableIRQ ((IRQn_Type )(SD_DETECT_EXTI_IRQn ));
241
-
242
- return MSD_OK ;
273
+ HAL_GPIO_Init (SD_detect_gpio_port , & gpio_init_structure );
274
+
275
+ if (SD_detect_gpio_pin == GPIO_PIN_0 ) {
276
+ sd_detect_EXTI_IRQn = EXTI0_IRQn ;
277
+ } else {
278
+ if (SD_detect_gpio_pin == GPIO_PIN_1 ) {
279
+ sd_detect_EXTI_IRQn = EXTI1_IRQn ;
280
+ } else {
281
+ if (SD_detect_gpio_pin == GPIO_PIN_2 ) {
282
+ sd_detect_EXTI_IRQn = EXTI2_IRQn ;
283
+ } else {
284
+ if (SD_detect_gpio_pin == GPIO_PIN_3 ) {
285
+ sd_detect_EXTI_IRQn = EXTI3_IRQn ;
286
+ } else {
287
+ if (SD_detect_gpio_pin == GPIO_PIN_4 ) {
288
+ sd_detect_EXTI_IRQn = EXTI4_IRQn ;
289
+ } else {
290
+ if ((SD_detect_gpio_pin == GPIO_PIN_5 ) || \
291
+ (SD_detect_gpio_pin == GPIO_PIN_6 ) || \
292
+ (SD_detect_gpio_pin == GPIO_PIN_7 ) || \
293
+ (SD_detect_gpio_pin == GPIO_PIN_8 ) || \
294
+ (SD_detect_gpio_pin == GPIO_PIN_9 )) {
295
+ sd_detect_EXTI_IRQn = EXTI9_5_IRQn ;
296
+ } else {
297
+ if ((SD_detect_gpio_pin == GPIO_PIN_10 ) || \
298
+ (SD_detect_gpio_pin == GPIO_PIN_11 ) || \
299
+ (SD_detect_gpio_pin == GPIO_PIN_12 ) || \
300
+ (SD_detect_gpio_pin == GPIO_PIN_13 ) || \
301
+ (SD_detect_gpio_pin == GPIO_PIN_14 ) || \
302
+ (SD_detect_gpio_pin == GPIO_PIN_15 )) {
303
+ sd_detect_EXTI_IRQn = EXTI15_10_IRQn ;
304
+ } else {
305
+ sd_state = MSD_ERROR ;
306
+ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+ }
313
+ if (sd_state == MSD_OK ) {
314
+ /* Enable and set SD detect EXTI Interrupt to the lowest priority */
315
+ HAL_NVIC_SetPriority (sd_detect_EXTI_IRQn , 0x0F , 0x00 );
316
+ HAL_NVIC_EnableIRQ (sd_detect_EXTI_IRQn );
317
+ }
318
+ return sd_state ;
243
319
}
244
320
245
321
/**
@@ -251,7 +327,7 @@ uint8_t BSP_SD_IsDetected(void)
251
327
uint8_t status = SD_PRESENT ;
252
328
253
329
/* Check SD card detect pin */
254
- if (HAL_GPIO_ReadPin (SD_DETECT_GPIO_PORT , SD_DETECT_PIN ) == GPIO_PIN_SET )
330
+ if (HAL_GPIO_ReadPin (SD_detect_gpio_port , SD_detect_gpio_pin ) == GPIO_PIN_SET )
255
331
{
256
332
status = SD_NOT_PRESENT ;
257
333
}
@@ -363,14 +439,12 @@ __weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params)
363
439
UNUSED (Params );
364
440
GPIO_InitTypeDef gpio_init_structure ;
365
441
366
- SD_DETECT_GPIO_CLK_ENABLE ();
367
-
368
442
/* GPIO configuration in input for uSD_Detect signal */
369
- gpio_init_structure .Pin = SD_DETECT_PIN ;
443
+ gpio_init_structure .Pin = SD_detect_gpio_pin ;
370
444
gpio_init_structure .Mode = GPIO_MODE_INPUT ;
371
445
gpio_init_structure .Pull = GPIO_PULLUP ;
372
446
gpio_init_structure .Speed = GPIO_SPEED_HIGH ;
373
- HAL_GPIO_Init (SD_DETECT_GPIO_PORT , & gpio_init_structure );
447
+ HAL_GPIO_Init (SD_detect_gpio_port , & gpio_init_structure );
374
448
}
375
449
376
450
/**
@@ -389,7 +463,7 @@ __weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
389
463
(by surcharging this __weak function) */
390
464
391
465
/* Disable SDIO clock */
392
- __HAL_RCC_SDIO_CLK_DISABLE ();
466
+ SD_CLK_DISABLE ();
393
467
394
468
/* GPOI pins clock and DMA cloks can be shut down in the applic
395
469
by surcgarging this __weak function */
0 commit comments