cancel
Showing results for 
Search instead for 
Did you mean: 

Driving 3rd party DSI Display

lyuIvanov
Associate II

Hello,

After lots of tries, I have finally been able to set all registers of the display driver I'm using. It is Ili9881c.

However I have to solve my next problem as well - I'm unable to display content and it is becoming somewhat unresponsive after sleep out command. For sure I know that I'm accessing the right registers.

When I drive the display into BIST mode, it starts displaying all the patterns correctly, without any noticeable flickering. After that I can also send commands like Turn All Pixels On/Off, with delays can make it flash and so on. But... when I exit BIST mode, then it feels like it is not listening to any commands and then I'm unable to turn on/off the pixels or do anything else.

But I have placed Read commands, so I can check on if I'm changing the state/mode of the controller. And I'm, so the driver is responsive, returning correct values after every change(depending on the change ex. display on/sleep out/all pixels on), but unfortunately nothing happens on the screen.

I'm wondering what could be so different in BIST mode, so that the display is reflecting every line on the screen, compared to normal operation, where it can't reflect anything on screen.

Display is 800x800. Clock of LCD-TFT is 41400kHz, which will be able to give me about 51Hz refresh rate with the correct sync times and porches for the display. And DSI at 24bits depth should be a bit less than 500MHz.

Something else I have to mention is that this driver doesn't feature GRAM, so probably I should drive in Video mode, but can't figure out how to do this properly and how to check if it is in video or command mode in reality. Also it is unclear to me which mode should I use - burst mode/non-burst mode with S-Events/non-burst mode with S-Pulses.

I'm developing the software using TouchGFX, CubeMX and EWARM. I'm writing my code on top of a blank project for my development board (stm32f769) in TouchGFX.

Ps. To me it feels like the picture it has to display is in the opposite coordinates, so it is out of the display, but registers for that are set correctly, because when I change their values, I see for example only half the screen in BIST mode and the other is unresponsive. And also I think that all pixels on/off is applied to every array of the driver, isn't it?

4 REPLIES 4
MM..1
Chief III

Little match 800x800x24x51 = 783360000 , then you need two 500M datalanes.

You write about BIST, but better is create cubeMX config and then after graphics init call

HAL_DSI_PatternGeneratorStart(&hdsi, 0, 0);

When this works you can continue set LTDC , RAM and TouchGFX as last.

When not, you need correct your custom driver and init display + DSI setup in CubeMX

MLec
Associate II

Hi @lyuIvanov

Did you manage to solve your issues?

I am exploring possibilities for display in my project and I wonder if you use Ili9881c in 2-Data Lane mode?

aponski
Associate II

The same question here. Where you able to use Ili9881c? Do you use round pixel 800x800?

No success yet. And yes, I am targeting round 800x800 display.