Skip to content

Commit 7e8c73f

Browse files
committed
libs/hardware/SDCard: Fix SDCard initialization failure.
Signed-off-by: lbuque <[email protected]>
1 parent 9dc226d commit 7e8c73f

File tree

3 files changed

+27
-23
lines changed

3 files changed

+27
-23
lines changed

m5stack/libs/hardware/sdcard.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
import machine, os
22

3-
sd = None
3+
def create_sdcard_closure():
4+
sd = None
45

6+
def SDCard(
7+
slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None, cs=None, freq=20000000
8+
):
9+
nonlocal sd
10+
try:
11+
os.umount("/sd")
12+
sd.deinit()
13+
except Exception as e:
14+
print(e)
15+
finally:
16+
sd = machine.SDCard(
17+
slot=slot, width=width, cd=cd, wp=wp, sck=sck, miso=miso, mosi=mosi, cs=cs, freq=freq
18+
)
19+
sd.info()
20+
os.mount(sd, "/sd")
521

6-
def SDCard(
7-
slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None, cs=None, freq=20000000
8-
):
9-
global sd
10-
try:
11-
os.umount("/sd")
12-
sd.deinit()
13-
except Exception as e:
14-
print(e)
15-
finally:
16-
sd = machine.SDCard(
17-
slot=slot, width=width, cd=cd, wp=wp, sck=sck, miso=miso, mosi=mosi, cs=cs, freq=freq
18-
)
19-
sd.info()
20-
os.mount(sd, "/sd")
22+
return SDCard
23+
24+
SDCard = create_sdcard_closure()

m5stack/machine_hw_spi.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ STATIC void machine_hw_spi_deinit_internal(machine_hw_spi_obj_t *self) {
124124
case ESP_ERR_INVALID_STATE:
125125
// NOTE:
126126
// core2和cores3的屏幕和sd卡复用一个spi,
127-
// 所以这里不需要对VSPI_HOST和SPI3_HOST进行初始化
127+
// 所以这里不需要对VSPI_HOST和SPI2_HOST进行初始化
128128
if (self->host != SPI2_HOST) {
129129
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("SPI device already freed"));
130130
return;
@@ -133,7 +133,7 @@ STATIC void machine_hw_spi_deinit_internal(machine_hw_spi_obj_t *self) {
133133

134134
// NOTE:
135135
// core2和cores3的屏幕和sd卡复用一个spi,
136-
// 所以这里不需要对VSPI_HOST和SPI3_HOST进行初始化
136+
// 所以这里不需要对VSPI_HOST和SPI2_HOST进行初始化
137137
if (self->host != SPI2_HOST) {
138138
switch (spi_bus_free(self->host)) {
139139
case ESP_ERR_INVALID_ARG:
@@ -275,7 +275,7 @@ STATIC void machine_hw_spi_init_internal(
275275
case ESP_ERR_INVALID_STATE:
276276
// NOTE:
277277
// core2和cores3的屏幕和sd卡复用一个spi,
278-
// 所以这里不需要对VSPI_HOST和SPI3_HOST进行初始化
278+
// 所以这里不需要对VSPI_HOST和SPI2_HOST进行初始化
279279
if (self->host != SPI2_HOST) {
280280
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("SPI host already in use"));
281281
return;

m5stack/machine_sdcard.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,11 @@ STATIC mp_obj_t machine_sdcard_make_new(const mp_obj_type_t *type, size_t n_args
277277
#if CONFIG_IDF_TARGET_ESP32
278278
if (spi_host_id == HSPI_HOST) {
279279
#else
280-
if (spi_host_id == SPI2_HOST) {
280+
if (spi_host_id == SPI3_HOST) {
281281
#endif
282282
// NOTE:
283283
// core2和cores3的屏幕和sd卡复用一个spi,
284-
// 所以这里不需要对VSPI_HOST和SPI3_HOST进行初始化
284+
// 所以这里不需要对VSPI_HOST和SPI2_HOST进行初始化
285285
DEBUG_printf(" Calling spi_bus_initialize()");
286286
check_esp_err(spi_bus_initialize(spi_host_id, &bus_config, dma_channel));
287287
}
@@ -339,9 +339,9 @@ STATIC mp_obj_t sd_deinit(mp_obj_t self_in) {
339339
if (self->host.flags & SDMMC_HOST_FLAG_SPI) {
340340
// SD card used a (dedicated) SPI bus, so free that SPI bus.
341341
#if CONFIG_IDF_TARGET_ESP32
342-
if ((self->host.slot + 2) == HSPI_HOST) {
342+
if (self->host.slot == HSPI_HOST) {
343343
#else
344-
if ((self->host.slot + 2) == SPI2_HOST) {
344+
if (self->host.slot == SPI3_HOST) {
345345
#endif
346346
spi_bus_free(self->host.slot);
347347
}

0 commit comments

Comments
 (0)