Skip to content

How the data buffer is sent with EPDiy

Martin edited this page Aug 4, 2021 · 33 revisions

It is sent line-by-line from two DMA buffers, where one is filled again while the other is sent. The I2S peripheral operates in LCD mode that allows this parallel sending.

In the current version is sent over a 8 data-lines bus, like we can see in i2s_data_bus.c

void i2s_bus_init(i2s_bus_config *cfg) {
  gpio_num_t I2S_GPIO_BUS[] = {cfg->data_6, cfg->data_7, cfg->data_4,
                               cfg->data_5, cfg->data_2, cfg->data_3,
                               cfg->data_0, cfg->data_1};
  // ... rest of initialization
}

This page will be dedicated to analyze if it's possible to initialize there a bus with 16 GPIOS and most important in what order that should be. Notice that the order in the I2S_GPIO_BUS array is not linear.

To be continued...

Research questions

Q: Possible to use I2S to have a 16 bit data bus - Question in esp32 Forum

Answer: Yes is possible. But no hints about the ordering logic of the BUS Array.

Q: Would it be possible to make it with the existing EPDiy board ESP32 GPIOs or I should try to make an alternative version with ESP32-S2? With my null knowledge of KiCad that will be a one year enterprise but I would love to try it even if I know it will take many iterations to get it working. Or it will be better to stick with good old ESP32 and just find a way to drive this new breed of 16 data bus epapers?

Answer from vroland: You can have a look at the schematic, to see if you get 8 more output-capable pins freed up. If so, I'd stick with the ESP32 if you want the easier route. But getting more free pins may not be possible without significant compromise to performance. Further research: I don't find more than 2 output capable GPIOs free at the moment to allocate a bus that is 8 bits bigger. Unless I'm missing something, this won't be possible to do with existing EPDiy board, unless there is a way to use a shift register but that slow things down. Precisaly when this eink displays have a 16 bits buffer since the amount of data to be sent is considerably bigger than on older epapers (Specially color Einks, that have 16x16x16 RGB possibilities per pixel - 4096 colors)

Clone this wiki locally