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.

How to read serializer ub913 and slave sensor ov9716 register value through i2c by deserializer ub964

Hello .

I am developing a serializer- deserializer project. And my hardware environment is

host MCU: IMX6QP

deserializer:UB964

serializer:UB913

sensor:OV9716 .

But i can not read UB913 and OV9716 through i2c .

My log is

camera UB964_mipi entry probe
UB964_read_reg:addr 0x30 reg 0x3=0x30
UB964_read_reg:addr 0x30 reg 0x0=0x60
UB964_read_reg:addr 0x30 reg 0x6=0x0
UB964_read_reg:addr 0x30 reg 0x7=0xfe
UB964_read_reg:addr 0x30 reg 0x5b=0xb0
UB964_read_reg:addr 0x30 reg 0x5c=0x18
ub913_sed_alias0_read_reg:0xc write reg=0x0 error -5
OV9716_Slave0_read_reg:0x36 write reg=0x300a error -5.

In this log , i can read/write UB964 through 0x30(0x60>>1) but when i read ub913 with addr 0x0c(0x18>>1) ,the i2c does not ack;

Because I read UB964 0x5c=0x18, so SER Alias shoud be 0x0c(0x18>>1) ,is that right ?

Can anyone help me ?

  • Hello,

    Yes, you should be reading what's in reg 0x5C for serializer.

    Are you setting the right RX port (reg 0x4C)? Are you getting lock (read reg 0x4D)?

    Before reading the serializer I2C and setting the alias registers, make sure you set the correct RX port and have lock to the deserializer.

    Best,

    Jiashow

  • Hi JIASHOW ;

    This is my register configure ;

      retval = UB964_read_reg(0x00,&RegVal);
      retval = UB964_read_reg(0x06,&RegVal);
      retval = UB964_read_reg(0x07,&RegVal);

      retval = UB964_write_reg(0x0c,0xcf);

      retval = UB964_write_reg(0x10,0x81);

      retval = UB964_write_reg(0x11,0x85);
      retval = UB964_write_reg(0x12,0x89);
      retval = UB964_write_reg(0x13,0x8d);
      retval = UB964_write_reg(0x32,0x01);

      retval = UB964_write_reg(0x1f,0x02);
      retval = UB964_write_reg(0x33,0x01);
      retval = UB964_write_reg(0x20,0xe0);

      retval = UB964_write_reg(0x4c,0x01);
      retval = UB964_read_reg(0x4d,&RegVal);
      retval = UB964_write_reg(0x58,0x58);
      retval = UB964_read_reg(0x5b,&RegVal);
      retval = UB964_write_reg(0x5c,0x18);  
      retval = UB964_read_reg(0x5c,&RegVal);
      retval = UB964_write_reg(0x5d,OV9716_SLAVE1_I2C_ADDR);
      retval = UB964_write_reg(0x65,OV9716_SLAVE1_ALIAS_ADDR);
      retval = UB964_write_reg(0x7c,0x01);
      retval = UB964_write_reg(0x70,0x1f);
      retval = UB964_write_reg(0x6d,0x7f);

      ub913_sed_alias0_read_reg(0x00,&RegVal);
      OV9716_Slave0_read_reg(0x300a,&RegVal);

    Then the log of reading from UB964 is

    UB964_read_reg:addr 0x30 reg 0x3=0x30
    UB964_read_reg:addr 0x30 reg 0x0=0x60
    UB964_read_reg:addr 0x30 reg 0x6=0x0
    UB964_read_reg:addr 0x30 reg 0x7=0xfe
    UB964_read_reg:addr 0x30 reg 0x4d=0x13
    UB964_read_reg:addr 0x30 reg 0x5b=0xb0
    UB964_read_reg:addr 0x30 reg 0x5c=0x18
    ub913_sed_alias0_read_reg:0xc write reg=0x0 error -5
    OV9716_Slave0_read_reg:0x36 write reg=0x300a error -5 

    Could you help me to check this ?

    Thank you very much ;

    Best;

  • Hi Qincai,

    If you repeatedly read reg 0x4D, does it still show lock change? Or is the lock stable?

    Does your I2C have clock stretching? This is required in order to access the remote registers? Or if possible could you increase the watchdog timer?

    Best,

    Jiashow