Status of esp_lcd component
Posted: Sun Sep 29, 2024 8:34 pm
I was trying to port the driver for RM67162 OLED panel controller that comes with recent lilygo board from adhoc arduino version that lilygo provides to "proper" component that could work with idf's `esp_lcd`, to leverage queued transactions.
Existing and working driver runs transactions using command 0x02 (8 bit) (or 0x32 for pixel data write) and 24 bit "address" that is constructed from a traditional LCD panel command left-shifted by 8 bits, for example `cmd=0x02, addr=0x11<<8` for "sleep out" command. When the command requires parameters, they are passed via `tx_buffer` / `length` fields of the spi transaction structure. To clarify, I modified the code to work without arduino component, under pure idf. It works.
But looking at the code in `components/esp_lcd`, there is no mention of `cmd` and `addr` fields. Command and parameter data seem to be transmitted entirely via the `tx_buffer` pointer, in separate transactions.
As the board does not use DC pin, I can imagine that things _may_ work if you put command and address in the data buffer. So I have two questions:
Existing and working driver runs transactions using command 0x02 (8 bit) (or 0x32 for pixel data write) and 24 bit "address" that is constructed from a traditional LCD panel command left-shifted by 8 bits, for example `cmd=0x02, addr=0x11<<8` for "sleep out" command. When the command requires parameters, they are passed via `tx_buffer` / `length` fields of the spi transaction structure. To clarify, I modified the code to work without arduino component, under pure idf. It works.
But looking at the code in `components/esp_lcd`, there is no mention of `cmd` and `addr` fields. Command and parameter data seem to be transmitted entirely via the `tx_buffer` pointer, in separate transactions.
As the board does not use DC pin, I can imagine that things _may_ work if you put command and address in the data buffer. So I have two questions:
- Is `esp_lcd` component "recommended" / "supported"?
- If it is, what are the rules to convert cmd+addr based transaction to an equivalent buffer-only transaction?