#include <stdio.h>
#include <string.h>
#include <sys/unistd.h>
#include <sys/stat.h>
#include "esp_vfs_fat.h"
#include "sdmmc_cmd.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/spi_master.h"
#include "driver/sdspi_host.h"
#if SOC_SDMMC_IO_POWER_EXTERNAL
#include "sd_pwr_ctrl_by_on_chip_ldo.h"
#endif
#define EXAMPLE_MAX_CHAR_SIZE 512
#define MOUNT_POINT "/sdcard"
#define SPI_MOSI 23
#define SPI_MISO 19
#define SPI_SCLK 18
#define SPI_CS 5
/*
#define SPI_MOSI 8
#define SPI_MISO 7
#define SPI_SCLK 6
#define SPI_CS 11
*/
static const char* TAG = "sdcard";
void app_main(void)
{
gpio_set_pull_mode(SPI_MISO, GPIO_PULLUP_ONLY);
gpio_set_pull_mode(SPI_MOSI, GPIO_PULLUP_ONLY);
gpio_set_pull_mode(SPI_SCLK, GPIO_PULLUP_ONLY);
gpio_set_pull_mode(SPI_CS, GPIO_PULLUP_ONLY);
gpio_set_direction(SPI_MISO, GPIO_MODE_INPUT);
gpio_set_direction(SPI_MOSI, GPIO_MODE_OUTPUT);
gpio_set_direction(SPI_SCLK, GPIO_MODE_OUTPUT);
gpio_set_direction(SPI_CS, GPIO_MODE_OUTPUT);
//opciones de montaje del sistema de archivos
esp_vfs_fat_sdmmc_mount_config_t mount_config =
{
#ifdef CONFIG_EXAMPLE_FORMAT_IF_MOUNT_FAILED
.format_if_mount_failed = true,
#else
.format_if_mount_failed = false,
#endif // EXAMPLE_FORMAT_IF_MOUNT_FAILED
.max_files = 5,
.allocation_unit_size = 16 * 1024
};
sdmmc_card_t *card;
const char mount_point[] = MOUNT_POINT;
ESP_LOGI(TAG, "inicializando SD_Card\n");
ESP_LOGI(TAG, "Periferico SPI\n");
sdmmc_host_t host = SDSPI_HOST_DEFAULT();
host.max_freq_khz = 5000;
//configuraciones del bus para SPI
spi_bus_config_t bus_cfg =
{
.mosi_io_num = SPI_MOSI,
.miso_io_num = SPI_MISO,
.sclk_io_num = SPI_SCLK,
.quadhd_io_num = -1,
.quadwp_io_num = -1,
.max_transfer_sz = 4000,
};
//inicializacion del bus para SPI
spi_bus_initialize(host.slot, &bus_cfg, SDSPI_DEFAULT_DMA);
//configuraciones para la SD por SPI
sdspi_device_config_t slot_cfg = SDSPI_DEVICE_CONFIG_DEFAULT();
slot_cfg.gpio_cs = SPI_CS;
slot_cfg.host_id = host.slot;
//montaje de sistema de archivos
ESP_LOGI(TAG, "Montando FILESYSTEM\n");
esp_vfs_fat_sdspi_mount(mount_point, &host, &slot_cfg, &mount_config, &card);
ESP_LOGI(TAG, "FILESYSTEM montado correctamente\n");
//mostrar informacion de la SD
sdmmc_card_print_info(stdout, card);
/*
//desmontar el sistema de archivos (FileSystem)
esp_vfs_fat_sdcard_unmount(mount_point, card);
//liberar el bus del spi
spi_bus_free(host.slot);
*/
}