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.

DS90UB940-Q1: camera deserializer is DS90UB940,serializer is 921, serializer side box power up and down for about 21 times, LCD show the camera totally black

Part Number: DS90UB940-Q1

Hi team,

I forward a question from one of our customers as follows, can you give some suggestions for troubleshooting

one sending box using serializer is 921,  and the receivering  box using deserializer is TI DS90UB940.

The sending box power up and down for about 21 times, the LCD of the  receivering  box show the camera totally black.

we dump the 2 IC's register as blow:

mek_8q_raite:/ # i2cdump -f -y 8 0x2c
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 58 04 00 f0 fe 1e 00 18 00 00 00 00 00 00 00 00 X?.???.?........
10: 00 00 00 00 00 00 00 00 00 01 00 00 23 40 00 00 .........?..#@..
20: 00 00 42 28 08 00 83 84 00 00 00 00 00 00 00 00 ..B(?.??........
30: 00 00 90 25 01 00 00 98 00 00 00 02 20 60 23 00 ..?%?..?...? `#.
40: 43 03 03 00 60 88 00 00 0f 00 00 08 00 00 63 00 C??.`?..?..?..c.
50: 03 10 00 01 80 00 00 00 00 7f 20 20 00 00 00 00 ??.??....? ....
60: 00 00 00 00 10 00 00 00 00 00 00 00 00 04 00 00 ....?........?..
70: 00 00 00 07 07 08 00 00 00 00 00 00 02 00 00 00 ...???......?...
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
a0: 00 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 ..?.............
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c0: 00 00 00 00 00 00 00 00 c0 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: 5f 55 42 39 34 30 00 00 00 00 00 00 00 00 00 00 _UB940..........
mek_8q_raite:/ #

root@s32v234evb:~# i2cdump -y -f 0x02 0x0c
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 18 00 00 d2 80 00 58 00 00 00 00 00 05 00 00 00 ?..??.X.....?...
10: 00 00 00 10 00 00 fe 5e a1 a5 00 00 00 00 00 00 ...?..?^??......
20: 00 00 25 00 00 00 00 00 00 24 00 20 00 00 00 00 ..%......$. ....
30: 03 10 00 00 00 00 08 34 00 0a 20 21 00 00 f0 00 ??....?4.? !..?.
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
50: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............
60: 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ....?...........
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c0: 00 00 80 00 78 00 00 60 40 00 00 00 00 00 00 00 ..?.x..`@.......
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: 5f 55 42 39 32 31 00 00 00 00 00 00 00 00 00 00 _UB921..........
root@s32v234evb:~#

It seems the de-serializer and serializer is LOCK state ,but why no camera stream output?

Best Regards,

Amy Luo

  • Hi Amy, 

    Can you share the datasheet of the LCD as well as the video timing?

    Do you know if the customer is able to verify the input to the serializer? Has the customer tried using our internal pattern generator to generate video?

    Best,

    Shu

  • Hi Shu,

    The customer later tested the register value is < 940_921的寄存器值2.txt >, and the register value during normal plotting < 940_921的寄存器值_ok. txt>

    The difference is very small. There are some differences in the 3B register at the deserialization end (the normal value is 3F, and the abnormal value is 01 or 02). Can you see the reason from here?

    940_921的寄存器值2.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    mek_8q_raite:/ # i2cdump -f -y 8 0x2c
    No size specified (using byte-data access)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00: 58 04 00 f0 fe 1e 00 18 00 00 00 00 00 00 00 00 X?.???.?........
    10: 00 00 00 00 00 00 00 00 00 01 00 00 23 40 00 00 .........?..#@..
    20: 00 00 42 28 08 00 83 84 00 00 00 00 00 00 00 00 ..B(?.??........
    30: 00 00 90 25 01 00 00 98 00 00 00 01 20 60 23 00 ..?%?..?...? `#.
    40: 43 03 03 00 60 88 00 00 0f 00 00 08 00 00 63 00 C??.`?..?..?..c.
    50: 03 10 00 01 80 00 00 00 00 7f 20 20 00 00 00 00 ??.??....? ....
    60: 00 00 00 00 10 00 00 00 00 00 00 00 00 04 00 00 ....?........?..
    70: 00 00 00 07 07 08 00 00 00 00 00 00 02 00 00 00 ...???......?...
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    a0: 00 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 ..?.............
    b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    c0: 00 00 00 00 00 00 00 00 c0 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: 5f 55 42 39 34 30 00 00 00 00 00 00 00 00 00 00 _UB940..........
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    940_921的寄存器值_ok.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    mek_8q_raite:/ #
    mek_8q_raite:/ # i2cdump -f -y 8 0x2c
    No size specified (using byte-data access)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00: 58 04 00 f0 fe 1e 00 18 00 00 00 00 00 00 00 00 X?.???.?........
    10: 00 00 00 00 00 00 00 00 00 01 00 00 23 40 00 00 .........?..#@..
    20: 00 00 42 28 08 00 83 84 00 00 00 00 00 00 00 00 ..B(?.??........
    30: 00 00 90 25 01 00 00 98 00 00 00 3f 20 60 23 00 ..?%?..?...? `#.
    40: 43 03 03 00 60 88 00 00 0f 00 00 08 00 00 63 00 C??.`?..?..?..c.
    50: 03 10 00 01 80 00 00 00 00 7f 20 20 00 00 00 00 ??.??....? ....
    60: 00 00 00 00 10 00 00 00 00 00 00 00 00 04 00 00 ....?........?..
    70: 00 00 00 07 07 08 00 00 00 00 00 00 02 00 00 00 ...???......?...
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    a0: 00 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 ..?.............
    b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    c0: 00 00 00 00 00 00 00 00 c0 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 ................
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Thanks,

    Amy

  • Hi Amy, 

    Register 3B corresponds to the Adaptive Equalizer. There could be a signal strength issue. Do you know if the customer has tested the signal quality of the FPD-Link? 

    Also can you clarify what the two separate register dumps are? Does the customer have other 921-940 systems that are working correctly and just one that is not outputting video?

    If you have pictures of the setup to share along with any schematics that would be appreciated. We don't know if there is a hardware issue or device configuration so the first step is to make sure all the hardware is correct. 

    Best,

    Shu

  • Hello Shu,

    The customer feedback:

    1.The hardware is ok, and the problem is occur in low probability, attached is the 940 and 921 schematics.

    And 940 deserializer schematic  :940.pdf

    2. I check the 940 code ,and find the below test code to draw color bar, but I #define the 'CONFIG_GEN_COLOR_BAR' 

    and not take effect, I doubt if the code is invalid or not, I can't find the register 33,B0,B1,B2 on my 940 data sheet, can you help to confirm it ?


    static int init_deserializer(struct ds90ub940_data *data)
    {
    int ret = 0;

    LOGD_INFO("df_camera_log: %s ++", __func__);
    des_write(data, 0x01, 0x02);
    #ifdef CONFIG_GEN_COLOR_BAR
    LOGD_INFO("df_camera_log: %s CONFIG_GEN_COLOR_BAR", __func__);
    des_write(data,0x33, 0x03);
    des_write(data,0xB0, 0x02); // IA_AUTO_INC=1
    des_write(data,0xB1, 0x01); // PGEN_CTL
    des_write(data,0xB2, 0x01); // PGEN_ENABLE=1
    des_write(data,0xB2, 0xb3); // PGEN_CFG
    des_write(data,0xB2, 0x1E); // PGEN_CSI_DI \u6b64\u5904\u53ef\u4fee\u6539data type YUV/RGB/RAW data
    des_write(data,0xB2, 0x05); // PGEN_LINE_SIZE1
    des_write(data,0xB2, 0x00); // PGEN_LINE_SIZE0 line size\uff0c\u5217\u6570
    des_write(data,0xB2, 0x00); // PGEN_BAR_SIZE1
    des_write(data,0xB2, 0xF0); // PGEN_BAR_SIZE0
    des_write(data,0xB2, 0x02); // PGEN_ACT_LPF1
    des_write(data,0xB2, 0xd0); // PGEN_ACT_LPF0 active line per frame\uff0c\u884c\u6570
    des_write(data,0xB2, 0x03); // PGEN_TOT_LPF1
    des_write(data,0xB2, 0x00); // PGEN_TOT_LPF0
    des_write(data,0xB2, 0x0C); // PGEN_LINE_PD1
    des_write(data,0xB2, 0x67); // PGEN_LINE_PD0
    des_write(data,0xB2, 0x0A); // PGEN_VBP
    des_write(data,0xB2, 0x0A); // PGEN_VFP
    des_write(data,0xB2, 0xAA); // PGEN_COLOR0
    des_write(data,0xB2, 0x33); // PGEN_COLOR1
    des_write(data,0xB2, 0xF0); // PGEN_COLOR2
    des_write(data,0xB2, 0x7F); // PGEN_COLOR3
    des_write(data,0xB2, 0x55); // PGEN_COLOR4
    des_write(data,0xB2, 0xCC); // PGEN_COLOR5
    des_write(data,0xB2, 0x0F); // PGEN_COLOR6
    des_write(data,0xB2, 0x80); // PGEN_COLOR7
    des_write(data,0xB2, 0x00); // PGEN_COLOR8
    des_write(data,0xB2, 0x00); // PGEN_COLOR9
    des_write(data,0xB2, 0x00); // PGEN_COLOR10
    des_write(data,0xB2, 0x00); // PGEN_COLOR11
    des_write(data,0xB2, 0x00); // PGEN_COLOR12
    des_write(data,0xB2, 0x00); // PGEN_COLOR13
    des_write(data,0xB2, 0x00); // PGEN_COLOR14
    des_write(data,0xB2, 0x00); // Reserved
    #else
    LOGD_INFO("df_camera_log: %s data->index = %d", __func__, data->index);
    if(data->index == 0)
    {
    #if 0
    des_write(data, 0x0C, 0x2B);
    des_write(data, 0x4C, 0x01);
    des_write(data, 0x58, 0x5E);
    des_write(data, 0x6D, 0x7C);
    des_write(data, 0x72, 0xE4);
    des_write(data, 0x4C, 0x12);
    des_write(data, 0x4B, 0x1E);
    des_write(data, 0x7C, 0xe0);
    des_write(data, 0x70, 0x5E);
    des_write(data, 0x20, 0x00);
    des_write(data, 0x33, 0x01);
    des_write(data, 0xBC, 0x0);
    #endif
    }
    else
    {
    #if 0
    des_write(data, 0x0C, 0x2B);
    des_write(data, 0x4C, 0x01);
    des_write(data, 0x58, 0x5A);

    des_write(data, 0x6D, 0x7C);
    des_write(data, 0x72, 0xE4);

    des_write(data, 0x4C, 0x12);
    des_write(data, 0x4B, 0x1E);

    des_write(data, 0x7C, 0xe0);
    des_write(data, 0x70, 0x5E);

    des_write(data, 0x20, 0x00);
    des_write(data, 0x33, 0x01);
    des_write(data, 0xBC, 0x0);
    #endif
    }


    #endif
    return ret;
    }

    Next I will check the  Built-In Self Test (BIST)  function of 940.

  • Hi Amy, 

    We do not have registers 0xB0, 0xB1 and 0xB2 on the 940 deserializer. If the customer if trying to generate a color bar test, can you have them follow the below app note?

    https://www.ti.com/lit/an/snla132g/snla132g.pdf?ts=1648849443187

    Best,

    Shu

  • Hi Amy, 

    Can you check with the customer on how they came up with the 0xB0/B1/B2 registers?

    Best,

    Shu

  • Hello Shu,

    Can you check with the customer on how they came up with the 0xB0/B1/B2 registers?

    I will check with the customer.

    The customer feedback:

    internal pattern generator , can you provide a list of registers filling value to enable internal pattern generator ? We are trying but not success now.

    I can type:
    [vm1] mek_8q:/ # i2cset -f -y 8 0x2c 0x64 0x05

    to enable 940 deserializer's self pattern generator color bar successfully now ,but I also want to  get color bar from 921 serializer ,can you give me some suggest ?

  • Here is the customer's feedback:

    OK, maybe the macro 'CONFIG_GEN_COLOR_BAR' is waste code ,I just omit it.

    And We tested and find ,when problem occur ,I try to display pattern ("i2cset -f -y 8 0x2c 0x64 0x05") and not pattern display at all ,and I reset the ub940 chip, then display pattern and normal camera output are all ok, so we think the ub940 maybe have some issue.

    Because we dumped the register of ub940 when issue occur ,and seems it is not different from normal ok situation, so we only need to check some pin signal to debug this issue?

  • As above, we upload the  940 deserializer schematic  ,can you suggest how we can check the status of ub940,for example the CMLOUTP/CMLOUTL  ,LOCK pin, PASS pin ?

  • Hi Amy, 

    In order for customer to use 921 color bar/pat gen, they just need to go through the same process as described in the Pattern Generator App Note but set the pat gen registers in the 921.

    One thing to note, if the customer wishes to use internal pclk, the internal oscillator for the 921 runs at 200 MHz rather than the 940's 140 MHz. The N divider value would need to be set to the proper value to get the desired clk rate. 

    I want to verify my understanding of the situation with you:

    1. Customer is able to successfully use 940 to generate pattern to the LCD?

        Is this done with just powering up the 940 side and using internal pclk (no connection to sending box)? what is the pclk? 

    2. Occasionally, when customer try 940 patgen, there is not a display until a reset is done on the 940?

          Is the serializer being powered down and up when this is happening? 

          In End-to-End set up - Typically if the serializer is being powered cycled, it distrubs the timing coming into the deserializer and requires a soft reset on the 940 side to recover and regenerate the timing. 

    Can you also share the timing that the customer is using? 

    As for checking the status of the 940, the CLK and CSI data outputs would be useful to monitor. Since customer is just using 940 patgen at the moment and having issues, checking CMLout  would not be helpful. 

    Best,

    Shu

  • Hello Shu,

    Here are the customer's feedbacks:

    1. Customer is able to successfully use 940 to generate pattern to the LCD?

    ==>Yes, I use 'i2cset -f -y 8 0x2c 0x64 0x05' to set the 0x64 register of 940,to generate pattern ,when the problem not occur.When the problem occur, I use above command line will not generate pattern.

    1. Occasionally, when customer try 940 patgen, there is not a display until a reset is done on the 940?

    ==>Yes, when the problem occur.

            3.Typically if the serializer is being powered cycled, it distrubs the timing coming into the deserializer and requires a soft reset on the 940 side to recover and regenerate the timing. 

    ==>If we not soft reset on the 940, does 940 knows that it need to be soft reset? Or notified from 921 to reset? We do powered cycled and PIN 21=PDB of 921 will low for 1 second the up. When the problem occur, the PIN7=PASS and PIN1=LOCK of 940 are all high, so 940 can't detect that it should be soft reseted, can you give us some suggestion? Thanks !

    Our problem is ,when the problem occur, the camera stream can be shown on the LCD, but the 940 's PIN7=PASS and PIN1=LOCK of 940 are all high,the LOCK bit in the register 0x1c is '1',we don't know how to walkaround it.

  • Hello Amy,

    When this issue happens, can you try doing a digital reset to the 940 to see if the situation is recovered and the display comes up?

    Set 0x01[0] = 1 to reset the 940. 

    Best Regards,

    Casey 

  • Set 0x01[0] = 1 to reset the 940. 

    ==>Yes, both soft reset 940 or 921,or hard reset 940 or 921,will recovery this problem and the LCD can show the stream from camera.

    And we are checking the CMLOUTP/CMLOUTL to check the eye-diagram, and do we should set some registers to make eye-diagram output ?

  • Hi Amy, 

    To enable CMLOUT, the below registers from the 940 datasheet needs to be set. 

    Best,

    Shu