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.

Linux/DS90UB954-Q1: Drivers or script examples for the DS90UB954/DS90UB953 setup

Part Number: DS90UB954-Q1

Tool/software: Linux

Hi,

I am working on bringing up a board using the DS90UB954 and DS90UB953 pair, we have an CSI imager and an accelerometer hooked up to the DS90UB953 Serializer, the deserializer is hooked up to an application processor running embedded linux (kernel version 4.9).

1) Are there any Linux drivers that are available for the DS90UB954 (and possibly the DS90UB953)? Or any example drivers from similar chips I could use as a guide?

2) I can't seem to communicate to the the serializer or the remote I2C bus across the FPD3-Link, I can see that the deserializer is locked and I can read registers from it, the SER_ID is read back correctly (and doesn't appear if the cable is not plugged in). But when I try to access either the serializer or the remote I2C slaves I don't get an ack back). I am told my application processor supports I2C clock stretching, and I can see the I2C clocks stop during the transaction. After 254ms the transaction ends with no-ack.

I am following the example from the datasheet to setup the I2C channel:

echo 4c > /sys/bus/i2c/devices/0-0030/reg_addr
echo 1 > /sys/bus/i2c/devices/0-0030/reg_value


echo 58 > /sys/bus/i2c/devices/0-0030/reg_addr
echo d8 > /sys/bus/i2c/devices/0-0030/reg_value

echo 5c > /sys/bus/i2c/devices/0-0030/reg_addr
echo 30 > /sys/bus/i2c/devices/0-0030/reg_value

echo 5d > /sys/bus/i2c/devices/0-0030/reg_addr
echo d0 > /sys/bus/i2c/devices/0-0030/reg_value

echo 65 > /sys/bus/i2c/devices/0-0030/reg_addr
echo d0 > /sys/bus/i2c/devices/0-0030/reg_value

echo 7c > /sys/bus/i2c/devices/0-0030/reg_addr
echo 1 > /sys/bus/i2c/devices/0-0030/reg_value

echo 70 > /sys/bus/i2c/devices/0-0030/reg_addr
echo 1f > /sys/bus/i2c/devices/0-0030/reg_value

When I I try to read from the remote i2c slave I get the following message:

No ACK from address 0xd0, 0:0!
Error: Unable to write i2c!
: Device or resource busy

Thanks,

Adam

  • Hello-

    Register 0x58 should be set to 0x5E assuming you are operating the 953 in synchronous mode (50 Mbps back-channel). Here is an example script:


    # Set up IDs
    UB954 = 0x60
    UB953ID = 0x30
    UB953 = 0x18
    OVTID = 0x60
    OVT = 0xC4

    # Set up Port0
    board.WriteI2C(UB954, 0x4C, 0x01)

    # Set up Back Channel Config (0x58)
    board.WriteI2C(UB954,0x58,0x5E)

    # Set up SER ID
    #board.WriteI2C(UB954,0x5B,UB953ID)
    # Set up SER Alias ID
    board.WriteI2C(UB954,0x5C,UB953)
    # Set up Slave/Camera ID
    board.WriteI2C(UB954,0x5D,OVTID)
    # Set up Slave/Camera Alias ID
    board.WriteI2C(UB954,0x65,OVT)

    Regards,
    Davor
  • Thanks Davor,

    I went back to check the synchronous vs asynchronous state, and low and behold the device was setup in asynchronous state without being fed a clock. I switched the mode to synchronous state and now see the transactions across the bridged I2C interface. Thank you.

    I take it that there are not any publicly availabe linux drivers for this device or device family?

    Thanks,

    Adam

  • Adam,

    That's correct.

    Davor