I don’t see any special reason why psram would be required for lv_micropython.
The lvgl binding itself costs 12 bytes per lvgl object and 8 bytes per lvgl struct, which is not much and all memory is garbage collected.
If you are using the default ili9341 micropython driver (which you should, as it is the most up to date), it would print an error in case it fails allocating DMA ram. If you got no error then memory allocation went fine.
Enabling logging, as @embeddedt suggested, is a good idea.
Logging is enabled by default on lv_micropython, but you need to register a callback.
Something like this will do:
The critical parts in the Python driver are still implemented in C (when hybrid=True, which is the default), so performance penalty is negligible.
It consumes just a tiny bit more RAM, and requires a little more FLASH for the esp-idf binding, but I think it is worth it.
Currently I’m maintaining and updating only the Python driver. It implements DMA with either single or double buffer, gives more control over initialization (for example, setting portrait/landscape modes) and implements tear down (deinint) which is missing on the C driver.
My recommendation is to use it as is, or at least use it as a reference when implementing a C driver if you insist.
In fact, I removed the C driver from lv_micropython Makefile and I’m keeping the old C driver on the repo just for reference.
Good news - I found the problem that caused the blank display. It was a hardware issue. I needed a pullup resistor on the display reset pin. Without the pullup resistor the display was being held in reset, resulting in the blank display.
Summary: Littlevgl/micropython is working on a regular ESP32 development board that has 520 KB SRAM. Yay !