This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DS90UB941AS-Q1: how to set ds90ub941as,1 DSI input, 2 Serializer output

Part Number: DS90UB941AS-Q1

Hi.

      

It can now display the same content on both 1920x720 screens,

Not sure how to set the DS90UB941 to support the left and right display to two different 1920 x 720, as shown in the picture above

Could you tell me specifically which registers to set?

Whether to support Pixelclock 74.25x2MHz ?

  • Hello Gj,

    This app note provides detail on how to configure the 941AS for this type of application: https://www.ti.com/lit/pdf/snla308

    Best Regards,

    Casey 

  • Hello Casey 

         soc output: 

    timings.width = 1280*2U;
    timings.height = 720U;
    timings.hFrontPorch = 110*2U;
    timings.hBackPorch = 220*2U;
    timings.hSyncLen = 40*2U;
    timings.vFrontPorch = 5U;
    timings.vBackPorch = 20U;
    timings.vSyncLen = 5U;
    timings.pixelClock = 74250000*2ULL 

    The input to the ds90ub941,

    DS90UB941 is configured as below,I want to output 1280x720 from the DS90UB941 separately from the port0 prot1.

        WriteI2C (0x1E,0x01); //Select FPD-Link III Port 0
    	WriteI2C (0x4F,0x8C); //Set DSI_CONTINUOUS_CLOCK, 4 lanes, DSI Port 0
    	WriteI2C (0x5B,0x07); //Force Splitter mode    // 0: auto
    	WriteI2C (0x56,0x80); //Enable Left/Right 3D processing to allow superframe splitting
    	WriteI2C (0x32,0x00); //Set the line size to 1280(LSB)
    	WriteI2C (0x33,0x05); //Set the line size to 1280 (MSB)//Crop Port0 720p image
    	
    	WriteI2C (0x1E,0x01); //Select FPD-Link III Port 1
    	WriteI2C (0x36,0x00); //Set crop start X position to 0 (LSB
    	WriteI2C (0x37,0x80); //Set crop start X position to 0 (MSB) and enable cropping
    	
    	WriteI2C (0x38,0xFF); //Set crop stop X position to 1279 (LSB
    	WriteI2C (0x39,0x04); //Set crop stop X position to 1279 (MSB)
    	
    	WriteI2C (0x3A,0x00); //Set crop start Y position to 0 (LSB
    	WriteI2C (0x3B,0x00); //Set crop start Y position to 0 (MSB
    	
    	WriteI2C (0x3C,0xCF); //Set crop stop Y position to 719 (LSB
    	WriteI2C (0x3D,0x02); //Set crop stop Y position to 719 (MSB)
    	//Crop Port1 720p image
    	
    	WriteI2C (0x1E,0x02); //Select FPD-Link III Port 1
    	WriteI2C (0x36,0x00); //Set crop start X position to 0 (LSB)
    	WriteI2C (0x37,0x80); //Set crop start X position to 0 (MSB) and enable cropping
    	
    	WriteI2C (0x38,0xFF); //Set crop stop X position to 1279 (LSB)
    	WriteI2C (0x39,0x04); //Set crop stop X position to 1279 (MSB)
    	
    	WriteI2C (0x3A,0x00); //Set crop start Y position to 0 (LSB)
    	WriteI2C (0x3B,0x00); //Set crop start Y position to 0 (MSB
    	
    	WriteI2C (0x3C,0xCF); //Set crop stop Y position to 719 (LSB)
    	WriteI2C (0x3D,0x02); //Set crop stop Y position to 719/ (MSB)
    	//Program TSKIP_CNT DSI parameter on DSI Port0
    	
    	WriteI2C (0x40,0x04); //Select DSI Port 0 digital registers
    	WriteI2C (0x41,0x05); //Select DPHY_SKIP_TIMING register
    	WriteI2C (0x42,0x1E); //Write TSKIP_CNT value for 300 MHz DSI clock frequency
    	WriteI2C (0x01,0x00); //Enable DSI

    how to troubleshoot the proble? Is there any error in ds90ub941 configuration ?

    If the SoC outputs 1280x720x60 to DS90UB941, just set the value of the DS90UB941 0x5B register to 4. So you can do both of them. And the display data is the same.

        

  • Hello Gj,

    Everything in the script looks correct except for the TSKIP_CNT reg setting. For this video the DSI clock should be 74.25MHz*2*3 = 445MHz, so the TSKIP_CNT reg should be set to 0x30 instead of 0x1E. Also you are missing the init commands from the startup sequence on page 139 of the datasheet:

    Those commands need to be added before the last command to enable DSI. 

    What is the problem you are encountering exactly? Is there no video to either display? If so I would suggest to follow this step by step guide to debug the problem, with the flow chart on page 9: https://www.ti.com/lit/pdf/snla356

    Best Regards,

    Casey 

  • Hello Casey

      

    WriteI2C (0x40,0x10);
    WriteI2C (0x41,0x86);
    WriteI2C (0x42,0x0a);
    WriteI2C (0x41,0x94);
    WriteI2C (0x42,0x0a);
    WriteI2C (0x42,0x30)

    WriteI2C (0x42,0x0a);

    WriteI2C (0x01,0x00); //Enable DSI

    The 0x42 register cannot write 5.  The 0x42 register cannot write 5. After writing the 0x42 register, read the 0x42 register with a value of 0

    add patern ,A screen displays color bars. Nothing else is shown.

    add patern:

    WriteI2C (0x66,0x03);// # N Div
    WriteI2C (0x67,0x23);

    WriteI2C (0x66,0x1A); //# M Div
    WriteI2C (0x67,0x04);

    WriteI2C (0x66,0x04);
    WriteI2C (0x67,0x24);

    WriteI2C (0x66,0x05);
    WriteI2C (0x67,0x98);

    WriteI2C (0x66,0x06);
    WriteI2C (0x67,0x2D);

    WriteI2C (0x66,0x07);
    WriteI2C (0x67,0x80);

    WriteI2C (0x66,0x08);
    WriteI2C (0x67,0x07);

    WriteI2C (0x66,0x09);
    WriteI2C (0x67,0x2D);

    WriteI2C (0x66,0x0A);
    WriteI2C (0x67,0x24);

    WriteI2C (0x66,0x0B);
    WriteI2C (0x67,0x01);

    WriteI2C (0x66,0x0C);
    WriteI2C (0x67,0x64);

    WriteI2C (0x66,0x0D);
    WriteI2C (0x67,0x04);

    WriteI2C (0x66,0x0E);
    WriteI2C (0x67,0x00);

    WriteI2C (0x65,0x04);
    WriteI2C (0x64,0x05);

      

  • Hello gj,

    The 0x40-0x42 register sequence is writing to indirect registers within the device. The readback of indirect registers is controlled with bit 0 of the 0x40 registers when you select the indirect page. So with a setting 0x40 = 0x10, then you will be able to write the indirect register, but with a setting of 0x40 = 0x11, then you can read OR write the register. 

    So from the sound of it, it seems you are able to display PATGEN with internal clock and internal timing so far, but are not able to display the SoC video source?

    Please continue with this debug flow chart from the app note I linked before:

    So far it looks like you have made it to the red mark. Please continue along this flow chart and let me know where you are getting stuck 

    Best Regards,

    Casey 

  • Hello gj,

    The 0x40-0x42 registers sequence is writing to indirect registers within the device. The readback of indirect registers is controlled with bit 0 of the 0x40 registers when you select the indirect page. So with a setting of 0x40 = 0x10 you can write the indirect registers, but with a setting of 0x40 = 0x11 for example you can read OR write the indirect register. 

    So from the sound of it, it seems you are able to display PATGEN with internal clock and internal timing so far, but are not able to display the SoC video source? 

    Please continue with this debug flow chart from the app note that I linked before:

    So far it looks like you have made it to the red mark. Please continue along this flow chart and let me know where you are getting stuck.

    Best Regards,

    Casey 

  • Hello. Casey

     soc output: 

    timings.width = 1280*2U;
    timings.height = 720U;
    timings.hFrontPorch = 110*2U;
    timings.hBackPorch = 220*2U;
    timings.hSyncLen = 40*2U;
    timings.vFrontPorch = 5U;
    timings.vBackPorch = 20U;
    timings.vSyncLen = 5U;
    timings.pixelClock = 74250000*1ULL 

    If the SoC outputs 1280x2 720x60 to DS90UB941, just set the value of the DS90UB941 0x5B register to 4. So you can do both of them. And the display data is the same. read ds941 0x41 addr  DSI_DTYPE  is 0x3e  .

     soc output: 

    timings.width = 1280*2U;
    timings.height = 720U;
    timings.hFrontPorch = 110*2U;
    timings.hBackPorch = 220*2U;
    timings.hSyncLen = 40*2U;
    timings.vFrontPorch = 5U;
    timings.vBackPorch = 20U;
    timings.vSyncLen = 5U;
    timings.pixelClock = 74250000*2ULL 

    pattern  on: 

     WriteI2C (0x65, 0 x04); Change to writeI2c (0x65,0x0c);  //  Select External Clock Source

    WriteI2C (0x66,0x07);   
    WriteI2C (0x67,0x00); 
    WriteI2C (0x66,0x08);
    WriteI2C (0x67,0x0A); 

    There is still only one screen showing the color bar. The other one is not shown.

    WriteI2C (0x65,0x08);  //The two screens have no display at all。

    ds941 0x5f reg = 0x4b.

    Check the DSI_VC_DTYPE register via I2C:

    WriteI2C (0x40,0x04);
    WriteI2C (0x41,0x2a);
    Data = ReadI2c(0x42);
    read ds941 0x41 addr  DSI_DTYPE  is 0  .

    Turn pattern on and off pattern DSI_DTYPE is 0.

    If pattern is turned off, DS90UB941_pattern is commented out and neither screen has any display.

    Can pattern make dout0 and dout1 display different data?

    DSI_DTYPE is set to 0x3E and is still not shown

     

    Turn pattern off:

    Dump ds90ub941 regs:

    read ds941 0x0 addr = 0x2e
    read ds941 0x1 addr = 0x0
    read ds941 0x2 addr = 0x0
    read ds941 0x3 addr = 0x92
    read ds941 0x4 addr = 0x0
    read ds941 0x5 addr = 0x0
    read ds941 0x6 addr = 0x58
    read ds941 0x7 addr = 0x0
    read ds941 0x8 addr = 0x0
    read ds941 0x9 addr = 0x1
    read ds941 0xa addr = 0x28
    read ds941 0xb addr = 0x0
    read ds941 0xc addr = 0x7
    read ds941 0xd addr = 0x30
    read ds941 0xe addr = 0x0
    read ds941 0xf addr = 0x0
    read ds941 0x10 addr = 0x0
    read ds941 0x11 addr = 0x0
    read ds941 0x12 addr = 0x0
    read ds941 0x13 addr = 0xbb
    read ds941 0x14 addr = 0x0
    read ds941 0x15 addr = 0x0
    read ds941 0x16 addr = 0xfe
    read ds941 0x17 addr = 0x1e
    read ds941 0x18 addr = 0x7f
    read ds941 0x19 addr = 0x7f
    read ds941 0x1a addr = 0x1
    read ds941 0x1b addr = 0x0
    read ds941 0x1c addr = 0x0
    read ds941 0x1d addr = 0x0
    read ds941 0x1e addr = 0x2
    read ds941 0x1f addr = 0x0
    read ds941 0x20 addr = 0xb
    read ds941 0x21 addr = 0x0
    read ds941 0x22 addr = 0x25
    read ds941 0x23 addr = 0x0
    read ds941 0x24 addr = 0x0
    read ds941 0x25 addr = 0x0
    read ds941 0x26 addr = 0x0
    read ds941 0x27 addr = 0x0
    read ds941 0x28 addr = 0x1
    read ds941 0x29 addr = 0x20
    read ds941 0x2a addr = 0x20
    read ds941 0x2b addr = 0xa0
    read ds941 0x2c addr = 0x0
    read ds941 0x2d addr = 0x0
    read ds941 0x2e addr = 0xa5
    read ds941 0x2f addr = 0x5a
    read ds941 0x30 addr = 0x0
    read ds941 0x31 addr = 0xb9
    read ds941 0x32 addr = 0x0
    read ds941 0x33 addr = 0x5
    read ds941 0x34 addr = 0xc
    read ds941 0x35 addr = 0x0
    read ds941 0x36 addr = 0x0
    read ds941 0x37 addr = 0x80
    read ds941 0x38 addr = 0xff
    read ds941 0x39 addr = 0x4
    read ds941 0x3a addr = 0x0
    read ds941 0x3b addr = 0x0
    read ds941 0x3c addr = 0xcf
    read ds941 0x3d addr = 0x2
    read ds941 0x3e addr = 0x81
    read ds941 0x3f addr = 0x2
    read ds941 0x40 addr = 0x4
    read ds941 0x41 addr = 0x2a
    read ds941 0x42 addr = 0x0
    read ds941 0x43 addr = 0x0
    read ds941 0x44 addr = 0x0
    read ds941 0x45 addr = 0x0
    read ds941 0x46 addr = 0x0
    read ds941 0x47 addr = 0x0
    read ds941 0x48 addr = 0x0
    read ds941 0x49 addr = 0x0
    read ds941 0x4a addr = 0x0
    read ds941 0x4b addr = 0x0
    read ds941 0x4c addr = 0x0
    read ds941 0x4d addr = 0x0
    read ds941 0x4e addr = 0x0
    read ds941 0x4f addr = 0x8c
    read ds941 0x50 addr = 0x16
    read ds941 0x51 addr = 0x0
    read ds941 0x52 addr = 0x0
    read ds941 0x53 addr = 0x0
    read ds941 0x54 addr = 0x2
    read ds941 0x55 addr = 0x0
    read ds941 0x56 addr = 0x80
    read ds941 0x57 addr = 0x2
    read ds941 0x58 addr = 0x0
    read ds941 0x59 addr = 0x0
    read ds941 0x5a addr = 0xf9
    read ds941 0x5b addr = 0x7
    read ds941 0x5c addr = 0x7
    read ds941 0x5d addr = 0x6
    read ds941 0x5e addr = 0x44
    read ds941 0x5f addr = 0x4b
    read ds941 0x60 addr = 0x22
    read ds941 0x61 addr = 0x2
    read ds941 0x62 addr = 0x0
    read ds941 0x63 addr = 0x0
    read ds941 0x64 addr = 0x10
    read ds941 0x65 addr = 0x0
    read ds941 0x66 addr = 0x0
    read ds941 0x67 addr = 0x0
    read ds941 0x68 addr = 0x0
    read ds941 0x69 addr = 0x0
    read ds941 0x6a addr = 0x0
    read ds941 0x6b addr = 0x0
    read ds941 0x6c addr = 0x0
    read ds941 0x6d addr = 0x0
    read ds941 0x6e addr = 0x20
    read ds941 0x6f addr = 0x0
    read ds941 0x70 addr = 0x0
    read ds941 0x71 addr = 0x0
    read ds941 0x72 addr = 0x0
    read ds941 0x73 addr = 0x0
    read ds941 0x74 addr = 0x0
    read ds941 0x75 addr = 0x0
    read ds941 0x76 addr = 0x0
    read ds941 0x77 addr = 0x0
    read ds941 0x78 addr = 0x0
    read ds941 0x79 addr = 0x0
    read ds941 0x7a addr = 0x0
    read ds941 0x7b addr = 0x0
    read ds941 0x7c addr = 0x0
    read ds941 0x7d addr = 0x0
    read ds941 0x7e addr = 0x7e
    read ds941 0x7f addr = 0x0
    read ds941 0x80 addr = 0x0
    read ds941 0x81 addr = 0x0
    read ds941 0x82 addr = 0x0
    read ds941 0x83 addr = 0x0
    read ds941 0x84 addr = 0x0
    read ds941 0x85 addr = 0x0
    read ds941 0x86 addr = 0x0
    read ds941 0x87 addr = 0x0
    read ds941 0x88 addr = 0x0
    read ds941 0x89 addr = 0x0
    read ds941 0x8a addr = 0x0
    read ds941 0x8b addr = 0x0
    read ds941 0x8c addr = 0x0
    read ds941 0x8d addr = 0x0
    read ds941 0x8e addr = 0x0
    read ds941 0x8f addr = 0x0
    read ds941 0x90 addr = 0x0
    read ds941 0x91 addr = 0x0
    read ds941 0x92 addr = 0x0
    read ds941 0x93 addr = 0x0
    read ds941 0x94 addr = 0x0
    read ds941 0x95 addr = 0x0
    read ds941 0x96 addr = 0x0
    read ds941 0x97 addr = 0x0
    read ds941 0x98 addr = 0x0
    read ds941 0x99 addr = 0x0
    read ds941 0x9a addr = 0x0
    read ds941 0x9b addr = 0x0
    read ds941 0x9c addr = 0x0
    read ds941 0x9d addr = 0x0
    read ds941 0x9e addr = 0x0
    read ds941 0x9f addr = 0x0
    read ds941 0xa0 addr = 0x0
    read ds941 0xa1 addr = 0x0
    read ds941 0xa2 addr = 0x0
    read ds941 0xa3 addr = 0x0
    read ds941 0xa4 addr = 0x0
    read ds941 0xa5 addr = 0x0
    read ds941 0xa6 addr = 0x0
    read ds941 0xa7 addr = 0x0
    read ds941 0xa8 addr = 0x0
    read ds941 0xa9 addr = 0x0
    read ds941 0xaa addr = 0x0
    read ds941 0xab addr = 0x0
    read ds941 0xac addr = 0x0
    read ds941 0xad addr = 0x0
    read ds941 0xae addr = 0x0
    read ds941 0xaf addr = 0x0
    read ds941 0xb0 addr = 0x0
    read ds941 0xb1 addr = 0x0
    read ds941 0xb2 addr = 0x0
    read ds941 0xb3 addr = 0x0
    read ds941 0xb4 addr = 0x0
    read ds941 0xb5 addr = 0x0
    read ds941 0xb6 addr = 0x0
    read ds941 0xb7 addr = 0x0
    read ds941 0xb8 addr = 0x0
    read ds941 0xb9 addr = 0x0
    read ds941 0xba addr = 0x0
    read ds941 0xbb addr = 0x0
    read ds941 0xbc addr = 0x0
    read ds941 0xbd addr = 0x0
    read ds941 0xbe addr = 0x0
    read ds941 0xbf addr = 0x0
    read ds941 0xc0 addr = 0x0
    read ds941 0xc1 addr = 0x0
    read ds941 0xc2 addr = 0x82
    read ds941 0xc3 addr = 0x0
    read ds941 0xc4 addr = 0x68
    read ds941 0xc5 addr = 0x8
    read ds941 0xc6 addr = 0x0
    read ds941 0xc7 addr = 0x0
    read ds941 0xc8 addr = 0x40
    read ds941 0xc9 addr = 0x0
    read ds941 0xca addr = 0x0
    read ds941 0xcb addr = 0x0
    read ds941 0xcc addr = 0x0
    read ds941 0xcd addr = 0x2
    read ds941 0xce addr = 0xff
    read ds941 0xcf addr = 0x0
    read ds941 0xd0 addr = 0x0
    read ds941 0xd1 addr = 0x0
    read ds941 0xd2 addr = 0x0
    read ds941 0xd3 addr = 0x0
    read ds941 0xd4 addr = 0x0
    read ds941 0xd5 addr = 0x0
    read ds941 0xd6 addr = 0x0
    read ds941 0xd7 addr = 0x0
    read ds941 0xd8 addr = 0x0
    read ds941 0xd9 addr = 0x0
    read ds941 0xda addr = 0x0
    read ds941 0xdb addr = 0x0
    read ds941 0xdc addr = 0x0
    read ds941 0xdd addr = 0x0
    read ds941 0xde addr = 0x0
    read ds941 0xdf addr = 0x0
    read ds941 0xe0 addr = 0x0
    read ds941 0xe1 addr = 0x0
    read ds941 0xe2 addr = 0x82
    read ds941 0xe3 addr = 0x0
    read ds941 0xe4 addr = 0x68
    read ds941 0xe5 addr = 0x8
    read ds941 0xe6 addr = 0x0
    read ds941 0xe7 addr = 0x0
    read ds941 0xe8 addr = 0x0
    read ds941 0xe9 addr = 0x0
    read ds941 0xea addr = 0x0
    read ds941 0xeb addr = 0x0
    read ds941 0xec addr = 0x0
    read ds941 0xed addr = 0x2
    read ds941 0xee addr = 0x0
    read ds941 0xef addr = 0x0
    read ds941 0xf0 addr = 0x5f
    read ds941 0xf1 addr = 0x55
    read ds941 0xf2 addr = 0x42
    read ds941 0xf3 addr = 0x39
    read ds941 0xf4 addr = 0x34
    read ds941 0xf5 addr = 0x31
    read ds941 0xf6 addr = 0x0
    read ds941 0xf7 addr = 0x0
    read ds941 0xf8 addr = 0x0
    read ds941 0xf9 addr = 0x0
    read ds941 0xfa addr = 0x0
    read ds941 0xfb addr = 0x0
    read ds941 0xfc addr = 0x0
    read ds941 0xfd addr = 0x0
    read ds941 0xfe addr = 0x0

        

  • Hello Gj,

    It looks like with the pattern generator you are only able to drive one of the two displays so far? Please note that 941AS has two independent pattern generators for splitter or 2:2 mode. So for driving two screens with PATGEN I would suggest the following:

    1. Set the 0x5B register to 0x07 to force splitter mode

    2. Select port 0 by setting 0x1E = 0x01

    3. Configure the PATGEN registers for port 0 using indirect registers 0x66-0x67 per the pattern generator app note: https://www.ti.com/lit/pdf/snla132and enable the pattern with register 0x64-0x65

    4. Select port 1 by setting 0x1E = 0x02

    4. Configure the PATGEN registers for port 1 using indirect registers 0x66-0x67 per the pattern generator app note: https://www.ti.com/lit/pdf/snla132, and enable the pattern with register 0x64-0x65

    Please try the above steps with internal timing and internal clock mode first, and then try the above with internal timing and external clock mode and share the results

    Best Regards,

    Casey