79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
#include "EPD_SPI.h"
|
|
|
|
static spi_device_handle_t spi_handle;
|
|
static const char *TAG = "EPD_SPI";
|
|
|
|
void EPD_SPI_Init(void) {
|
|
esp_err_t ret;
|
|
|
|
// GPIO Config for DC, RST, CS
|
|
gpio_config_t io_conf = {};
|
|
io_conf.intr_type = GPIO_INTR_DISABLE;
|
|
io_conf.mode = GPIO_MODE_OUTPUT;
|
|
io_conf.pin_bit_mask = (1ULL<<EPD_DC_PIN) | (1ULL<<EPD_RST_PIN) | (1ULL<<EPD_CS_PIN);
|
|
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
|
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
|
gpio_config(&io_conf);
|
|
|
|
// GPIO Config for BUSY
|
|
io_conf.mode = GPIO_MODE_INPUT;
|
|
io_conf.pin_bit_mask = (1ULL<<EPD_BUSY_PIN);
|
|
io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
|
gpio_config(&io_conf);
|
|
|
|
EPD_W21_CS_1;
|
|
|
|
// SPI Bus Config
|
|
spi_bus_config_t buscfg = {};
|
|
buscfg.miso_io_num = -1;
|
|
buscfg.mosi_io_num = EPD_MOSI_PIN;
|
|
buscfg.sclk_io_num = EPD_SCK_PIN;
|
|
buscfg.quadwp_io_num = -1;
|
|
buscfg.quadhd_io_num = -1;
|
|
buscfg.max_transfer_sz = 32;
|
|
|
|
// SPI Device Config
|
|
spi_device_interface_config_t devcfg = {};
|
|
devcfg.clock_speed_hz = 10 * 1000 * 1000; // 10MHz
|
|
devcfg.mode = 0; // SPI mode 0
|
|
devcfg.spics_io_num = -1; // Use software CS pin
|
|
devcfg.queue_size = 7;
|
|
|
|
ret = spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);
|
|
if (ret != ESP_OK) {
|
|
ESP_LOGE(TAG, "Failed to initialize SPI bus");
|
|
}
|
|
|
|
ret = spi_bus_add_device(SPI2_HOST, &devcfg, &spi_handle);
|
|
if (ret != ESP_OK) {
|
|
ESP_LOGE(TAG, "Failed to add SPI device");
|
|
}
|
|
}
|
|
|
|
void SPI_Write(unsigned char value) {
|
|
spi_transaction_t t = {};
|
|
t.length = 8;
|
|
t.tx_buffer = &value;
|
|
spi_device_polling_transmit(spi_handle, &t);
|
|
}
|
|
|
|
void EPD_W21_WriteCMD(unsigned char command) {
|
|
EPD_W21_CS_0;
|
|
EPD_W21_DC_0;
|
|
SPI_Write(command);
|
|
EPD_W21_CS_1;
|
|
}
|
|
|
|
void EPD_W21_WriteDATA(unsigned char datas) {
|
|
EPD_W21_CS_0;
|
|
EPD_W21_DC_1;
|
|
SPI_Write(datas);
|
|
EPD_W21_CS_1;
|
|
}
|
|
|
|
unsigned char EPD_W21_ReadDATA(void) {
|
|
// Basic stub, typically not used for most writes.
|
|
// Software SPI for reading is complex and omitted for standard display usage.
|
|
return 0;
|
|
}
|