#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/sdspi_host.h"
#include "sdmmc_cmd.h"
#include "esp_vfs_fat.h"
#include "esp_system.h"
#include "esp_log.h"
#include <string.h>
#include <esp_err.h>
#include "driver/sdmmc_host.h"
#include "esp_vfs.h"
// Define o ponto de montagem do SD Card
#define SDSPI_MOUNT "/sdspi"
#define TAG "SD Card Test"
// Declaração das funções
esp_err_t sdcard_init();
void write_hello_world();
void app_main() {
// Inicializa o cartão SD
esp_err_t ret = sdcard_init();
if (ret != ESP_OK) {
ESP_LOGE("SD", "Falha ao inicializar o SD.");
return;
}
// Escreve "Hello World!" no cartão SD
write_hello_world();
}
esp_err_t sdcard_init() {
esp_err_t ret;
sdmmc_card_t *sdspi_card; // Estrutura para armazenar informações do cartão SD
sdmmc_host_t sdspi_host = SDSPI_HOST_DEFAULT(); // Configuração padrão do host SPI
sdspi_device_config_t sdspi_device = SDSPI_DEVICE_CONFIG_DEFAULT();
//slot_config.gpio_cs = 13; // Definição do pino CS pode ser necessária
// Configuração do barramento SPI
spi_bus_config_t bus_config = {
.miso_io_num = GPIO_NUM_2, // Pino MISO do SPI
.mosi_io_num = GPIO_NUM_15, // Pino MOSI do SPI
.sclk_io_num = GPIO_NUM_14 // Pino SCLK do SPI
};
spi_dma_chan_t dma_chan = SPI_DMA_CH1; // Define o canal DMA para SPI
// Configuração do sistema de arquivos FAT
esp_vfs_fat_mount_config_t mount_config = {
.format_if_mount_failed = true, // Formatar o cartão se falhar a montagem
.max_files = 5, // Número máximo de arquivos abertos simultaneamente
.allocation_unit_size = 16 * 1024 // Tamanho da unidade de alocação
};
// Inicializa o barramento SPI
ret = spi_bus_initialize(sdspi_device.host_id, &bus_config, dma_chan);
if (ret != ESP_OK) {
ESP_LOGI(TAG, "SPI BUS initialize error:%s", esp_err_to_name(ret));
return ret;
}
// Monta o sistema de arquivos FAT no SD Card
ret = esp_vfs_fat_sdspi_mount(SDSPI_MOUNT, &sdspi_host, &sdspi_device, &mount_config, &sdspi_card);
if(ret != ESP_OK) {
ESP_LOGI(TAG, "SDSPI mount error:%s", esp_err_to_name(ret));
return ret;
}
ESP_LOGI("SD", "Cartão SD montado com sucesso!");
return ESP_OK;
}
void write_hello_world() {
char buff[100]; // Buffer para leitura do arquivo
FILE *fp;
// Abre o arquivo para escrita
fp = fopen(SDSPI_MOUNT"/spitest.txt", "wb");
if (!fp) {
ESP_LOGI(TAG, "SDSPI open file error(write)");
return;
}
// Escreve 10 linhas no arquivo
for (int i = 0; i < 10; i++) {
fprintf(fp, "SDSPI: test Line %d\n", i);
}
fclose(fp); // Fecha o arquivo após a escrita
ESP_LOGI(TAG, "write SDSPI END");
// Abre o arquivo para leitura
fp = fopen(SDSPI_MOUNT"/spitest.txt", "rb");
if (!fp) {
ESP_LOGI(TAG, "SDSPI open file error(read)");
return;
}
// Lê o conteúdo do arquivo e imprime no terminal
while(fgets(buff, 100, fp)) {
printf(buff);
}
fclose(fp); // Fecha o arquivo após a leitura
}