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.

DS90UB964-Q1: how to set i2c alias value

Part Number: DS90UB964-Q1

Hi,

my project like this:

sensor and eeprom <-i2c-> ser913 <-lvds->

==> des964 <-l2c-> host

sensor and eeprom <-i2c-> ser913 <-lvds->

there are two paths, one connect to des964 rx port 2, another connect to des964 rx port 3. each path have a ser913, a sensor and a eeprom, these i2c address are not independent.

after write 0x4c = 0x24(enable rx port 2), i read some register in des964:

0x5b(SER_ID) = 0xb0
0x5c(SER_ALIAS_ID) = 0
0x5d(SlaveID[0]) = 0
0x5e(SlaveID[1]) = 0
0x65(SlaveAlias[0]) = 0
0x66(SlaveAlias[1]) = 0

i suppose

0x5d shoud be sensor i2c addr,

0x5e shoud be eeprom i2c addr,

0x65 and 0x66 are alias addr of sensor and eeprom, however the result is not like that.

Q:

how to access ser913, sensor and eeprom?

sinkeu,

thanks.

  • Hello Sinkeu,

    I think the used cameras are identical, so you will need to define two different Aliasis (in 964 reg 0x5C) for the 913A connected to each port. Also you will need to define Slave addresses and Aliasis in the 964 reg 0x5D, 0x5E and 0x65, 0x66 respectivly.
    As said, this has to be done two times, for Port2 (0x4C=0x24) and Port3 (0x4C=0x38).
  • Hi,

    i write 0x5c = 0xbc(des964), this is alias addr for one ser913.

    it's always 0xff when reading ser913 register 0x00.

    after setting 0x58 = 0x58(des964), register 0x00 in ser913 is not 0xff, but constantly changing when reading it.

    i set:

    SlaveID[0] 0x5d = 0x60
    SlaveID[1] 0x5e = 0x50

    SlaveAlias[0] 0x65 = 0x6c  //sensor alias 
    SlaveAlias[1] 0x66 = 0x55  //eeprom alias

    read sensor via 0x6c, 0xff echo.

    Q:

    are there some other register should be set?

    thanks.

  • Hello Sinkeu,

    are you communicating with the 913A locally or only via the 964?
    can you try to connect to the 913A via I2C locally ?
  • Hi,

    this picture from spec SNLS500 –JULY 2016 DS90UB964-Q1.

    could i ask a question about there reserved register, what reserved mean, it is private or not used?

    thanks.

  • Hi,

    there are alias address in 964 for remote device accessing.

    however, if i am trying to communicate with the 913A, how to assign a remote device address via 913?

  • Hi,
    Most of the reserved registers are not used. Some of them are private.
  • Hi,
    I did not understand your question!! can you clarify?

    If you connect to the I2C bus of the 913A, can you communicate with it or not?

  • # i2cdetect 1
    WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x03-0x77. Continue? [Y/n] 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- 2a 2b -- -- -- -- 30: -- -- -- -- -- -- 36 37 -- -- -- -- -- 3d -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 5e 5f 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --

    Hi,

    connecting a mcu i2c hoster directly to i2c bus of 913a, i can communicate with eeprom.

    on the other hand, i am trying another test. all devices mount on i2c bus 1 are listed above.

    2a/2b -- corresponding to two eeprom

    36/37 -- corresponding to two sensor

    5e/5f -- corresponding to two 913

    3d -- corresponding to 964

    take rx port 3 for example, 964 setting below:

    setting for 913:
    SER_ID 0x5b = 0xb0
    SER_ALIAS_ID 0x5c = 0xbe
     
    setting for sensor:
    SlaveID[0] 0x5d = 0x60
    SlaveAlias[0] 0x65 = 0x6e
     
    setting for eeprom:
    SlaveID[1] 0x5e = 0x50
    SlaveAlias[1] 0x66 = 0x57

    right shifting each of these registers value by 1 bit, we will get: 

    0x57>>1 = 0x2b

    0x6e>>1 = 0x37

    ...

    that is to say, i can access eeprom via 0x2b, i can access sensor via 0x37...

    i send command like this:

    i2cget -f -y 1 0x37 0x00 --> ok

    i2cget -f -y 1 0x2b 0x00 --> read failed! no ack.

    i am using oscilloscope testing i2c signal, and i notice that when i access eeprom, UB964 send i2c slave address 0x50. in fact, eeprom i2c address is 0xa0.

    so, i change SlaveID[1] 0x5e from 0x50 to 0xa0. after that, i send "i2cget -f -y 1 0x2b 0x00", watching oscilloscope, it still 0x50. why?

    thanks.

  • note: ub964 register setting is set by an isp chip from ovt not by myself. i cannot see more detaily how ovt play with ub964, code is private.