Skip to content

Commit 7aed455

Browse files
committed
fix: SD_BUS_WIDE support
Only one pin is required on SD_BUS_WIDE_1B. Fixes #73. Signed-off-by: Frederic Pillon <[email protected]>
1 parent 75cded5 commit 7aed455

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,6 @@ By default, if no pins are explicitly defined, the first one from each array is
144144
* `SD_BUS_WIDE`: specifies the SDMMC bus width
145145
* `SD_BUS_WIDE_1B`
146146
* `SD_BUS_WIDE_4B` (default)
147-
* `SD_BUS_WIDE_8B`
148147

149148
* `SD_CLK_DIV`: specifies the clock frequency of the SDMMC controller (0-255)
150149
* `SDIO_TRANSFER_CLK_DIV` (default) for `SDIO`

src/bsp_sd.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
#define SD_CLK_PWR_SAVE SDMMC_CLOCK_POWER_SAVE_DISABLE
5858
#define SD_BUS_WIDE_1B SDMMC_BUS_WIDE_1B
5959
#define SD_BUS_WIDE_4B SDMMC_BUS_WIDE_4B
60-
#define SD_BUS_WIDE_8B SDMMC_BUS_WIDE_8B
6160
#define SD_HW_FLOW_CTRL_ENABLE SDMMC_HARDWARE_FLOW_CONTROL_ENABLE
6261
#define SD_HW_FLOW_CTRL_DISABLE SDMMC_HARDWARE_FLOW_CONTROL_DISABLE
6362

@@ -88,7 +87,6 @@
8887
#define SD_CLK_PWR_SAVE SDIO_CLOCK_POWER_SAVE_DISABLE
8988
#define SD_BUS_WIDE_1B SDIO_BUS_WIDE_1B
9089
#define SD_BUS_WIDE_4B SDIO_BUS_WIDE_4B
91-
#define SD_BUS_WIDE_8B SDIO_BUS_WIDE_8B
9290
#define SD_HW_FLOW_CTRL_ENABLE SDIO_HARDWARE_FLOW_CONTROL_ENABLE
9391
#define SD_HW_FLOW_CTRL_DISABLE SDIO_HARDWARE_FLOW_CONTROL_DISABLE
9492
#ifndef SD_CLK_DIV
@@ -150,9 +148,11 @@ uint8_t BSP_SD_GetInstance(void)
150148
if (SD_PinNames.pin_d0 == NC) {
151149
/* No pin defined assume to use first pin available in each PinMap_SD_* arrays */
152150
SD_PinNames.pin_d0 = PinMap_SD_DATA0[0].pin;
151+
#if SD_BUS_WIDE == SD_BUS_WIDE_4B
153152
SD_PinNames.pin_d1 = PinMap_SD_DATA1[0].pin;
154153
SD_PinNames.pin_d2 = PinMap_SD_DATA2[0].pin;
155154
SD_PinNames.pin_d3 = PinMap_SD_DATA3[0].pin;
155+
#endif
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)
@@ -172,15 +172,20 @@ uint8_t BSP_SD_GetInstance(void)
172172
}
173173
/* Get SD instance from pins */
174174
sd_d0 = pinmap_peripheral(SD_PinNames.pin_d0, PinMap_SD_DATA0);
175+
#if SD_BUS_WIDE == SD_BUS_WIDE_4B
175176
sd_d1 = pinmap_peripheral(SD_PinNames.pin_d1, PinMap_SD_DATA1);
176177
sd_d2 = pinmap_peripheral(SD_PinNames.pin_d2, PinMap_SD_DATA2);
177178
sd_d3 = pinmap_peripheral(SD_PinNames.pin_d3, PinMap_SD_DATA3);
178-
179+
#endif
179180
sd_cmd = pinmap_peripheral(SD_PinNames.pin_cmd, PinMap_SD_CMD);
180181
sd_ck = pinmap_peripheral(SD_PinNames.pin_ck, PinMap_SD_CK);
181182

182183
/* Pins Dx/cmd/CK must not be NP. */
183-
if (sd_d0 == NP || sd_d1 == NP || sd_d2 == NP || sd_d3 == NP || sd_cmd == NP || sd_ck == NP) {
184+
if (sd_d0 == NP ||
185+
#if SD_BUS_WIDE == SD_BUS_WIDE_4B
186+
sd_d1 == NP || sd_d2 == NP || sd_d3 == NP ||
187+
#endif
188+
sd_cmd == NP || sd_ck == NP) {
184189
core_debug("ERROR: at least one SD pin has no peripheral\n");
185190
return MSD_ERROR;
186191
}
@@ -190,7 +195,11 @@ uint8_t BSP_SD_GetInstance(void)
190195
SD_TypeDef *sd_cx = pinmap_merge_peripheral(sd_cmd, sd_ck);
191196
SD_TypeDef *sd_dx = pinmap_merge_peripheral(sd_d01, sd_d23);
192197
SD_TypeDef *sd_base = pinmap_merge_peripheral(sd_dx, sd_cx);
193-
if (sd_d01 == NP || sd_d23 == NP || sd_cx == NP || sd_dx == NP || sd_base == NP) {
198+
if (sd_d01 == NP ||
199+
#if SD_BUS_WIDE == SD_BUS_WIDE_4B
200+
sd_d23 == NP ||
201+
#endif
202+
sd_cx == NP || sd_dx == NP || sd_base == NP) {
194203
core_debug("ERROR: SD pins mismatch\n");
195204
return MSD_ERROR;
196205
}
@@ -522,9 +531,11 @@ __weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
522531
#else
523532
/* Configure SD GPIO pins */
524533
pinmap_pinout(SD_PinNames.pin_d0, PinMap_SD_DATA0);
534+
#if SD_BUS_WIDE == SD_BUS_WIDE_4B
525535
pinmap_pinout(SD_PinNames.pin_d1, PinMap_SD_DATA1);
526536
pinmap_pinout(SD_PinNames.pin_d2, PinMap_SD_DATA2);
527537
pinmap_pinout(SD_PinNames.pin_d3, PinMap_SD_DATA3);
538+
#endif
528539
pinmap_pinout(SD_PinNames.pin_cmd, PinMap_SD_CMD);
529540
pinmap_pinout(SD_PinNames.pin_ck, PinMap_SD_CK);
530541
#if defined(SDMMC1) || defined(SDMMC2)

0 commit comments

Comments
 (0)