I use the ESP SPI master driver for LCD communication (ILI9341). I observe a huge delay between transmits. Transmitting a byte takes 2 us, but the delay is 60us (Debug optimization). Is it possible to make the delay smaller?
Here is my code
Code: Select all
void spi_lcd_init(void)
{
esp_err_t rv;
// 1. config the bus
spi_bus_config_t spi_bus_cfg = {
.mosi_io_num = GPIO_NUM_7,// DIN (MOSI)
.miso_io_num = -1, // not used
.sclk_io_num = GPIO_NUM_6,// CLK
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = SPI_MAX_TX_BUFFER_SIZE
};
rv = spi_bus_initialize(SPI2_HOST, &spi_bus_cfg, SPI_DMA_CH_AUTO);
if (rv == ESP_OK) {
ESP_LOGI("", "SPI bus initialization successfully");
} else {
ESP_LOGE("", "SPI bus initialization failed with %d", rv);
while(1);
}
// 2. config the device
spi_device_interface_config_t devcfg = {
.clock_speed_hz = 4 * 1000 * 1000,
.mode = 0,
.spics_io_num = GPIO_NUM_10, // CS Pin
.queue_size = 1,
.flags = 0,
.command_bits = 0,
.address_bits = 0,
.dummy_bits = 0
};
rv = spi_bus_add_device(SPI2_HOST, &devcfg, &lcd_spi);
if (rv == ESP_OK) {
ESP_LOGI("", "SPI added device successfully");
} else {
ESP_LOGE("", "SPI adding device failed with %d", rv);
while(1);
}
}
Code: Select all
void spi_send(uint8_t byte)
{
spi_transaction_t t = {
.length = 8,
.tx_buffer = &byte,
.rx_buffer = NULL
};
spi_device_transmit(lcd_spi, &t);
}
