SDIO Interface
-
- Posts: 8
- Joined: Sat Nov 19, 2016 12:19 am
SDIO Interface
@i_grr has posted a photo with esp module and SD Cards. Any information SD Card handling (non spi mode)?
Re: SDIO Interface
Documentation has been written but needs some editing; SD card driver is complete and should land into master soon.
Re: SDIO Interface
-------------------------------------
love it, change it or leave it.
-------------------------------------
問候飛出去的朋友遍全球魯迪
love it, change it or leave it.
-------------------------------------
問候飛出去的朋友遍全球魯迪
Re: SDIO Interface
Just tried SDIO example, it works like a charm in 1BIT mode when using pins from SLOT_1: 2,14,15.
But if I switch to a more convenient SLOT_0 pins using "host.slot= SDMMC_HOST_SLOT_0;" it leads to a crash (even if SD Card is not connected to ESP32):
Framework is updated to the latest trunk.
Code: Select all
rst:0x1 (POWERON_RESET),boot:0x1b (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0008,len:8
load:0x3fff0010,len:3384
load:0x40078000,len:7524
load:0x40080000,len:260
entry 0x40080034
I (43) boot: Espressif ESP32 2nd stage bootloader v. V0.1
I (44) boot: compile time 23:04:21
I (75) boot: Enabling RNG early entropy source...
I (76) boot: SPI Speed : 40MHz
I (76) boot: SPI Mode : DIO
I (87) boot: SPI Flash Size : 4MB
I (100) boot: Partition Table:
I (111) boot: ## Label Usage Type ST Offset Length
I (134) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (157) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (180) boot: 2 factory factory app 00 00 00010000 00100000
I (204) boot: End of partition table
I (217) boot: Disabling RNG early entropy source...
I (234) boot: Loading app partition at offset 00010000
I (658) boot: segment 0: paddr=0x00010018 vaddr=0x00000000 size=0x0ffe8 ( 65512)
I (659) boot: segment 1: paddr=0x00020008 vaddr=0x3f400010 size=0x067ec ( 26604) map
I (675) boot: segment 2: paddr=0x000267fc vaddr=0x3ffb0000 size=0x01b6c ( 7020) load
I (704) boot: segment 3: paddr=0x00028370 vaddr=0x40080000 size=0x00400 ( 1024) load
I (728) boot: segment 4: paddr=0x00028778 vaddr=0x40080400 size=0x13078 ( 77944) load
I (790) boot: segment 5: paddr=0x0003b7f8 vaddr=0x400c0000 size=0x00000 ( 0) load
I (791) boot: segment 6: paddr=0x0003b800 vaddr=0x00000000 size=0x04808 ( 18440)
I (811) boot: segment 7: paddr=0x00040010 vaddr=0x400d0018 size=0x1cb48 (117576) map
I (837) boot: segment 8: paddr=0x0005cb60 vaddr=0x50000000 size=0x00008 ( 8) load
I (865) heap_alloc_caps: Initializing. RAM available for dynamic allocation:
I (887) heap_alloc_caps: At 3FFB4AA0 len 0002B560 (173 KiB): DRAM
I (908) heap_alloc_caps: At 3FFE8000 len 00018000 (96 KiB): D/IRAM
I (929) heap_alloc_caps: At 40093478 len 0000CB88 (50 KiB): IRAM
I (950) cpu_start: Pro cpu up.
I (961) cpu_start: Single core mode
I (974) cpu_start: Pro cpu start user code
I (1207) phy: phy_version: 258, Nov 29 2016, 15:51:07, 0, 0
I (1356) cpu_start: Starting scheduler on PRO CPU.
I (1360) example: Initializing SD card
Name: SDC
Type: SDSC
Speed: default speed
Size: 244MB
CSD: ver=0, sector_size=512, capacity=499712 read_bl_len=9
SCR: sd_spec=0, bus_width=5
I (1380) example: Opening file
I (1400) example: File written
I (1410) example: Renaming file
I (1420) example: Reading file
I (1420) example: Read from file: 'Hello SDC !'
I (1420) example: Card unmounted
Code: Select all
rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0008,len:8
load:0x3fff0010,len:3384
load:0x40078000,len:7524
load:0x40080000,len:260
entry 0x40080034
I (257) boot: Espressif ESP32 2nd stage bootloader v. V0.1
I (257) boot: compile time 23:04:21
I (289) boot: Enabling RNG early entropy source...
I (290) boot: SPI Speed : 40MHz
I (290) boot: SPI Mode : DIO
I (303) boot: SPI Flash Size : 4MB
I (315) boot: Partition Table:
I (327) boot: ## Label Usage Type ST Offset Length
I (349) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (373) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (396) boot: 2 factory factory app 00 00 00010000 00100000
I (419) boot: End of partition table
I (432) boot: Disabling RNG early entropy source...
I (449) boot: Loading app partition at offset 00010000
I (874) boot: segment 0: paddr=0x00010018 vaddr=0x00000000 size=0x0ffe8 ( 65512)
I (874) boot: segment 1: paddr=0x00020008 vaddr=0x3f400010 size=0x067ec ( 26604) map
I (890) boot: segment 2: paddr=0x000267fc vaddr=0x3ffb0000 size=0x01b6c ( 7020) load
I (919) boot: segment 3: paddr=0x00028370 vaddr=0x40080000 size=0x00400 ( 1024) load
I (943) boot: segment 4: paddr=0x00028778 vaddr=0x40080400 size=0x13078 ( 77944) load
I (1006) boot: segment 5: paddr=0x0003b7f8 vaddr=0x400c0000 size=0x00000 ( 0) load
I (1007) boot: segment 6: paddr=0x0003b800 vaddr=0x00000000 size=0x04808 ( 18440)
I (1027) boot: segment 7: paddr=0x00040010 vaddr=0x400d0018 size=0x1cb48 (117576) map
I (1054) boot: segment 8: paddr=0x0005cb60 vaddr=0x50000000 size=0x00008 ( 8) load
I (1081) heap_alloc_caps: Initializing. RAM available for dynamic allocation:
I (1104) heap_alloc_caps: At 3FFB4AA0 len 0002B560 (173 KiB): DRAM
I (1125) heap_alloc_caps: At 3FFE8000 len 00018000 (96 KiB): D/IRAM
I (1146) heap_alloc_caps: At 40093478 len 0000CB88 (50 KiB): IRAM
I (1167) cpu_start: Pro cpu up.
I (1179) cpu_start: Single core mode
I (1192) cpu_start: Pro cpu start user code
I (1429) phy: phy_version: 258, Nov 29 2016, 15:51:07, 0, 0
I (2466) cpu_start: Starting scheduler on PRO CPU.
I (2470) example: Initializing SD card
Guru Meditation Error of type IllegalInstruction occurred on core 0. Exception was unhandled.
Register dump:
PC : 0x400e7902 PS : 0x00060230 A0 : 0x800e8728 A1 : 0x3ffb6810
A2 : 0x00000000 A3 : 0x3f4054bc A4 : 0xffffffff A5 : 0xffffffff
A6 : 0xffffffff A7 : 0x3ffb6b60 A8 : 0x3ff49060 A9 : 0x00000c00
A10 : 0x800e1727 A11 : 0xffff8fff A12 : 0x00000200 A13 : 0xffffffff
A14 : 0x00003f00 A15 : 0x00000002 SAR : 0x00000014 EXCCAUSE: 0x00000000
EXCVADDR: 0x00000000 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0x00000000
Backtrace: 0x400e7902:0x3ffb6810 0x400e8728:0x3ffb6830 0x400e682f:0x3ffb6870 0x400d09c9:0x3ffb6950
Rebooting...
ets Jun 8 2016 00:22:57
Re: SDIO Interface
slot0 = HS1 so possible conflict with spi flash. It was mentioned first version of the driver wouldn't work on hs1 in parallel with spi flash.
Re: SDIO Interface
Indeed, WiFive is correct. If you have an SPI flash chip connected to the standard pins, there will be a conflict between SDIO master and SPI0 peripheral. If you want to use SDIO master on HS0 slot, you need to move SPI flash chip to a different set of pins (this is possible by programming Efuses).
Re: SDIO Interface
WiFive and ESP_igrr thanks for clarification. It was mine lack of attention to details. Schematics of ESP-WROOM-32 module (which I have) set thing straight.
Looking forward for SPI support in SDMMC driver because:
a. Currently we can't use JTAG and SD at the same time on HS2_* signals (if I understand correctly)
b. It allow us to use the same SPI pins as for module internal flash + 1 pin for CS.
Looking forward for SPI support in SDMMC driver because:
a. Currently we can't use JTAG and SD at the same time on HS2_* signals (if I understand correctly)
b. It allow us to use the same SPI pins as for module internal flash + 1 pin for CS.
-
- Posts: 9761
- Joined: Thu Nov 26, 2015 4:08 am
Re: SDIO Interface
For A, it should actually be possible to move JTAG pins to other GPIOs after app startup; JTAG pins are in the GPIO mux like most other peripheral signals.
Re: SDIO Interface
I've tested the code example and for me it only worked in 1-Line-Mode (on the breadboard with Nano32-Board).
I omitted IO_2 and IO_12 Pullups and activated them in software.
For the 1-Wire code I get:
In 4-Wire mode:
I've added slight modifications to the code (just a few logs and the pullup init stuff):
(no changed code after that)
Does somebody have a clue what could have happened here? Or experienced the same thing?
On guess could be signalling issues on the breadboard, but I don't believe that's the case here since it worked in 1-Wire-Mode.
I omitted IO_2 and IO_12 Pullups and activated them in software.
For the 1-Wire code I get:
Code: Select all
I (1649) example: Initializing pull-ups
I (1649) cpu_start: Starting scheduler on APP CPU.
I (2649) example: Initializing SD host
I (2649) example: Initializing SD slot
I (2649) example: Try mount sd card
Name: 00000
Type: SDHC/SDXC
Speed: default speed
Size: 15279MB
CSD: ver=1, sector_size=512, capacity=31291392 read_bl_len=9
SCR: sd_spec=2, bus_width=5
I (2669) example: Opening file
I (2709) example: File written
I (2739) example: Renaming file
I (2739) example: Reading file
I (2739) example: Read from file: 'Hello 00000!'
I (2739) example: Card unmounted
Code: Select all
I (2487) example: Initializing pull-ups
I (2487) cpu_start: Starting scheduler on APP CPU.
I (3487) example: Initializing SD host
I (3487) example: Initializing SD slot
I (3487) example: Try mount sd card
E (3507) sdmmc_cmd: sdmmc_read_sectors: sdmmc_send_cmd returned 0x109
E (3507) ff_diskio: sdmmc_read_blocks failed (265)
W (3507) vfs_fat_sdmmc: failed to mount card (1)
E (3517) example: Failed to mount filesystem. If you want the card to be formatted, set format_if_mount_failed = true.
Code: Select all
void app_main(void)
{
ESP_LOGI(TAG, "Initializing pull-ups");
vTaskDelay(1000 / portTICK_PERIOD_MS);
ESP_ERROR_CHECK(gpio_pulldown_dis(GPIO_NUM_2));
ESP_ERROR_CHECK(gpio_pullup_en(GPIO_NUM_2));
ESP_ERROR_CHECK(gpio_pulldown_dis(GPIO_NUM_12));
ESP_ERROR_CHECK(gpio_pullup_en(GPIO_NUM_12));
ESP_LOGI(TAG, "Initializing SD host");
sdmmc_host_t host = SDMMC_HOST_DEFAULT();
// To use 1-line SD mode, uncomment the following line:
// host.flags = SDMMC_HOST_FLAG_1BIT;
// This initializes the slot without card detect (CD) and write protect (WP) signals.
// Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals.
ESP_LOGI(TAG, "Initializing SD slot");
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
// Options for mounting the filesystem.
// If format_if_mount_failed is set to true, SD card will be partitioned and formatted
// in case when mounting fails.
esp_vfs_fat_sdmmc_mount_config_t mount_config = {
.format_if_mount_failed = false,
.max_files = 5
};
// Use settings defined above to initialize SD card and mount FAT filesystem.
// Note: esp_vfs_fat_sdmmc_mount is an all-in-one convenience function.
// Please check its source code and implement error recovery when developing
// production applications.
sdmmc_card_t* card;
ESP_LOGI(TAG, "Try mount sd card");
esp_err_t ret = esp_vfs_fat_sdmmc_mount("/sdcard", &host, &slot_config, &mount_config, &card);
if (ret != ESP_OK) {
if (ret == ESP_FAIL) {
ESP_LOGE(TAG, "Failed to mount filesystem. If you want the card to be formatted, set format_if_mount_failed = true.");
} else {
ESP_LOGE(TAG, "Failed to initialize the card (%d). Make sure SD card lines have pull-up resistors in place.", ret);
}
return;
}
Does somebody have a clue what could have happened here? Or experienced the same thing?
On guess could be signalling issues on the breadboard, but I don't believe that's the case here since it worked in 1-Wire-Mode.
Re: SDIO Interface
Mine doesnt start:
sdmmc_cmd: sdmmc_card_init: send_scr returned 0x109
sd_card: Failed to initialize the card (265). Make sure SD card lines have pull-up resistors in place.
I have no idea what do more. Connections are OK, resistors are also connected (even if not needed)
IO13 - SD_DATA3, IO2 - SD_DATA0, IO4 - SD_DATA1, IO2 - SD_DATA2 each pulled up by 47kOhm
IO15 - SD_CMD pulled up by 10kOhm, IO14 - SD_CLK
EDIT: When SD Card inserted, flashing impossible:
sdmmc_cmd: sdmmc_card_init: send_scr returned 0x109
sd_card: Failed to initialize the card (265). Make sure SD card lines have pull-up resistors in place.
I have no idea what do more. Connections are OK, resistors are also connected (even if not needed)
IO13 - SD_DATA3, IO2 - SD_DATA0, IO4 - SD_DATA1, IO2 - SD_DATA2 each pulled up by 47kOhm
IO15 - SD_CMD pulled up by 10kOhm, IO14 - SD_CLK
EDIT: When SD Card inserted, flashing impossible:
And starts like:[...]
Configuring flash size...
A fatal error occurred: Timed out waiting for packet content
make: *** [flash] Error 2
Only SD Card that I test this is 2GB SanDisk (China):rst:0x1 (POWERON_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
Falling back to built-in command interpreter.
OK
>ets Jun 8 2016 00:22:57
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
Falling back to built-in command interpreter.
OK
>ets Jun 8 2016 00:22:57
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
sd_card: csd
sd_card: csd_ver : 0
sd_card: mmc_ver : 0
sd_card: capacity : 3970048
sd_card: sector_size : 512
sd_card: cid
sd_card: manufacturer identification number mfg_id : 3
sd_card: oem_id : 21316
sd_card: name : SD02G
Who is online
Users browsing this forum: No registered users and 125 guests