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.

DS90UB953A-Q1: In case of connection DS90UB953/DS90UB960, what should I set the value of the registers in DS90UB953?

Part Number: DS90UB953A-Q1

Hi TI staff,

Please see our block diagram of system below, and the system condition of settings  below.

Condition:
- For example, I'll use to through RX0.
- I set a registers for DS90UB960.
  address, data
  0x0C,0x0F
  0x4C, 0x00
  0x58,0x5E
  0x5D,0x48 :It's target the slave address 0x48 of device.
  0x5B,0x00
  0x5C,0x60 : ALIAS of target device's "slave address" is 60h.

I want to access to I2C devices attached the DS90UB953 from the host.

Q1)In this case, is it okay if the register value of DS90UB953 is default?

Q2) If Q1 is incorrect, please tell me the DS90UB953 of register settings for us.

Regards,

Shuichi Sugi

  • Hi Shuichi,

    The link should work without any register writes to the 953. If you would like to change any configurations, there are several example scripts and register settings provided in the 953 datasheet.

    Some notes on your 960 register configurations:

    • If you are only using 2 serializers, you don't need to enable all 4 RX ports in register 0x0c.
    • Writing 0x0 to register 0x4c does not allow you to write any RX port-specific registers. To configure RX0 registers, write 0x01 to register 0x4c.
    • Why are you writing 0x00 for the serializer ID in register 0x5B? The SER ID is normally loaded automatically from the remote serializer.

    Best,

    Lucas

  • Hi Lucas,

    thank you for answering for us.

    ------
    Said Lucas:
    The link should work without any register writes to the 953.

    Answered Sugi.
    Q2) In this case, I'm understanding that we don't have to set the 953 of any registers. Is this correct or incorrect?

    ------
    Said Lucas:
    If you are only using 2 serializers, you don't need to enable all 4 RX ports in register 0x0c.

    Answered Sugi.
    OK, I see.

    ------
    Said Lucas:
    Writing 0x0 to register 0x4c does not allow you to write any RX port-specific registers. To configure RX0 registers, write 0x01 to register 0x4c.

    Answered Sugi.
     I made a mistake. In case of writing, it was 0x01 instead of 0x00. I see.

    ------
    Why are you writing 0x00 for the serializer ID in register 0x5B? The SER ID is normally loaded automatically from the remote serializer.

    Answered Sugi.
     I don't understand meaning of 0x5B function.

    Q3) I have to do not care address 0x5B register? In other words, Is it OK, we not write anything to our address here?

    ------
    Q4) Then, Is it OK, if the 960 registers setting correct below?
    Note:
    - I wanna use a RX0, and write registers to RX0 on the960.
    - I wanna communicate the target I2C device of slave address(0x48) from host.
    - Assign a new slave address(0x60) as an ALIAS instead of the original slave address() of the I2C target device.

    - I set a registers for DS90UB960.
    address, data
    0x0C,0x01
    0x4C, 0x01
    0x58,0x5E
    0x5D,0x48 :It's target the slave address 0x48 of device.
    0x65,0x50 :Assign ALIAS instead of the target "slave address".
    0x5C,0x60 : ALIAS of target device's "slave address" is 60h.

    Q5) If the setting registers above is incorrect, Could you correct that.
    ------


    Q6) In this system, Can we communicate to target device normally I2C method as AILIS(Slave add:0x60) from the Host?

     Could you please answer me about our questions (Q2-Q6).

    Regards,
    Shuichi Sugi

  • Hi Shuichi,

    Q2) In this case, I'm understanding that we don't have to set the 953 of any registers. Is this correct or incorrect?

    Yes that's correct.

    Q3) I have to do not care address 0x5B register? In other words, Is it OK, we not write anything to our address here?

    That's correct, you don't need to write anything in register 0x5B.

    Q4) Then, Is it OK, if the 960 registers setting correct below?

    Sorry I missed this earlier, but you actually don't need writes to registers 0x5D or 0x65. These are used to set the slave address of a device connected to the serializer (such as an imager or sensor) and assign a slave alias to this device. To assign a slave alias to the serializer, you only need to use register 0x5c as the serializer address is automatically detected and placed in register 0x5B.

    Q5) If the setting registers above is incorrect, Could you correct that.

    You can use the following configuration to set up one serializer on RX0:

    • address, data
    • 0x0C, 0x01
    • 0x4C, 0x01
    • 0x58, 0x5E
    • 0x5C, 0x60
    Q6) In this system, Can we communicate to target device normally I2C method as AILIS(Slave add:0x60) from the Host?

    Yes, communicating to address 0x60 over the I2C bus will be remapped to the 953 serializer on RX0.

    Best,

    Lucas

  • Hi Lucas,

     Thank you for answering for us.

     I understood about Q2-Q3. but I don't understand some things.
     So I added some information to the block diagram. Then I ask you some question on this condition.


    Q7)How to communicate to registers of the 935(I2C:0x18) on RX0?
          And could you write registers setting this case for me.

    Q8) How to communicate to registers of the Image Sensor(I2C:0x36) on RX0?
            And could you write registers setting this case as well.

    And I have more question. It's about protocol of communication to the I2C end device.

    Please see the sequence of I2C protocol to communication for end devises below(Refer: SNLA131A–July 2011–Revised April 2013).

    Q9) Please tell me what should we set what slave address on yellow letters mean?

         EX: In case of communication to seriarizer(originary  I2C:0x18) from the host.

           Is it OK if we set 0x30 at first Slave address?. 

           Is it OK if we set 0x60 at second Slave address?. 

    Q10) Please tell me more detail about the sequence of I2C protocol to communication for end devises.

    Regards,
    Shuichi Sugi

  • Hi Sugi, 

    Monday, May 29th is a US public holiday, we will resume activity on this thread beginning Tuesday. Thanks for your patience. 

    Regards, 
    Logan

  • Hi Shuichi,

    I noticed that your acceleration sensor I2C address is 0x69. Typically 8-bit I2C addresses are even numbers because the 0th bit is used to determine if you are performing a read or write operation. Is the address 0x68/0x69 for an I2C write/read?

    Additionally, I noticed that some aliases you chose are odd numbers such as 0x51 and 0x63. Aliases should be even numbers because the 0th bit will be used to differentiate read and write operations, so you will need to change these.

    You can use the following register configuration to set all of your device aliases.

    •  960 configuration:
      • 0x0C, 0x09 (enable RX0 and RX3)
      • 0x4C, 0x01 (select RX0 for RX port-specific reads/writes)
      • 0x58, 0x5E (enable I2C_PASS_THROUGH)
      • 0x5C, 0x60 (set SER alias 0x60)
      • 0x5D, 0x36 (set slave ID0 as image sensor 0x36)
      • 0x5E, 0x48 (set slave ID1 as temperature sensor 0x48)
      • 0x5F, 0x68 (set slave ID2 as acceleration sensor 0x68)
      • 0x65, 0x50 (set image sensor alias 0x50)
      • 0x66, 0x__ (set temperature sensor alias, 0x51 isn't valid)
      • 0x67, 0x52 (set acceleration sensor alias 0x52)
      • 0x4C, 0x38 (select RX3 for port-specific reads/writes)
      • 0x58, 0x5E (enable I2C_PASS_THROUGH)
      • 0x5C, 0x__ (set SER alias, 0x63 isn't valid)
      • 0x5D, 0x36 (set slave ID0 as image sensor 0x36)
      • 0x5E, 0x48 (set slave ID1 as temperature sensor 0x48)
      • 0x5F, 0x68 (set slave ID2 as acceleration sensor 0x68)
      • 0x32, 0x01 (select TX0 for TX port-specific reads/writes)
      • 0x33, 0x01 (enable CSI-2 output, change bits 6:1 as necessary)
      • 0x20, 0x90 (enable forwarding on RX3 and RX0)
    • 953 alias 0x60 configuration:
      • 0x39, 0x36 (set target ID0 as image sensor 0x36)
      • 0x3A, 0x48 (set target ID1 as temperature sensor 0x48)
      • 0x3B, 0x68 (set target ID2 as acceleration sensor 0x68)
      • 0x41, 0x50 (set image sensor alias 0x50)
      • 0x42, 0x__ (set temperature sensor alias, 0x51 isn't valid)
      • 0x43, 0x52 (set acceleration sensor alias 0x52)
    • 953 alias 0x63 (this will need to be changed) configuration:
      • 0x39, 0x36 (set target ID0 as image sensor 0x36)
      • 0x3A, 0x48 (set target ID1 as temperature sensor 0x48)
      • 0x3B, 0x68 (set target ID2 as acceleration sensor 0x68)

    To communicate with any SERs or sensors, first select the correct RX port using register 0x4C on the deserializer. Then you can access the SER or sensor using its alias, or physical address if it doesn't have an alias. I suggest reading sections 7.5.3-7.5.5 of the 960 datasheet to better understand remote I2C transactions to slave devices.

    Q9) Please tell me what should we set what slave address on yellow letters mean?

    Figure 5 shows data in parallel as it is sent/received by the host and the slave device. The first two boxes show the slave address as it is sent by the host and then received by the slave. Therefore both of these boxes will have the same slave address, which would be 0x60 in your example.

    The offset address boxes refer to the register address.

    Q10) Please tell me more detail about the sequence of I2C protocol to communication for end devises.

    The SNLA131A app note is a good resource to understand how I2C communication works over FPD-Link III. Please let me know if you have any additional questions.

    Best,

    Lucas

  • Hi Lucas,

     Thank you for answering for us.

     In fact, we could communicated to remote I2C devise.
    I show you registers setting at success.


    <960 configuration: I tested connect only RX3
      0x0C,0x08 (enable RX3)
      0x4C, 0x08 (select RX3 for port-specific writes)
      0x58,0x5E (enable I2C_PASS_THROUGH)
      0x5C,0x60<<1=0xC0(set SER alias)
      0x5D,0x48<<1=0x90(set slave ID1 as temperature sensor 0x48)
      0x65,0x50<<1=0xA0(set temperature sensor alias)

      0x4C, 0x30 (select RX3 for reading remote I2C )

    <953 configuration:
      We do not set anything


    And I ask your questions.

    Lucas said:
     I noticed that your acceleration sensor I2C address is 0x69. Typically 8-bit I2C addresses are even numbers because the 0th bit is used to

      --- skip --

    0th bit will be used to differentiate read and write operations, so you will need to change these.

    Shuichi Sugi answered:

    I have shown the I2C slave address as-is in the diagram above.
     For example :0x51

    However, the setting to the 960 register is the upper 7 bits. Therefore, it’s necessary to one shift the implemented slave address. As a result, the following register values are always even.

     For example :0xA2

     Our problem has been solved.

     Thank you for your help.

    Regards,

    Shuichi Sugi