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-Q1EVM: No back channel communication to DS90UB933

Part Number: DS90UB954-Q1EVM
Other Parts Discussed in Thread: USB2ANY, ALP

I have a custom imager that has parellel CMOS out, connected to a DS90UB933 serializer. I have the camera connected to a DS90UB954 EVM. I'm communicating with the EVM with the built-in USB2ANY interface and Analog LaunchPad.

I start by powering up the EVM without the camera attached. In the scripting window, I enter the following commands

board.WriteReg(0x0C, 0x02)             - Disable RX port 0, enable port 1

board.WriteReg(0xF9, 0x61)             - Set up direct access to RX1 control registers

board.WriteI2C(0x61, 0x6D, 0x05)       - Set Rx1 for Raw12/50Mhz

If I connect the camera before configuring these settings, APL hangs and I'm unable to control anything. 

Then I plug the camera into the RX1 port. The camera's status LED indicated the camera has booted and is working. Once connect, I get the following from in information tab in ALP:

The 'Current Port Status' for port RX1 looks right, 960bytes/line and 512 lines is correct for the imager. This make me think the forward data is being transmitted correctly. (I don't have a MIPI CSI2 device on my desk, so I haven't been able to look at the image itself.)

But there a couple weird things here as well. 

  1. The RX0 port appears to have image data as well with nothing connected to RX0. (Sometime is shows no connection on RX0)
  2. The Partner information is incorrect

If I go back to the scripting tab and run

board.PollRxDevices(remote=0, silent=0)

Found deserializer DS90UB954, at address 0x60

0

board.PollTxDevices(portIndex=1, remote=1, silent=0)

FAILED polling for Transmitter I2C address

1

So I can find the Rx Device (954) but not the Tx Device (933).

 

If I try to force the back channel on, I get:

board.ReadI2C(0x61, 0x58)        - Read BCC_CONFIG Register

0

board.WriteI2C(0x61, 0x58, 0x10) Config Back Channel always on. I’ve also tried values of 0x80 and 0x90

board.ReadI2C(0x61, 0x58)

16

board.PollTxDevices(portIndex=1, remote=1, silent=0)

FAILED polling for Transmitter I2C address

1

board.ReadI2C(0x61, 0x58)        - Back channel always on is reset by PollTxDevices call.

0

And same if I just try to read a register on the 933 (or try to read a reg on the other side of the link)

board.WriteI2C(0x61, 0x58, 0x80)

board.ReadI2C(0xB4, 0x0C)

0

hex(board.ReadI2C(0x61, 0x58))

'0x0'

I also tried to follow the directions in this document changing the registers for the 954 instead of the 914, also without any sign of communications.

Any suggestions on how to get that link working?

Thanks

Ethan

  • Hi Ethan,

    You should set the back channel (reg 0x58) to 0x58 to enable bidirectional control channel. Also try setting the alias for the serializer and communicate using the alias only:

    - Des reg 0x4C: Select the right RX port to write

    - Reg 0x5B SER DEVICE ID: Set the real serializer I2C address. This is typically loaded already

    - Reg 0x5D SlaveID[0]: Set the real CMOS sensor I2C address

    - Reg 0x5C SER_ALIAS_ID: Set the alias serializer I2C address

    - Reg 0x65 SLAVE_ALIAS_ID[0] (camera alias ID): Set the alias CMOS sensor I2C address

    Best,

    Jiashow

  • That helped but I'm still having problems. 

    The good:

    • I'm getting responses from the I2C addresses for the serializer and camera
    • I'm not getting responeses from other I2C addresses near the serializer and camera (readI2C returns 0)

    The weird:

    • I'm getting response from both the physical address and alias address. For example my serializer has a physical address of 0xB4 and I've set its alias to 0xB5. readI2C(0xB4, 0) and readI2C(0xB5, 0) both return values. Same thing for the camera at physical address 0xD8 and alias 0xD9

    The bad:

    • I don't believe the values coming back
    • If I read the partner address from the deserializer (DS90UB954, reg 0x5B), I get the partner is 0xB4. Register 0x00 on the serializer (DS90UB933) is the I2C address. If I readI2C(0xB4, 0x00), I get a response of 0xB0 (different from what is reported in the partner register and from the address I used in the I2Cread call. If try to read from I2C address 0xB0, I get all 0s. So I don't trust the values returned by I2Cread to the serializer
    hex(board.ReadI2C(0x61, 0x5b))  
    '0xb4'
    hex(board.ReadI2C(0xB4, 0x00)) 
    '0xb0'
    • If I read a configuration register on the camera, which should be constant, I get a different value every time I read it. 
    hex(board.ReadI2C(0xD8, 0x18))
    '0x2e'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x1e'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x3a'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x28'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x3c'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x3c'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x18'
    hex(board.ReadI2C(0xD8, 0x18))
    '0x3e'
    • Once in a while, I stop getting responses and I need to run the suggested configuration commands again to get I2C to respond with anything but 0. I'm using the following configuration script. 
    from time import sleep
    board.WriteReg(0x0C, 0x02)  # only enable Rx1
    board.WriteReg(0xF9, 0x61)  # Set I2C address 0x61 to RX1 registers, no need to write 0x4c
    board.WriteI2C(0x61, 0x6D, 0x05)  # Set RX1 to 12 bit LF
    
    board.WriteI2C(0x61, 0x58, 0x58)  # Setup back channel
    print("Ser I2C Add: " + hex(board.ReadI2C(0x61, 0x5B)))
    board.WriteI2C(0x61, 0x5B, 0xB4)  # ser I2C address
    board.WriteI2C(0x61, 0x5D, 0xD8)  # cam I2C address
    board.WriteI2C(0x61, 0x5C, 0xB5)  # ser I2C alias
    board.WriteI2C(0x61, 0x65, 0xD9)  # cam I2C alias
    
    sleep(3)
    
    print(hex(board.ReadI2C(0xB4, 0x00)))

    Thanks

    Ethan

  • Hi Ethan,

    The alias addresses you set is 8-bit, which means the last bit has to be 0. You cannot set the alias to 0xB5 or 0xD9. I would also check your real address to make sure it's in 8-bit form.

    Best,

    Jiashow