DSI strange behavior
- April 7, 2021
- 8 replies
- 2835 views
Hi st community members,
I'm having some stranges behaviors with the DSI and LTDC, I use these peripherals to communicate with my screen driver.
The driver need an init to give specific values for some registers, this step is well done.
After that i'm able to write pixel data thanks to the buffer area dedicated to the LTDC peripheral and with the command HAL_DSI_Refresh(&hdsi);.
My problem is that I need to write two times at least in the buffer area before the refresh to write correctly all the pixels data.
For exemple on the picture below, I write a full green screen (2 times needed with 0x00FF00) and after that I restart my program with only 1 write but with less green (0x00AA00). As you can see on the picture I have a partial write, at the right it remain the previous value (0x00FF00).
And when i take an oscillo I'm able to see that the sended data is not always 0x00AA00, I have the previous value 0x00FF00 instead. So after that I have verified the data in the LTDC buffer area, but all seems right (I have always 0x00AA00 in the buffer).
A strange behavior take place when i was reading the buffer : when i have readed all the buffer data in debug mode after my unique write and doing my refresh it's working.
It's like the buffer data is locked sometimes and when I read this buffer in debug mode it's unlocking.
Hardware :
STM32F769BGT6
DSI :
1 data lane
LTDC :
ARGB8888
color frame buffer start address = 0x20020000
color buff line length = 240
color buff width = 320
If anyone has ever had this problem and can help me.
Thank you in advance.
