AnsweredAssumed Answered

i.MX6 IPU Driver (RGB888 Format)

Question asked by KAAN GENCAY on Feb 26, 2018
Latest reply on Mar 2, 2018 by KAAN GENCAY

Hello,

 

I have a project based on i.MX6 processor and 7" TFT LCD which has 24-bit RGB888 format and I need to use the IPU module to drive it. I used the codes supplied in the i.MX6_Platform_SDK as a guide during driver development.

 

In the SDK, the IPU driver was developed for RGB565 format LCD displays. I tried to change it to RGB888 but it didn't work. The display is just initialized with black background and some colored pixels.

 

To verify that the clocks and data are as intended, I connected the probe to the CLK and DAT lines which, respectively, give the right clock signal and the random data that results in the random pixels on the LCD. 

 

Below are the panel information;

 

panel_info_ptr->refresh_rate = 60; /*60 Hz*/
panel_info_ptr->width = 800;
panel_info_ptr->height = 480;
panel_info_ptr->pixel_clock = 29232000; /*60*525*928*/
panel_info_ptr->hsync_start_width = 88; /*hsync backporch*/
panel_info_ptr->hsync_width = 48; /*hsync pulse width*/
panel_info_ptr->hsync_end_width = 40; /*hsync front porch*/
panel_info_ptr->vsync_start_width = 32;
panel_info_ptr->vsync_width = 3;
panel_info_ptr->vsync_end_width = 13;
panel_info_ptr->delay_h2v = 0;
panel_info_ptr->interlaced = 0;
panel_info_ptr->clk_sel = 0; /*internal*/
panel_info_ptr->clk_pol = 0;
panel_info_ptr->hsync_pol = 0;
panel_info_ptr->vsync_pol = 0;
panel_info_ptr->drdy_pol = 1;
panel_info_ptr->data_pol = 0;

 

Below are the lines that I changed for my display

idmac_info_ptr->npb = 19; /*(because 24 bit)*/

 

ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_BPP, 0x01/* 0x3*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_WID0, 8-1/*5 - 1*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_WID1, 8-1/*6 - 1*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_WID2, 8-1/*5 - 1*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_WID3, 0 - 1);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_OFF0, 0);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_OFF1, 8/*5*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_OFF2, 16/*11*/);
ipu_cpmem_set_field(get_ipu_cpmem_addr( channel), INTERLEAVED_OFF3, 24/*16*/);

 

Attached you will find the photo of the display with the random pixels lit up.

 

Kind Regards,

 

Kaan

Outcomes