#include "spi.h"

#define USE_SPI_HOST SPI2_HOST

static const char *TAG = "SPI_2";

spi_device_handle_t lcd_spi;

void spi_init()
{
    ESP_LOGI(TAG, "初始化SPI IO总线");
    esp_err_t ret;

    // 1. SPI 总线配置
    spi_bus_config_t buscfg = {
        .miso_io_num = VSPI_MISO,         // MISO 引脚
        .mosi_io_num = VSPI_MOSI,         // MOSI 引脚
        .sclk_io_num = VSPI_SCLK,         // 时钟引脚
        .quadwp_io_num = -1,              // 不使用 QWP
        .quadhd_io_num = -1,              // 不使用 QHD
        .max_transfer_sz = 9600, // 最大传输大小
        // .flags = 0,
        // .intr_flags = 0,
    };

    // 2. 初始化 SPI 总线
    ret = spi_bus_initialize(USE_SPI_HOST, &buscfg, SPI_DMA_CH_AUTO);
    if (ret != ESP_OK)
    {
        ESP_LOGE(TAG, "IO总线初始化失败");
        return;
    }

    ESP_LOGI(TAG, "SPI IO总线初始化成功");

    ESP_LOGI(TAG, "SPI 设备配置");

    spi_device_interface_config_t devcfg = {
        .command_bits = 0,            // 无命令位
        .address_bits = 0,            // 无地址位
        .dummy_bits = 0,
        .mode = 0,                  // SPI 模式 0
        .clock_speed_hz = 80000000, //
        .spics_io_num = -1,
        .queue_size = 7,              // 队列深度
        .flags = SPI_DEVICE_NO_DUMMY, // 禁用 dummy 周期
        .input_delay_ns = 0,
        .pre_cb = NULL,
        .post_cb = NULL,

    };

    ret = spi_bus_add_device(USE_SPI_HOST, &devcfg, &lcd_spi);
    if (ret != ESP_OK)
    {
        ESP_LOGE(TAG, "SPI 设备配置失败");
        return;
    }
}

