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.

DS90UB954-Q1: how to config long chain 953/954?

Part Number: DS90UB954-Q1

Hello team,

       We have a design for long chain 954/953 connection as below:

        

         CPU-->954---->953---->[954--->953---->sensor] 

         How CPU can configure remote 954/953/sensor(red one) through the first 954/953 using FPD-Link III?

         How I2C operation can be passed to the remote 954/953/sensor?

Best regards

  • Hello,

    can you provide the I2C addresses used for each device?

  • Hello Hamzeh, 

        The I2c address for each device is shown as below:

        no need to config camera sensor(output data automatically), so i didn't show it's i2c address.

    Best regards

  • Hello xingzhu,

    please try the following.
    Let's assume the first 954+953 is link (A) and the second 954+953 is link (B).

    CPU --> 954(A) --> 953(A) --> 954(B) --> 953(B)


    Program 954(A):
    0x58[6]=1 for Pass-throu enabled
    0x5B: SerID = 0x18
    0x5C: SerAlias = 0x60
    0x5D: SlaveID = 0x3D
    0x65: SlaveAlias = 0x62
    0x5E: SlaveID = 0x18
    0x66: SlaveAlias = 0x64

    Program 954(B):
    0x58[6]=1 for Pass-throu enabled
    0x5B: SerID = 0x18
    0x5C: SerAlias = 0x64

    It will be better if you use another IDx for the 953(A) to avoid and colision.

  • Hello Hamzeh, 

             Thanks for your reply, I will try these setting and feedback later.

    Best regards

  • Hello Hamzeh, 

            I have tested the configure. There are few questions about the setting:

           1. 954(A) 's SerID and (0x5E: SlaveID) is the same 0x18. I tried the setting, and found out the all i2c request was actually map to 953(A), not 953(B)。even if I use alias to do i2c request, all operations are acked by 953(A). Does this mean, the 953(A) and 953(B) must have different i2c address?

           2. in 954(A), you set (0x5E: SlaveID = 0x18, 0x66: SlaveAlias = 0x64), and set the 954(B) 's serID as the same. As far as i know, 954(A)'s slave means the slave must attatch to 953(A), but now 953(B) is actually attatched to 954(B). So should 954(A) 's slave seting for 953(B) placed in 954(B)?

           3. As descried in the datasheet, 954(B) should automatically load 953(B)'s i2c address into its 0x5B, right?

    Best regards

           

  • Hello Xingzhu,

    1) yes, it is better to use diferent I2C addresses for 953(A) and 953(B).

    2) No. 953(B) is the Serializer for 954(B), it can't be a slave. It is only a slave of 954(A) as it does not have a direct connection.

    3) Correct, it will automatically load 953(B) I2C Address but the Alias you need to enter by your self.

  • Hello Hamzeh,

                  as the configure showed below:

    CPU --> 954(A) --> 953(A) --> 954(B) --> 953(B)


    Program 954(A):
    0x58[6]=1 for Pass-throu enabled
    0x5B: SerID = 0x18
    0x5C: SerAlias = 0x60
    0x5D: SlaveID = 0x3D
    0x65: SlaveAlias = 0x62
    0x5E: SlaveID = 0x18
    0x66: SlaveAlias = 0x64

    Program 954(B):
    0x58[6]=1 for Pass-throu enabled
    0x5B: SerID = 0x18
    0x5C: SerAlias = 0x64

    after theset setting, 954(A) can acess 953(A) and 954(B). but all i2c acess to 953(B) was actually set to 953(A), and 954(B) didn't automatically load 953(B)'s address.

    That means 954(B) and 953(B) seems not connected right. But it's not 953(B)'s prolbem, because I tried connect 953(B) to 954(A), 954(A) can automatically load it's address, and connection are ok.

    So It's very strange that 953(B) is not accessible for this long chain configure.

    What can I do to confirm the root cause for this problem?

    -------------------------additional info-------------------------------------

    here is my 954(A) setting:
    0x1f, 0x02 , // CSI0 800mbps
    0x33, 0x03 , // CSI_EN & CSI0 4L
    0x20, 0x00 , // forwarding all RX to CSI0

    /* RX_PORT0 */
    0x4c, 0x01 , // RX_PORT0
    0x58, 0x5e , // enable pass throu
    0x5c, 0x08 , // SER_ALIAS
    0x5d, 0x7a , // slave 954 0x3d
    0x65, 0x80 , // SLAVE_ALIAS
    0x5e, 0x30 , // slave 1 953 0x18
    0x66, 0x40 , // SLAVE 1_ALIAS
    0x6d, 0x7c , // 953 CSI MODE
    0x70, 0x1E , // VC0 and CSI0 datatype 0x1e yuv422_8b
    0x7c, 0x81 , // FV active low 8bit

    here is my 953(A) setting:
    0x1, 0x33 , //delay 500 us
    0x3, 0xc5 , //delay 10us
    0xd, 0x55 //delay 10us

    here is my 954(B) setting:
    0x1f, 0x02 , // CSI0 800mbps
    0x33, 0x03 , // CSI_EN & CSI0 4L
    0x20, 0x00 , // forwarding all RX to CSI0

    /* RX_PORT0 */
    0x4c, 0x01 , // RX_PORT0
    0x58, 0x5e , // enable pass throu
    0x5c, 0x40 , // SER_ALIAS
    0x6d, 0x7c , // 953 CSI MODE
    0x70, 0x1E , // VC0 and CSI0 datatype 0x1e yuv422_8b
    0x7c, 0x81 , // FV active low 8bit

    CPU --> 954(A) --> 953(A) --> 954(B) --> 953(B)
    so i2c address are:
    954(A):0x30
    953(A):0x18, alias 0x04
    954(B):0x3d, alias 0x40
    953(B):0x18, alias 0x20

    all i2c access to 953(B) is actually reponse by 953(A), becuase:
    0. first, read register 0x3a using alias 0x04, the register value is 0x00;
    1. then I set register 0x3a as 0x10 using alias address 0x20; the read back value is 0x10;
    2. then I read register 0x3a using alias addresee 0x04, it's now 0x10;

    Best regards

  • Hello Hamzeh,

            I tried another sensor module using 913, 954(B) still can't load 913's address automatically. this module's 913 adress is 0x58, is different from 953(A).

            I draw a picture for sensor module using 953 and 913:

            

  • Hello Xingzhu,

    can you try connect to the local I2C bus of 954(B) and see if you can communicate with 953(B)?

    Also, do you have LOCK between 954(B) and 953(B)?

  • Hello Hamzeh,

             1. 954(B) and 953(B) connected only use coax cable. The 954(B)'s pin 48(LOCK) is not connected to 953(B). Does LOCK is necessary for 953(B) and 954(B)?

              2. “try connect to the local I2C bus of 954(B) ”,it would need hardware change, we will try but it would take a long time....

    Best regards

  • No you do not need to connect LOCK.

    LOCK is an indicator that the DES is connected with the SER. So, if you have connection LOCK should be read "high".

    Do you read "High" on 954(B) LOCK?

  • Hello Hamzeh, 

            I measured the 954(B)'s LOCK pin:

            

           Does this mean 954(B) and 953(B) are not connected OK?

           As far as I know, the LOCK is automatically done by FPD-Link III, it there any special register setting need to be set?

          954(B)'s DEVICE_STS(0x04) register is 0xd3. It seems 954(B) refclk is valid.

    Best regards

  • Correct, it looks like there is no connection between 953(B) and 954(B).

    The same thing we can see in reg 0x04 = 0xD3 which means LOCK is low.

  • Hello Hamzeh,

            We have found out that the 954(B) can't lock 953(B) problem is caused by hardware issue. After fix the hardware issue, 954(B) and 953(B) can LOCK now.

            But the i2c access to 953(B) is actually responsed by 953(A).

            It seems 953(A) and 953(B) can't have the same real i2c address.

    Best regards

  • Yes, please change the I2C address of one 953 device and adjust your settings in 954(A) accordingly.