Cross scanning on ST7789 causes tearing

What do you want to achieve?

I want to use a ST7789P3 320x240 LCD tearing free. It is connected to a Nucleo H563ZI board via SPI. A complete SPI transfer of the full buffer takes 9.7 ms (125 MHz SPI. I know this is unspecified but it is working stable. This is not the cause of my issues).

When i have my display in 0 degrees rotation it works fine and no tearing is visible. When i use

	lv_display_set_rotation(display, LV_DISPLAY_ROTATION_90);

I start to get tearing. This tearing is a diagonal line. I think the issue is that my LCD reads its buffer row by row (short edge) but lvgl sends its buffer column by column (long edge).

Is there a way to tell lvgl to send its buffer row by row instead of column by column?

What have you tried so far?

I tried different things with

	lv_display_set_rotation(display, LV_DISPLAY_ROTATION_90);

and manually changing the LV_LCD_CMD_SET_ADDRESS_MODE settings but they don’t solve my issue.

I also tried some configurations of

lv_draw_sw_rotate(...);

but also without success. Either the image is completely scrambled or tilted in weird angles.

Environment

  • STM32 H563ZI Nucleo
  • 9.3 and 9.4