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: remote slave operation

Part Number: DS90UB954-Q1

We are using a DS90UB954-Q1 with 2 cameras connected.

To communicate with the image sensors, we set up i2c slave mappings using registers 0x5D/0x65 etc.

All communications work fine, but we have a question regarding a specific requirement stated in section “7.5.3 Remote Slave Operation” of the data sheet:

 

To communicate with a remote slave device, the Rx Port which is intended for messaging also must be selected in register 0x4C.

 

Our experiments show that this does not seem to be necessary; when we disable all writes to register 0x45 access to both image sensors still works as intended.

Furthermore, the description of register 0x4C does not mention this function at all.

Since switching the register value depending on which slave we want to communicate with is somewhat cumbersome (requires either a i2c multiplexer driver or manual control), we wonder whether writing 0x4C is actually necessary, or if we simply misinterpret the documentation here. 

Thanks and bye

  • Hi Hanno,

    There are specific paged registers that need to be configured for each Rx Port. See an example of the description below:

      

    Register 0x4C is necessary when you want to configure settings for specific Rx Ports. But once you have finished configuring each Rx Port, then you do not need to worry about this register anymore. You can send I2C messages to the addresses that you've configured, without worrying about the current setting of register 0x4C.

    The main bits in register 0x4C that you want to focus on are the WRITE_PORT bits (0x4C[1:0]) and the READ_PORT bit (0x4C[4]). The WRITE_PORT bits select which Rx Port settings you are configuring. The READ_PORT bit is used if you want to read the register settings that you've made for a specific Rx Port. By default, these bits are 0, so Rx Port 0 is selected. 

    When Rx Port 0 is selected under the WRITE_PORT bits, any SlaveID/SlaveAlias settings that you've made will be mapped to remote devices at Rx Port 0. For example, if you set a SlaveID and SlaveAlias pair while Rx Port 0 is selected, then anytime you send an I2c message to the Slave Alias, it will be sent to the remote bus across Port 0. You can set a total of eight SlaveID/SlaveAlias pairs for each Rx Port, resulting in 16 total pairs for the UB954. Make sure SlaveAlias is unique across all 16 pairs.  

    Best,

    Justin Phan