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.

SN65DSI86: Unable to pass link training and bring up color bar test pattern

Part Number: SN65DSI86
Other Parts Discussed in Thread: TEST2

Hi,

I used the SN65DSI86 Register calculation excel file to calculate register values for my eDP panel, but keep getting link training failed bit turned on.

Also, I'm unable to bring up the color bar test pattern.

My current hardware setup is: Panel -> SN65DSI86 Eval board -> RasPi CM4.

I'm trying to get the test pattern working between the panel and the eval board first before I get the DSI side working.

This is the i2c code I'm currently using to setup the registers:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
#Disable ASSR for Standard DP
#i2cset -y 1 0x2C 0xFF 0x07
#i2cset -y 1 0x2C 0x16 0x01
#i2cset -y 1 0x2C 0xFF 0x00
#Refclk to 27Mhz
i2cset -y 1 0x2C 0x0A 0x06
#DSI mode - single channel, 4 lanes
i2cset -y 1 0x2C 0x10 0x26
#DSIA clk
i2cset -y 1 0x2C 0x12 0x59
#Enable enhanced frame - No ASSR
#i2cset -y 1 0x2C 0x5A 0x04
#Enable enhanced frame - ASSR
i2cset -y 1 0x2C 0x5A 0x05
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And the i2c dump:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 36 38 49 53 44 20 20 20 02 00 86 00 00 01 00 00 68ISD ?.?..?..
10: 26 00 59 00 00 00 00 00 00 00 00 00 00 00 00 00 &.Y.............
20: 80 07 00 00 38 04 00 00 00 00 00 00 30 00 00 00 ??..8?......0...
30: 12 00 00 00 58 00 0b 00 18 00 03 00 10 00 00 00 ?...X.?.?.?.?...
40: 01 00 00 00 80 00 20 08 58 04 88 00 1d 00 30 00 ?...?. ?X??.?.0.
50: 12 00 80 07 38 04 20 00 40 e4 0d 00 10 00 00 00 ?.??8? .@??.?...
60: a0 60 a4 00 00 00 00 00 00 00 00 00 00 00 00 00 ?`?.............
70: 00 00 00 00 00 01 02 00 80 00 00 00 00 00 00 00 .....??.?.......
80: 00 00 00 00 00 00 00 00 00 1f 7c f0 c1 07 1f 7c .........?|????|
90: f0 c1 07 20 80 00 00 04 01 00 00 00 00 00 00 00 ??? ?..??.......
a0: 01 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 ?...............
b0: 04 78 ac ac 08 6c 9c 9c 0c 5c 5c 5c 0c 0c 0c 0c ?x???l???\\\????
c0: 3f 3f 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 ???.............
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f0: 02 02 00 00 09 02 00 00 02 00 00 00 00 00 00 00 ??..??..?.......
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Datasheet of the eDP panel I'm using:

 Orient Display AFV19201080A0-15.6N12NTN.pdf

Any help or hint would be much appreciated.

  • Hi,

    Can you share the detail of the connection between the DSI86EVM and the panel? 

    I attached color bar with and without ASSR examples, can you see if either one of them works?

    3513.2DP_4DSI_RBR_800x600_Color_Bar.zip

    2DP_4DSI_RBR_800x600_Color_Bar_ASSR.zip

    Do you have the panel EDID information?

    Thanks

    David

  • Hi David,

    On the eval board I have dp female connector removed, and soldered 20-pin fpc connector instead. The flat ribbon cable is connecting the eval board and the custom connector board. I have first 2 pairs of the data lanes(0 1), AUX lane, gnd, and hpd signal coming from the eval board to the connector board. And on the other side of the connector board, there is a 30-pin fpc connector where the eDP panel is connected, receiving the same signals + the external signals like logic 3.3V and backlight power.

    Since I have no info on the panel supporting ASSR, I've tried both ASSR and no ASSR methods as you can see from my i2c code, but both fails link training and I'm unable to bring up the color bar test pattern.

    Unfortunately, this is all I have for the panel timing data:

    I did try pulling EDID data using the direct method, but was unable to access i2c address 0x50.

    Thanks,

    Kwan

  • I noticed 0xF4 register returns 0x08 when I disabled ASSR, and 0x09 when ASSR is enabled.

  • Hi,

    For disabling ASSR, did you have TEST2 pin pulled high to 1.8V through a 10k resistor?

    Can you use the following example to read the EDID? If you still can't read the EDID, we need to double check the AUX implementation.

    <aardvark>
    <configure i2c="1" spi="1" gpio="0" tpower="1" pullups="0" />
    <i2c_bitrate khz="100" />
    ======Enable I2C_ADDR_CLAIM1======
    <i2c_write addr="0x2D" count="1" radix="16">60 A1</i2c_write> />
    ======Write EDID base of 00 ======
    <i2c_write addr="0x50" count="0" radix="16">00</i2c_write> />
    ======Read 256 bytes of EEID======
    <i2c_read addr="0x50" count="256" radix="16">00</i2c_read> />
    </aardvark>

    Can you also verify the panel is driving the HPD high?

    Thanks
    David

  • Hi,

    Thanks for a quick reply.

    Yes, I have TEST2 pin pulled high using a switch on the eval board, which pulls it high to 1.8V through 4.7k resistor.

    I tried your example to read EDID, but still couldn't access the 0x50 i2c address...

    I'm measuring the HPD and it is about 2.5V

    The datasheet for the eval board does mention this, and I can confirm R5 is populated on the eval board.

  • Hi,

    I would remove R5 and make sure R111 is 51k. 

    Can you also remove the 100k pullup and pulldown and see if you can read the EDID?

    Thanks
    David

  • So I removed R5 and changed R111 to 51k.

    Also, removed R27 and R113 100kohm pullup and pulldown.

    But still the same result... can't pull the EDID.

    HPD does still go high(2.5V).

  • Hi,

    How about the DPCD register? Can you use this example to read the DPCD register?

    This example will read 16-bytes from sink’s DPCD registers 0x00000.
    <aardvark>
    <configure i2c="1" spi="1" gpio="0" tpower="1" pullups="0" />
    <i2c_bitrate khz="100" />
    ======Clear Status Registers for AUX Request======

    <i2c_write addr="0x2D" count="1" radix="16">F4 FF</i2c_write> />
    ======Send AUX Request for 16 bytes from DPCD 0x00000 ======
    ===========DPCD Address is 0x00000 ======
    <i2c_write addr="0x2D" count="1" radix="16">74 00 </i2c_write> />
    <i2c_write addr="0x2D" count="1" radix="16">75 00 </i2c_write> />
    <i2c_write addr="0x2D" count="1" radix="16">76 00 </i2c_write> />
    ===========Number of Bytes to Read is 16 ======
    <i2c_write addr="0x2D" count="1" radix="16">77 10 </i2c_write> />
    ===========Send AUX Read Request ======
    <i2c_write addr="0x2D" count="1" radix="16">78 91 </i2c_write> <sleep ms="20" />
    ======Read Status of AUX Request======
    ======Make sure SEND_INT is set and no errors======
    <i2c_write addr="0x2D" count="0" radix="16">F4</i2c_write> />
    <i2c_read addr="0x2D" count="1" radix="16">00</i2c_read> />
    ======Clear Status Registers for AUX Request======
    <i2c_write addr="0x2D" count="1" radix="16">F4 FF</i2c_write> />
    ======Read 16 bytes from AUX_RDATA======
    <i2c_write addr="0x2D" count="0" radix="16">79</i2c_write> />
    <i2c_read addr="0x2D" count="16" radix="16">00</i2c_read> />
    </aardvark>

    If you still can't, I wonder if the panel has a particular power up sequence requirement. Is there a way you can put the DP connector back on the EVM and use a standard DP monitor? I want to make sure the EVM itself is not broken.

    Thanks
    David 

  • Thanks. I will give this a try.

    So I was able to successfully bring up the test pattern and even the DSI output from the raspberry pi using my monitor connected to DP connector before.

    It is just this eDP panel giving me the issue.

  • So I used the following code to read the DPCD register:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    i2cset -y 1 0x2C 0xF4 0xFF
    i2cset -y 1 0x2C 0x74 0x00
    i2cset -y 1 0x2C 0x75 0x00
    i2cset -y 1 0x2C 0x76 0x00
    i2cset -y 1 0x2C 0x77 0x10
    i2cset -y 1 0x2C 0x78 0x91
    sleep 0.02
    i2cget -y 1 0x2C 0xF4
    i2cset -y 1 0x2C 0xF4 0xFF
    i2cget -y 1 0x2c 0x79
    i2cget -y 1 0x2c 0x7A
    i2cget -y 1 0x2c 0x7B
    i2cget -y 1 0x2c 0x7C
    i2cget -y 1 0x2c 0x7D
    i2cget -y 1 0x2c 0x7E
    i2cget -y 1 0x2c 0x7F
    i2cget -y 1 0x2c 0x80
    i2cget -y 1 0x2c 0x81
    i2cget -y 1 0x2c 0x82
    i2cget -y 1 0x2c 0x83
    i2cget -y 1 0x2c 0x84
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    But getting 0x00s..:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    0x09
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    0x00
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hi,

    Did you see the SEND_INT bit get set when reading the status register 0xF4? 

    Do you have a way to probe or decode the AUX bus traffic to make sure the DPCD register 0x00000 read request is being sent by the DSI86?

    I would double check and make sure the panel itself is properly powered up and read for any EDID/SCDC register read request.

    Thanks

    David 

  • SEND_INT bit does get set when I read register 0xF4, but only when I set ASSR enabled.

    I did make some change in handling the backlight enable and pwm signal for the backlight in an effort to make the power up sequence close to what's on the datasheet.

    But now I get 0x41 for 0xF4 instead of 0x09. Link training still fails.

  • Actually the i2c failure bit was being set only when I set the EN low for few ms before setting it to high and run the i2c code to set the registers

  • Hi,

    Do you have a way to access a DP monitor AUX and see if you can read the monitor's EDID and DPCD register? Or do you have a way to decode the AUX traffic out of the DSI86?

    Thanks

    David

  • Hi,

    What is the proper way to decode the AUX traffic out of the DSI86?

  • Hi,

    You can hack a DPA-400 to decode the AUX traffic automatically, https://www.unigraf.fi/product/dpa-400-displayport-aux-channel-monitor/ or you can manually decode the AUX traffic using a scope. 

    The AUX uses Manchester-II encoding, below is the block diagram of the AUX transaction. The DSI86 gives a total of 28 zero pulses before the end of the AUX Sync pattern.

    Thanks

    David

  • I'm not seeing any data traffic for AUX under a o-scope.

    I'm still getting 0x09(AUX_RPLY_TOUT and SEND_INT bits) for 0xF4.

    Maybe my panel is defective? I think I'm following the power sequence correctly.

    Thanks.

  • Hi,

    If you are getting AUX time out, then this means the sink is not responding to the AUX request from the DSI86. 

    I was thinking going back to the DP monitor and see if the monitor is able to respond to the AUX request from the DSI86, this will help decoupling the issue between the DSI86 being configured correctly and a faulty panel.

    Thanks

    David

  • Ok, I can get the DP port back on the eval board, and make sure DP monitor still works fine.

    I just gotta order a new DP port as the old one got melted.

    Thanks.

  • Hi,

    Please also make sure the 100k pullup/pulldown is populated on the AUX bus as the DP requires it while the eDP is optional and depends on the panel requirement. 

    Thanks

    David 

  • Hi,

    So I re-populated pullup/pulldown and got DP port back on the eval board.

    Tested my DP monitor and it works flawlessly.

    Can output test patterns and DSI display output from RasPi.

    Also, I can read dpcd registers and EDID from 0x50 i2c address fine.

    For my edp panel, I've tried 2 different panels(same model), but neither of them have any AUX data traffic.

    I'm thinking it could be the signal integrity issue with my custom connector board..

  • Hi,

    With DP monitor now working, can you probe the AUX bus when you are doing the EDID/DPCD register read? This is to make sure the scope is set up correctly. 

    The AUX bus is only 1Mbps, so I would think signal integrity is not an issue. Below is a diagram of the AUX bus, is this how it is being designed? Please note the pullup/pulldown are optional with the eDP and depend on the eDP panel vendor requirement.

      

    Thanks

    David

  • Hi,

    I will measure the AUX bus with digital probe of the oscilloscope.

    I believe that is how it is designed on the panel side.

    Also, can registers having wrong EDID info cause the AUX to not respond at all?

    I think I might have had some wrong data put on to the panel video register calculator excel sheet.

    I got a better spec sheet of the panel now. One that has all the EDID info I need.

  • It looks like I still get the same video register values even with the different EDID info put in to the calculator excel sheet:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <aardvark>
    <configure i2c=1 spi=1 gpio=0 tpower=1 pullups=0/>
    <i2c_bitrate khz=100/>
    ======REFCLK Frequency ======
    <i2c_write addr=0x2D count=1 radix=16> 0A 6 </i2c_write>/>
    ======DSI Mode ======
    <i2c_write addr=0x2D count=1 radix=16> 10 2A </i2c_write>/>
    ======DSIA Clock ======
    <i2c_write addr=0x2D count=1 radix=16> 12 6F </i2c_write>/>
    ======DSIB Clock ======
    <i2c_write addr=0x2D count=1 radix=16> 13 6F </i2c_write>/>
    ======DP Datarate ======
    <i2c_write addr=0x2D count=1 radix=16> 94 E0 </i2c_write>/>
    ======Enable PLL ======
    <i2c_write addr=0x2D count=1 radix=16> 0D 1 </i2c_write> <sleep ms=10/>
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • DPCD read:

    EDID read:

  • Hi,

    Did you program the DSI86 registers with the new calculated value from the spreadsheet and the register still show up with the old value?

    Thanks

    David 

  • Yes, exactly the same values for all the video registers.

    Also, for edp panels I noticed our connector board has the LCD_self_test pin just floating. Would this be an issue?

  • Hi,

    Can you send me the EDID info?


    Also, the LCD_SELF_TEST pin is a don't care for DSI86, please check with the panel vendor on the termination of this pin.

    Thanks

    David

  • NT156FHM-N41-BOE.pdf

    This is the spec sheet for the panel.

    EDID info is in the last few pages.

    Thanks,

    Kwan

  • Hi,

    Below is the value I got from the EDID which matches with the EDID spec.

    <aardvark>
    <configure i2c=1 spi=1 gpio=0 tpower=1 pullups=0/>
    <i2c_bitrate khz=100/>

    ======ASSR RW control ======
    <i2c_write addr=0x2D count=1 radix=16> FF 7 </i2c_write>/>
    <i2c_write addr=0x2D count=1 radix=16> 16 1 </i2c_write>/>
    <i2c_write addr=0x2D count=1 radix=16> FF 0 </i2c_write>/>

    ======REFCLK Frequency ======
    <i2c_write addr=0x2D count=1 radix=16> 0A 6 </i2c_write>/>

    ======DSI Mode ======
    <i2c_write addr=0x2D count=1 radix=16> 10 2A </i2c_write>/>

    ======DSIA Clock ======
    <i2c_write addr=0x2D count=1 radix=16> 12 2E </i2c_write>/>

    ======DSIB Clock ======
    <i2c_write addr=0x2D count=1 radix=16> 13 2E </i2c_write>/>

    ======DP Datarate ======
    <i2c_write addr=0x2D count=1 radix=16> 94 E0 </i2c_write>/>

    ======Enable PLL ======
    <i2c_write addr=0x2D count=1 radix=16> 0D 1 </i2c_write> <sleep ms=10/>

    ======Enable enhanced frame in DSI86 ======
    <i2c_write addr=0x2D count=1 radix=16> 5A 4 </i2c_write>/>

    ======Number of DP lanes ======
    <i2c_write addr=0x2D count=1 radix=16> 93 10 </i2c_write>/>

    ======Start Semi-Auto Link Training ======
    <i2c_write addr=0x2D count=1 radix=16> 96 0A </i2c_write> <sleep ms=20/>

    ======CHA Active Line Length ======
    <i2c_write addr=0x2D count=2 radix=16> 20 80 07 </i2c_write>/>

    ======CHB Active Line Length ======
    <i2c_write addr=0x2D count=2 radix=16> 22 0 0 </i2c_write>/>

    ======Vertical Active Size ======
    <i2c_write addr=0x2D count=2 radix=16> 24 38 04 </i2c_write>/>

    ======Horizontal Pulse Width ======
    <i2c_write addr=0x2D count=2 radix=16> 2C 20 00 </i2c_write>/>

    ======Vertical Pulse Width ======
    <i2c_write addr=0x2D count=2 radix=16> 30 06 00 </i2c_write>/>

    ======HBP ======
    <i2c_write addr=0x2D count=1 radix=16> 34 CF </i2c_write>/>

    ======VBP ======
    <i2c_write addr=0x2D count=1 radix=16> 36 47 </i2c_write>/>

    ===== HFP ======
    <i2c_write addr=0x2D count=1 radix=16> 38 30 </i2c_write>/>

    ===== VFP ======
    <i2c_write addr=0x2D count=1 radix=16> 3A 03 </i2c_write>/>

    ===== DP-18BPP Disable ======
    <i2c_write addr=0x2D count=1 radix=16> 5B 0 </i2c_write>/>

    ===== Color Bar Enable ======
    <i2c_write addr=0x2D count=1 radix=16> 3C 12 </i2c_write>/>

    ===== Enhanced Frame, and Vstream Enable ======
    <i2c_write addr=0x2D count=1 radix=16> 5A 0C </i2c_write>/>

    </aardvark>

    Thanks

    David

  • ok that is odd. You actually got different values. Maybe there's an issue with my excel sheet?

    I will try those values once I get a new custom connector board that uses the J6 port.

    I'm unable to replace the DP port to FPC connector anymore as it will damage the board permanently.

    Thanks,

    Kwan

  • Kwan

    Please make sure to use the EDID_Formatting_Space tab to input the EDID data, you can then copy -> paste (value option) into the Main_Input_Page. On the Main_Input_Page tab, select 'No' for the EDID Inputs in Datasheet Table option.

    Thanks

    David

  • Hi David,

    I got the new board that is using J6 port and the screen now works perfectly.

    I can output test patterns as well as DSI output from RasPi to the screen.

    Thank you for you help.

    Kwan

  • Kwan

    Awesome, thanks for the update and the good news.

    David