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.

RTOS/DS90UB960-Q1: Inquiry about register setting of UB960 & UB935

Part Number: DS90UB960-Q1
Other Parts Discussed in Thread: DS90UB954-Q1

Tool/software: TI-RTOS

Hello.

I am using TDA2Px EVM board & Fusion application board with IMX390 FDP Link III camera module from D3 engineering.

This camera has UB953 inside.

I checked some register settings for D3's IMX390 camera on the VisionSDK source code like belows (iss_sensor_imx390.c).

{0x4C, 0x01, 0x10}, /* 0x01 */
{0x32, 0x01, 0x10}, /*Enable TX port 0*/
{0x33, 0x02, 0x10}, /*Enable Continuous clock mode and CSI output*/
{0xBC, 0x00, 0x10}, /*Unknown*/
{0x5D, 0x30, 0x10}, /*Serializer I2C Address*/
{0x65, (PORT_0_SER_ADDR << 1U), 0x10},
{0x5E, 0x42, 0x10}, /*Sensor I2C Address*/
{0x66, (PORT_0_SENSOR_ADDR << 1U), 0x10},

The actual i2c address of sensor is 0x21 and 0x30 for serializer(UB935).

Is it correct make double of actual i2c address for sensor? 

On more thing, I am using another IMX390 camera from leopard imaging.

As I know, in case of LI's camera, a actual i2c address of sensor is 0x34 and 0x30 for serializer(UB953).

Then, should I set the i2c address for sensor to 0x68 and 0x30 for serializer?

I already did like above, actually.

But, sensor doesn't send a ACK after access through i2c interface to host (accessing internal register of UB935 works well).

I'm so confused and I have no idea what can I do for this situation.

Could you give me some advice?

Thank you.

  • Hi SeungRyong,

    Since you are using two serializers (one from D3 and one from LI) and two cameras, you would need to differentiate between the serializers and camera modules by setting Alias IDs.

    First, select the Port you are looking at (register 0x4C):
    - The serializer ID should be 0x30. You can verify it by checking register 0x5B.
    - Set the serializer alias ID at register 0x5C. This should be even and should not be the same as any other IDs.
    - Verify if your camera address ID is 7 bits or 8 bits. If it's 7 bits, then your actual camera ID is 7 bits + 0 bit (left shifted by 1 bit)
    - Here, we assume the camera address IDs are 7 bits.
    - Then the SlaveID[0] should be 0x21<<1U for D3 module and 0x68<<1U for LI. This is your camera ID.
    - Set the camera alias ID at 0x65. This should be even and should not be the same as any other IDs.
    Now, you should just use the alias IDs to communicate to the desired device.

    For example, let's say your LI camera is in port 1. You would initialize it this way:
    {0x4C, 0x02, 0x10}, /* 0x01 */
    {0x5B,0x30, 0x10}, /* set up serializer ID*/
    {0x5C,0x18, 0x10}, /* set up serializer alias ID*/
    {0x5D,0x68<<1U, 0x10}, /* set up slave/camera ID, make sure 0x68 is your 7 bit address, if it's 8 bits, then no need to shift*/
    {0x65,0xC4, 0x10}, /* set up slave/camera alias ID */

    Now, you can communicate to the LI serializer via I2C address 0x18 and LI camera module via I2C address 0xC4.

    Best,
    Jiashow
  • Thank you Jiashow.

    By the way, since I have not got the datasheet of UB960 yet, I want to check again the addresses of registers.
    Are the values you have explained the correct UB960 register setting?
    The register setting for port 0 of the D3 imx390 camera declared in iss_sensor_imx390.c file is as follows.

    {0x4C, 0x01, 0x10}, /* 0x01 */
    {0x5D, 0x30, 0x10}, /*Serializer I2C Address*/
    {0x65, (PORT_0_SER_ADDR << 1U), 0x10},
    {0x5E, 0x42, 0x10}, /*Sensor I2C Address*/
    {0x66, (PORT_0_SENSOR_ADDR << 1U), 0x10},

    According to the above code, they use 0x5D register for the ID of the serializer and 0x65 register for the alias address of the serializer.
    It was not a 0x5B and 0x5C that you mentioned.
    The ID and the alias address for the camera also seems to be using a different address than the register address you mentioned.
    Could you check again the address of registers?
    I am using the "fusion application board" and UB960 deserializer.

    In addition, if you could send me the UB960 datasheet, it would be a great help.

    Thank you very much.
  • Hi SeungRyong,

    I am not sure why the example code says so. Register 0x5D is slaveID[0], register 0x5E is slaveID[1], and register 0x65 is SlaveAlias[0].

    We are unable to share the UB960 datasheet yet; however, you can use the DS90UB954-Q1 datasheet as reference. Most of the registers should be the same.

    Best,
    Jiashow
  • Hello.
    Thank you for your help.
    I think your suggestion is right.
    I guess there are some different kinds of problem on LI's camera.
    Anyway, I have cleared register indexing problem with your help.
    Thank you.

    B.R.
    Jeon.